在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了。这些表明中断已经发生了。但为什么跑飞了呢?请高手指教
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |