📄 sci.asm
字号:
st0_temp .usect ".b20",1 ;
st1_temp .usect ".b20",1 ;
context .usect ".b20",7 ;62-68
SCI_FLAG .usect ".data0",1 ;SCI标志寄存器
TXD_PTR .usect ".data0",8 ;发送的数据存放区
RXD_PTR .usect ".data0",8 ;接收到的数据存放区
.include "F2407REGS.H" ;引用头部文件
.def _c_int0
;(1)建立中断向量表
.sect ".vectors" ;定义主向量段
RSVECT B _c_int0 ;PM 0 复位向量 1
INT1 B GISR1 ;PM 2 中断优先级1 4
INT2 B PHANTOM ;PM 4 中断优先级2 5
INT3 B PHANTOM ;PM 6 中断优先级3 6
INT4 B PHANTOM ;PM 8 中断优先级4 7
INT5 B PHANTOM ;PM A 中断优先级5 8
INT6 B PHANTOM ;PM C 中断优先级6 9
RESERVED B PHANTOM ;PM E (保留位) 10
SW_INT8 B PHANTOM ;PM 10 用户定义软件中断 -
SW_INT9 B PHANTOM ;PM 12 User S/W int -
SW_INT10 B PHANTOM ;PM 14 User S/W int -
SW_INT11 B PHANTOM ;PM 16 User S/W int -
SW_INT12 B PHANTOM ;PM 18 User S/W int -
SW_INT13 B PHANTOM ;PM 1A User S/W int -
SW_INT14 B PHANTOM ;PM 1C User S/W int -
SW_INT15 B PHANTOM ;PM 1E User S/W int -
SW_INT16 B PHANTOM ;PM 20 User S/W int -
TRAP B PHANTOM ;PM 22 Trap vector -
NMI B PHANTOM ;PM 24 Non maskable Int3
EMU_TRAP B PHANTOM ;PM 26 Emulator Trap2 -
SW_INT20 B PHANTOM ;PM 28 User S/W int -
SW_INT21 B PHANTOM ;PM 2A User S/W int -
SW_INT22 B PHANTOM ;PM 2C User S/W int -
SW_INT23 B PHANTOM ;PM 2E User S/W int -
SW_INT24 B PHANTOM ;PM 30 User S/W int -
SW_INT25 B PHANTOM ;PM 32 User S/W int -
SW_INT26 B PHANTOM ;PM 34 User S/W int -
SW_INT27 B PHANTOM ;PM 36 User S/W int -
SW_INT28 B PHANTOM ;PM 38 User S/W int -
SW_INT29 B PHANTOM ;PM 3A User S/W int -
SW_INT30 B PHANTOM ;PM 3C User S/W int -
SW_INT31 B PHANTOM ;PM 3E User S/W int - ·
;中断子向量入口定义pvecs
.sect ".pvecs" ;定义子向量段
PVECTORS B PHANTOM ;保留向量地址偏移量-00H
B PHANTOM ;保留向量地址偏移量-01H
B PHANTOM ;保留向量地址偏移量-02H
B PHANTOM ;保留向量地址偏移量-03H
B PHANTOM ;保留向量地址偏移量-04H
B PHANTOM ;保留向量地址偏移量-05H
B SCI_RX_ISR ;保留向量地址偏移量-06H SCI接收中断
B PHANTOM ;保留向量地址偏移量-07H
B PHANTOM ;Reserved pvector addr offset-08H
B PHANTOM ;Reserved pvector addr offset-09H
B PHANTOM ;Reserved pvector addr offset-0AH
B PHANTOM ;Reserved pvector addr offset-0BH
B PHANTOM ;Reserved pvector addr offset-0CH
B PHANTOM ;Reserved pvector addr offset-0DH
B PHANTOM ;Reserved pvector addr offset-0EH
B PHANTOM ;Reserved pvector addr offset-0FH
B PHANTOM ;Reserved pvector addr offset-10H
B PHANTOM ;Reserved pvector addr offset-11H
B PHANTOM ;Reserved pvector addr offset-12H
B PHANTOM ;Reserved pvector addr offset-13H
B PHANTOM ;Reserved pvector addr offset-14H
B PHANTOM ;Reserved pvector addr offset-15H
B PHANTOM ;Reserved pvector addr offset-16H
B PHANTOM ;Reserved pvector addr offset-17H
B PHANTOM ;Reserved pvector addr offset-18H
B PHANTOM ;Reserved pvector addr offset-19H
B PHANTOM ;Reserved pvector addr offset-1AH
B PHANTOM ;Reserved pvector addr offset-1BH
B PHANTOM ;Reserved pvector addr offset-1CH
B PHANTOM ;Reserved pvector addr offset-1DH
B PHANTOM ;Reserved pvector addr offset-1EH
B PHANTOM ;Reserved pvector addr offset-1FH
B PHANTOM ;Reserved pvector addr offset-20H
B PHANTOM ;Reserved pvector addr offset-21H
B PHANTOM ;Reserved pvector addr offset-22H
B PHANTOM ;Reserved pvector addr offset-23H
B PHANTOM ;Reserved pvector addr offset-24H
B PHANTOM ;Reserved pvector addr offset-25H
B PHANTOM ;Reserved pvector addr offset-26H
B PHANTOM ;Reserved pvector addr offset-27H
B PHANTOM ;Reserved pvector addr offset-28H
B PHANTOM ;Reserved pvector addr offset-29H
B PHANTOM ;Reserved pvector addr offset-2AH
B PHANTOM ;Reserved pvector addr offset-2BH
B PHANTOM ;Reserved pvector addr offset-2CH
B PHANTOM ;Reserved pvector addr offset-2DH
B PHANTOM ;Reserved pvector addr offset-2EH
B PHANTOM ;Reserved pvector addr offset-2FH
B PHANTOM ;Reserved pvector addr offset-30H
B PHANTOM ;Reserved pvector addr offset-31H
B PHANTOM ;Reserved pvector addr offset-32H
B PHANTOM ;Reserved pvector addr offset-33H
B PHANTOM ;Reserved pvector addr offset-34H
B PHANTOM ;Reserved pvector addr offset-35H
B PHANTOM ;Reserved pvector addr offset-36H
B PHANTOM ;Reserved pvector addr offset-37H
B PHANTOM ;Reserved pvector addr offset-38H
B PHANTOM ;Reserved pvector addr offset-39H
B PHANTOM ;Reserved pvector addr offset-3AH
B PHANTOM ;Reserved pvector addr offset-3BH
B PHANTOM ;Reserved pvector addr offset-3CH
B PHANTOM ;Reserved pvector addr offset-3DH
B PHANTOM ;Reserved pvector addr offset-3EH
B PHANTOM ;Reserved pvector addr offset-3FH
B PHANTOM ;Reserved pvector addr offset-40H
B PHANTOM ;保留向量地址偏移量-41H
;(2)主程序:
.text
_c_int0
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #81FEH,SCSR1 ;CLKIN=6M,CLKOUT=24M
SPLK #0E8h,WDCR ;关看门狗
CALL SCI_INIT ;调串口初始化程序
LDP #5H
SPLK #00H,SCI_FLAG ;清发送软件标志位
TXD_LOOP:
LDP #5H
BIT SCI_FLAG,BIT0
BCND TXD_DATA,TC ;SCI_FLAG.0=1则发送数据
B WAIT
TXD_DATA: ;发送N个数据程序
MAR *,AR0
LAR AR0,#TXD_PTR
ADRK #6+1 ;发送N个数据
MAR *,AR4
LACC *+ ;读数据
CMPR 00
BCND TXD_DATA_END,TC;判数据发送完?
MAR *,AR2
SACL *,AR4 ;数据送SCITXBUF寄存器
XMIT_RDY:
LDP #DP_PF1
BIT SCICTL2,BIT7
BCND XMIT_RDY,NTC ;判发送器是否空?
B TXD_DATA
TXD_DATA_END:
MAR *, AR4
LAR AR4,#TXD_PTR ;恢复发送的数据指针
LDP #5H
SPLK #00H,SCI_FLAG ;清发送软件标志位
WAIT: NOP
B TXD_LOOP
;(3)串行通信初始化程序:
SCI_INIT:
LDP #0E1H
LACL MCRA
OR #03H
SACL MCRA ;配置串行口引脚为特殊功能:TXD、RXD
LDP #DP_PF1
SPLK #000FH,SCICCR ;地址位唤醒模式,8位数据,1位停止位,无奇偶校验
SPLK #0007H,SCICTL1 ;接收、发送、内部时钟使能 ,SLEEP=1
SPLK #0002H,SCICTL2 ;接收中断使能
SPLK #0001H,SCIHBAUD
SPLK #0038H,SCILBAUD ;波特率为9600
SPLK #0027H,SCICTL1 ;串口初始化完成
LAR AR1,#SCIRXBUF ;接收缓冲寄存器地址
LAR AR2,#SCITXBUF ;发送缓冲寄存器地址
LAR AR3,#RXD_PTR ;接收的数据指针
LAR AR4,#TXD_PTR ;发送的数据指针
LDP #0
SPLK #0001h,IMR ;允许INT1中断
SPLK #0FFFFh,IFR ;清所有中断标志
CLRC INTM ;开总中断
RET
;(4)中断程序
GISR1: ;优先级INT1中断人口
;保护现场
LDP #0 ;保存机器上下文
SST #0,st0_temp ;使用自动寻址,DP-0
SST #1,st1_temp ;保存状态寄存器到B2 DARAM.
LDP #0
SACL context ;保存ACC的低16位
SACH context+1 ;保存ACC的高16位
SAR AR1,context+2
SAR AR2,context+3
SAR AR3,context+4
SAR AR4,context+5
SAR AR5,context+6
LDP #0E0H
LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外设中断人口地址
BACC ;跳到相应的中断服务子程序
SCI_RX_ISR: ;接收中断服务程序
LDP #DP_PF1
MAR *,AR1
BIT SCICTL1,BIT2
BCND RXD_DATA,NTC ;SLEEP=0,接收数据
LACC * ;读入地址
SUB #0AAH
BCND TXD_FLAG,EQ ;接收到的地址为AAH,则发送数据
SUB #0001H
BCND SCI_RX_END,NEQ ;地址错误,退出中断
SPLK #0033H,SCICTL1 ;地址为ABH,则清SLEEP=0表示准备接收数据
B SCI_RX_END
TXD_FLAG: ;置发送标志
LDP #5H
SPLK #01H,SCI_FLAG
B SCI_RX_END
RXD_DATA: ;接收N个数据
LACC *,AR3 ;读入数据
SACL *+,AR0 ;保存数据
LAR AR0,#RXD_PTR
ADRK #6
MAR *,AR3
CMPR 00
BCND SCI_RX_END,NTC ;判是否接收完
LAR AR3,#RXD_PTR ;恢复接收的数据指针
SPLK #0037H,SCICTL1 ;置SLEEP=1表示准备接收地址
SCI_RX_END: ;中断返回
;恢复现场
LDP #DP_EVA
SPLK #0FFFFH,EVAIFRA
LDP #0
LAR AR5,context+6
LAR AR4,context+5
LAR AR3,context+4
LAR AR2,context+3
LAR AR1,context+2
LACC context+1,16
ADDS context
LST #1, st1_temp
LST #0, st0_temp
CLRC INTM ;开总中断,因为一进中断就自动关闭总中断
RET
;(5)假中断程序
PHANTOM
KICK_DOG ;复位看门狗
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -