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

📄 main.asm

📁 TMS320C2407扩展16c550多串口程序
💻 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 + -