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