首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

比较寄存器异常

比较寄存器异常

我有个问题麻烦帮我看一下,两周了解决不了
F2407REGS.H如下:
IMR .set 0004h ;中断屏蔽寄存器
IFR .set 0006h ;中断标志寄存器
SCSR1 .set 07018h ;系统模块控制寄存器1
PIVR .set 0701Eh ;系统中断矢量寄存器
WDKEY .set 07025h ;WDKey 寄存器
WDCR .set 07029h ;WD 控制寄存器
T1CNT .set 7401h ;通用定时器 1 计数寄存器
T1PR .set 7403h ;通用定时器 1 周期寄存器
T1CON .set 7404h ;通用定时器 1 控制寄存器
COMCONA .set 7411h ;比较控制寄存器 A
CMPR1 .set 7417h ;全比较单元 1 比较寄存器
EVAIMRA .set 742Ch ;事件管理器中断屏蔽寄存器 A
EVAIFRA .set 742Fh ;事件管理器中断标志寄存器 A
KICK_DOG .macro ;程序监视器复位宏定义
LDP #00E0h ;DP→7000h~707Fh
SPLK #05555h, WDKEY ;WDCNTR由下一步复位被使能
SPLK #0AAAAh, WDKEY ;WDCNTR 被复位
.endm
相应的CMD文件如下:
-stack 10
MEMORY
{ PAGE 0 :
         VECS : origin = 0h , length = 040h
         PROG : origin =08000h, length = 800h /* PROGRAM */
PAGE 1 :
        MMRS : origin = 0h , length = 060h
        B2 : origin = 0060h , length = 020h /* DARAM */
        B01 : origin = 0200h , length = 0200h /* DARAM */
}
/*-----SECTIONS ALLOCATION ---*/
SECTIONS
{
      .reset : { } > VECS PAGE 0 /* Interrupt Vector Table*/
      .vectors : { } > VECS PAGE 0 /* Interrupt vector table */
      .text : { } > PROG PAGE 0 /* Code */
      .stack : { } > B2 PAGE 1 /* 保存堆栈stack的内容*/
      .mmrs : { } > MMRS PAGE 1 /* Memory mapped registers */
}
程序如下:
.title "MSM.asm"
.include "F2407REGS.H" ;引用头部文件
.copy "vector.h"
.def _c_int0
;--------------FOLLOW IS PROGRAM-----------
.TEXT
;--------------INITIAL PROGRAM-------------
_c_int0:
CLRC CNF ;B0
SETC OVM
SPM 0
SETC SXM
SETC INTM
LDP #0E0H
SPLK #06FH,WDCR ;DISABLE WATCHDOG
KICK_DOG
SPLK #02C5H,SCSR1;CLKIN 10M CLKOUT 20M 284H/285H
;--------------------INITIAL EVA---------
LDP #0E8H
SPLK #300,CMPR1 ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SPLK #8200H,COMCONA
SPLK #600,T1PR
SPLK #0,T1CNT
SPLK #0840H,T1CON
;------------------INITIAL INTERRUPT--------
LDP #0E8H
SPLK #0FFFH,EVAIFRA
SPLK #0200H,EVAIMRA
LDP #0H
LACC #0FFH
SACL IFR
LACC #0000010B
SACL IMR
CLRC INTM
WAIT:
NOP
B WAIT
;-------------END INITIAL-----
;-------------T1 UNDER INTERRUPT PROGRAM---------
_C_INT2:
;---------------PROTECT LOCATE---------------
LDP #0
SST #0,60H
SST #1,61H
LDP #PIVR>>7H
LACL PIVR
XOR #0029H
BCND REC,NEQ
LDP #0E8H
SPLK #0200H,EVAIFRA
SPLK #100,CMPR1 ;??????????????????????????????????????????????
SPLK #400,CMPR1 ;??????????????????????????????????????????????

;-------RECIVER LOCATE----
REC:
LDP #0
LST #1,61H
LST #0,60H
CLRC INTM
RET
PHANTOM:
KICK_DOG
RET
第一个问题:这个程序在F2407-A开发板上可以进中断,而在我自己设计的2406板上不能进中断(程序没有做任何改动);
第二个问题:就是给CMPR1赋值的时候有点不对劲,程序第一次给CMPR1赋值的时候(单步执行,行后用;!!!标示),CMPR1里的值立刻刷新显示300(十进制)。进了中断以后有两次赋值,SPLK #100,CMPR1 SPLK #400,CMPR1 当执行这两条语句时,CMPR1的值不变,依然是300,当下一次进中断时才刷新CMPR1 显示400,SPLK #100,CMPR1这句执行没执行不知道,请问这是什么原因?敬盼佳音!谢谢。
返回列表