在codewarrior3.1下,我选择了汇编语言和绝对地址模式。想测试下实时中断。可是老是出问题,但是编译又没有错。程序如下:
XDEF RTITIMER XDEF Entry ; export 'Entry' symbol ABSENTRY Entry ; for absolute assembly: mark this as application entry point ; include derivative specific macros INCLUDE 'mc9s12dg128.inc'
ROMStart EQU $4000 ; absolute address to place code/constant data
; variable/data section ORG RAMStart ; Insert here your data definition. For demonstration, temp_byte is used.
; code section ORG ROMStart Entry: CLI ; enable interrupts LDS #$3FD0 LDAA #$80 STAA CRGINT LDAA #$FF STAA DDRB LDAA #$FF STAA PORTB LDAA #$7F STAA RTICTL LOOP BRA LOOP
RTITIMER: MOVB #$80, CRGFLG BRSET PORTB, #$01, LEDOFF LDAA #$FF STAA PORTB BRA DONE LEDOFF LDAA #$FE STAA PORTB DONE RTI
;************************************************************** ;* Interrupt Vectors * ;************************************************************** ORG $FFFE
JMP Entry ; Reset ORG $FFF0 JMP RTITIMER END
问题如下:
在模拟环境下,我点全速运行时,程序老是跑到1002这个地址。CCR里面的I为变成了1,察看堆栈里面,各个寄存器也入栈了,堆栈显示程序是从loop bra loop跳出去的。CGRFLG的RTIIE也变成1了。这些表明中断已经发生了。但为什么跑飞了呢?请高手指教 |