📄 main.asm
字号:
.title "main.asm"
.include "F2407REGS.H"
.include "REGS_USER.H"
.global _c_int0
.global GISR1
.global GISR2
.global GISR3
.global GISR4
.global XINT1_ISR
.global XINT2_ISR
.global T3P_ISR
.global T4P_ISR
.global PHANTOM
.ref PVECTORS
;**********************Code Section************************
.text
;**********************主程序******************************
_c_int0:
CALL INIT_SYS ;系统初始化
CALL INIT_16C550 ;SC16C550初始化
CLRC INTM ;开中断
LDP #DP_550
SPLK #0003H,LCR_550
TEST:
; LDP #010H
; SPLK #0078H,TXD_REG
; CALL TRAN
NOP
NOP
NOP
B TEST
;*******************SC16C550初始化程序*************************
INIT_16C550:
LDP #DP_PF2 ;复位SC16C550,将MR置为1,复位有效(DSP通用IO口IOPF0)
LACL PFDATDIR
OR #0001H
SACL PFDATDIR
DELAY_S 0FFH ;延时
LDP #0E1H
LACL PFDATDIR ;将MR置为0,复位无效(DSP通用IOPF0)
AND #0FFFEH
SACL PFDATDIR
DELAY_S 0FFH ;延时
LDP #DP_550 ;翻页至400页
SPLK #0080H,LCR_550 ;设置分频系数为1
SPLK #0001H,DLL_550
SPLK #0000H,DLM_550
SPLK #0003H,LCR_550 ;设置字长为8位,停止位1位,无奇偶位
SPLK #0000H,FCR_550 ;复位FIFO,使能接收/发送FIFO,设置接收出发点为1
SPLK #0000H,MCR_550 ;禁止软件流控制
SPLK #0005H,IER_550 ;是能接收中断,禁止发送中断
RET
;*******************RS485单字节发送程序*************************
TRAN:
LDP #DP_PF2 ;将MAX485置为发送状态,DE有效(IOPE2=1)
LACL PEDATDIR
OR #0004H
SACL PEDATDIR
LDP #DP_550 ;翻页至400页
CHK_B5: BIT LSR_550,BIT5 ;测试SC16C550线状态寄存器值第5位LSR[5]
BCND CHK_B5,NTC ;若LSR[5]为1,则发送数据,否则等待
LDP #010H
LACL TXD_REG ;将待发送数据读入ACC
LDP #DP_550
SACL THR_550 ;将待发送数据写入SC16C550的发送保存寄存器
;LDP #DP_PF2 ;将MAX485还原为接收状态,RE有效(IOPE2=0)
;LACL PEDATDIR
;AND #0FFFBH
;SACL PEDATDIR
RET
;***********************程序结束*******************************
LACL P8DATA ;读并口数据
LDP #DP_USER2
SACL *+
B GISR1_RET ;中断返回
;*******************CPU中断1返回程序***********************
GISR1_RET:
;恢复现场
;恢复ACC
;恢复辅助寄存器
LDP #10H ;恢复ST0和ST1
LAR AR0,#ST0_TEMP
LAR AR1,#ST1_TEMP
MAR *,AR0
LST #0,*,AR1
LST #1,*
CLRC INTM ;开总中断
RET
;*******************CPU中断2服务程序******************
GISR2:
;保护现场
;保护ACC
;保护辅助寄存器
;保护MUX位置
T3P_ISR:
GISR2_RET:
;恢复现场
CLRC INTM ;开总中断
RET
;*******************CPU中断3服务程序******************
GISR3:
;保护现场
GISR3_RET:
;恢复现场
CLRC INTM ;开总中断
RET
;*******************CPU中断4服务程序******************
GISR4:
;保护现场
;保护ACC
;保护辅助寄存器
;保护MUX位置
T4P_ISR:
GISR4_RET:
;恢复现场
CLRC INTM ;开总中断
RET
;*******************假中断服务程序*************************
PHANTOM:
;KICK_DOG
NOP
RET
;******************系统初始化函数*************************
INIT_SYS:
;CPU初始化
SETC INTM ;禁止中断
CLRC SXM ;符号扩展位不使能
CLRC OVM ;累加器中结果正常溢出
CLRC CNF ;CNF=0,可配置的双口RAM区被映射到数据存储空间
;中断配置
LDP #0H
SPLK #0001h,IMR ;INT1中断允许
SPLK #0FFFFh,IFR ;清除所有的中断标志
;系统配置
LDP #0E0h
SPLK #8300h,SCSR1 ;CLIKN=15M, CLKOUT=30M
;LACL SCSR2
;OR #0020H ;DON=1,将0800H-0FFFFH配置为内部SRAM
;SACL SCSR2
;SPLK #01FFH,WSRG
;看门狗配置
SPLK #0E8h,WDCR ;不使能看门狗
;收发控制配置
LDP #DP_PF2 ;设置IOPE2和IOPF0为IO功能
LACL MCRC
AND #0FEFBH
SACL MCRC
LACL PEDATDIR ;设置IOPE2为输出方式
OR #0400H
SACL PEDATDIR
LACL PFDATDIR ;设置IOPF0为输出方式
OR #0100H
SACL PFDATDIR
LACL PEDATDIR ;设置485为接收状态
AND #0FFFBH
SACL PEDATDIR
;外部引脚中断
LDP #DP_PF2 ;设置IOPA2为XINT1功能
LACL MCRA
OR #0004H
SACL MCRA
LDP #0E0h
SPLK #8005h,XINT1CR ;XINT1高优先级上升沿触发
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -