⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 TMS320F2407多个外部中断应用程序
💻 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
;*******************CPU中断1服务程序******************
GISR1:
        ;保护现场
        LDP     #DP_USER0
        SACL    ACC_TEMP      ;保护ACC
        ;保护辅助寄存器 
        LAR     AR0,#ST0_TEMP ;保护ST0和ST1
        LAR     AR1,#ST1_TEMP
        MAR     *,AR0
        SST     #0,*,AR1
        SST     #1,*
        
        LDP     #DP_PF1       ;计算中断子向量地址
        LACC    PIVR,1       
        ADD     #PVECTORS    
        BACC                  ;跳转至子中断服务程序
;*******************外部RS485中断服务程序******************
XINT1_ISR: 
        LDP     #DP_550       ;翻页至400页
        BIT     LSR_550,BIT0  ;测试SC16C550线状态寄存器值第0位LSR[0]
        BCND    GISR1_RET,NTC ;若LSR[0]为1,则读取接收数据,否则跳出
        LDP     #DP_550
        LACL    RHR_550       ;将接收数据读入ACC
        LDP     #010H
        SACL    RXD_REG       ;将接收数据放入接收保存寄存器
        LDP	    #0E0h
        SPLK	#8005h,XINT1CR;标志位清0
        B       GISR1_RET     ;中断返回
;*******************外部并口中断服务程序******************
XINT2_ISR:
        ;LDP     #DP_USER0
        ;BIT     ST_CODE,BIT4
        ;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;
        LDP     #DP_USER2
        LAR     AR3,#P8D_REG 
        MAR     *,AR3
        LDP     #01A0H
        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 + -