写了个测试定时器中断的程序,但是发现进不了中断,IFR位可以清0但是就是无法写入值,很奇怪 大家能帮我看看吗,谢谢拉
.title "main.asm" .mmregs .def _c_int00 ;程序入口 .ref _TINT0_ISR ;Timer0中断服务程序
STACK .usect "STACK",10H ;分配堆栈空间
;设定定时器0控制寄存器的内容 K_TCR_SOFT .set 0B<<11 ;TCR第11位soft=0 K_TCR_FREE .set 0B<<10 ;TCR第10位free=0
K_IPTR .set 0080h ;指向0080H,默认是FF80 K_TCR_PSC .set 0B<<6 ;TCR第9-6位,可设TDDR一样,也可不设自动加载 K_TCR_TRB .set 1B<<5 ;TCR第5位TRB=1此位置1,PSC会自动加载的 K_TCR_TSS .set 0B<<4 ;TCR第4位TSS=0 K_TCR_TDDR .set 1001B<<0 ;TCR第3-0位TDDR=1001B K_TCR .set K_TCR_SOFT|K_TCR_FREE|K_TCR_PSC|K_TCR_TRB|K_TCR_TSS|K_TCR_TDDR K_TCR_STOP .set 1B<<4 ;TSS=1时计数器停止 PERIOD .set 9999 ;定义计数周期 .data
XF_Flag .word 1 ;当前XF的电平标志,如果XF_Flag=1,则XF=1
;================================================ ;主程序: ;================================================ .text _c_int00: STM #STACK+10H,SP ;设堆栈指针SP LD #0,DP ;设数据地址DP STM #XF_Flag,AR2 ;AR指向XF标志
;改变中断向量表位置 LDM PMST,A AND #7FH,A ;保留低7位,清掉高位 OR #K_IPTR,A STLM A,PMST *f=50MHz,定时2ms时: *根据定时器长度计算公式:Tt=T*(1+TDDR)*(1+PRD) *给定TDDR=9,PRD=9999,CLKOUT主频f=40MHz,T=25ns *Tt=20ns*(1+9)*(1+9999)=2000us=2ms *f=100Mhz,定时最大是:10ns*2^4*2^16=10ms, STM #0FFFFh,IFR NOP NOP NOP SSBX INTM STM #0080h,IFR ;清除挂起的中断 NOP NOP stm #0008h,IMR ;允许Timer0中断 NOP STM #K_TCR_STOP,TCR ;停止计数器0 STM #PERIOD,TIM STM #PERIOD,PRD ;设定计数周期 STM #K_TCR,TCR ;开始Timer0 NOP NOP rsbx intm ;开中断 end: nop B end
|