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

📄 can.asm

📁 DSP的汇编程序
💻 ASM
字号:
CAN_FLAG    .usect      ".data0",1              ;CAN 标志寄存器
ST0_TEMP    .usect      ".data0",1              
ST1_TEMP    .usect      ".data0",1              

DP_USER     .set        0                       ;DP_B2,DP指向000h~0080h单元
            .include    "F2407REGS.H"           ;引用头部文件
            .def        _c_int0                             
            .def        GISR5    
            
            .sect       ".vectors"              ;定义主向量段
            
RSVECT      B   _c_int0             ;PM 0   Reset Vector        1
INT1        B   PHANTOM             ;PM 2   Int level 1         4
INT2        B   PHANTOM             ;PM 4   Int level 2         5
INT3        B   PHANTOM             ;PM 6   Int level 3         6
INT4        B   PHANTOM             ;PM 8   Int level 4         7
INT5        B   GISR5               ;PM A   Int level 5         8
INT6        B   PHANTOM             ;PM C   Int level 6         9
RESERVED    B   PHANTOM             ;PM E   (Analysis Int)      10
SW_INT8     B   PHANTOM             ;PM 10  User S/W int        -
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 Int    3
EMU_TRAP    B   PHANTOM             ;PM 26  Emulator Trap       2
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        -

        .sect   ".pvecs"            ;定义子向量段
PVECTORS
        B       PHANTOM             ;Reserved pvector addr offset-0000h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-0005h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-000ah
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-0010h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-0015h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-001Ah
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-0020h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-0025h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;pvector addr offset 0x027h - T1PINT中断
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-002Ah
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;pvector addr offset 0x02f - T3PINT
        B       PHANTOM             ;Reserved pvector addr offset-0030h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-0035h
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-003aAh
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset
        B       PHANTOM             ;Reserved pvector addr offset-003Fh
        B       CANMBX_ISR          ;pvector addr offset 0x040h - CAN接收中断
        B       PHANTOM             ;Reserved pvector addr offset-0041h

        .text
_c_int0
        CALL    SYSINIT             ;系统初始化程序
        LDP     #DP_USER
        SPLK    #00H, CAN_FLAG      ;清CAN用户标志, CAN_FLAG=01
                                    ;表示接收到数据
        CALL    CAN_INIT            ;CAN初始化程序    
        
        CLRC    INTM                ;开总中断
LOOP:   LDP     #DP_USER
        BIT     CAN_FLAG, BIT0      ;判是否接收到数据, 如接收到则更新邮箱3
        BCND    LOOP1, NTC
        SPLK    #00H, CAN_FLAG      ;清用户接收标志
        LDP     #DP_CAN
        SPLK    #0000H, MDER        ;邮箱不使能
        SPLK    #0100H, MCR         ;CDR=1, 数据改变请求
        LDP     #DP_CAN2            ;DP → 7200h
        LACL    MBX2A               ;更新邮箱3
        SACL    MBX3A               ;把邮箱2的数据移入到邮箱3
        LACL    MBX2B
        SACL    MBX3B
        LACL    MBX2C
        SACL    MBX3C
        LACL    MBX2D
        SACL    MBX3D
        LDP     #DP_CAN
        SPLK    #0480H, MCR         ;DBO=1, CDR=0, ABO=1, STM=0
        SPLK    #04CH, MDER         ;ME2=ME3=1, MBX2接收,  MBX3发送
LOOP1:  LDP     #DP_CAN
        SPLK    #0020h, TCR         ;邮箱3发送请求
W_TA3:  LDP     #DP_USER
        BIT     CAN_FLAG, BIT0      ;判是否接收到新数据
        BCND    LOOP2, TC
        LDP     #DP_CAN
        BIT     TCR, 2
        BCND    W_TA3, NTC          ;等待发送应答
LOOP2:  LDP     #DP_CAN
        SPLK    #2000h, TCR         ;清 TA3 和MIF3标志位
WAIT:   NOP
        B       LOOP

SYSINIT: 
        SETC    INTM
        CLRC    SXM
        CLRC    OVM
        CLRC    CNF
        LDP     #0E0H
        SPLK    #81FEH, SCSR1       ;4倍频CLKIN=10 M, CLKOUT=40 M
        SPLK    #0E8h, WDCR
        LDP     #0
        SPLK    #10h, IMR           ;开中断优先级5
        SPLK    #0FFFFh, IFR        ;清中断标志
        RET

CAN_INIT: 
        LDP     #DP_PF2
        LACL    MCRB                ;配置 CAN 引脚
        OR      #0C0H               ;IOPC6, IOPC7 配置为特殊功能: CANRX, CANTX
        SACL    MCRB                                      
        NOP
        NOP
;~~~~~~~~~~~~~~ CAN 位定时器配置 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        LDP     #DP_CAN
        SPLK    #0040H, MDER        ;MD2=1, MBX2为发送方式
        SPLK    #0FFFFH, CAN_IFR    ;清全部CAN中断标志
        SPLK    #07FFFH, LAM1_H     ;设置邮箱2、3的屏蔽ID寄存器
        SPLK    #0FFFFH, LAM1_L     ;0则ID必须匹配
        NOP
        NOP
        
        SPLK    #1000H, MCR         ;CCR=1 改变配置请求 
W_CCE   BIT     GSR, BIT4           ;等待改变配置使能
        BCND    W_CCE, NTC          ;当CCE=1 时即可配置 BCR2、BCR1 寄存器
        
        SPLK    #03H, BCR2          ;波特率预分频寄存器, BRP = 3
        SPLK    #0065H, BCR1        ;波特率设置为500K (40M系统时钟)
        LACL    MCR
        AND     #0EFFFH
        SACL    MCR                 ;CCR=0 改变配置结束请求
W_NCCE  BIT     GSR, BIT4           ;等待改变配置不使能
        BCND    W_NCCE, TC          ;只有当CEE=0时, BCR2、BCR1
;寄存器配置成功
;~~~~~~~~~~~~~~~写 CAN 邮箱内容前寄存器设置~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        LDP     #DP_CAN
        SPLK    #0040H, MDER        ;不使能邮箱, 邮箱2设为接收方式
        SPLK    #0103H, MCR         ;CDR=1, 数据区改变请求
;~~~~~~~~~~~~~~~写 CAN 邮箱内容~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        LDP     #DP_CAN2
        SPLK    #2447H, MSGID2H     ;设置邮箱2的控制字及ID
                                    ;IDE=0,  AME=0,  AAM=0
                                    ;标准方式为MSGID2H[12~2]
        SPLK    #0FFFFH, MSGID2L
        SPLK    #08H, MSGCTRL2      ;设置控制域
                                    ;数据长度DCL = 8, RTR=0 数据帧
        SPLK    #00000H, MBX2A      ;邮箱2信息初始化
        SPLK    #00000H, MBX2B
        SPLK    #00000H, MBX2C
        SPLK    #00000H, MBX2D
        SPLK    #2447H, MSGID3H     ;设置邮箱3的标识符
        SPLK    #0FFFFH, MSGID3L
        SPLK    #08H, MSGCTRL3      ;RTR=0, DCL=8
        SPLK    #02211h, MBX3A      ;邮箱3信息初始化
        SPLK    #04433h, MBX3B
        SPLK    #06655h, MBX3C
        SPLK    #08877h, MBX3D
;~~~~~~~~~~~~~~~写 CAN 邮箱内容后寄存器设置~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        LDP     #DP_CAN
        SPLK    #0480H, MCR         ;DBO=1, ABO=1, STM=0
        SPLK    #04CH, MDER         ;ME3=1, MBX3 发送,  ME2=1 接收
        SPLK    #0F7FFH, CAN_IMR    ;中断MBX3不使能, MBX2使能, 
                                    ;中断优先级
        SPLK    #0FFFFH, CAN_IFR    ;清全部中断标志
        RET


GISR5:                              ;优先级INT5中断人口
        SST     #0, ST0_TEMP        ;保护现场
        LDP     #0E0H
        LACC    PIVR,1              ;读取外设中断向量寄存器(PIVR), 并左移一位
        ADD     #PVECTORS           ;加上外设中断人口地址
        BACC                        ;跳到相应的中断服务子程序
CANMBX_ISR:                         ;CAN接收中断程序
        LDP     #DP_CAN
        SPLK    #0040h,  RCR        ;复位 RMP2 和 MIF2
        LDP     #DP_USER
        SPLK    #01H, CAN_FLAG      ;置用户接收标志
GISR5_RET:                          ;中断返回
        LST     #0, ST0_TEMP        ;恢复现场
        CLRC    INTM                ;开总中断, 因为一进中断就自动关闭总中断
        RET

PHANTOM               
        ;SST  #0, ST0_TEMP
        ;KICK_DOG                   ;复位看门狗
        ;LST  #0, ST0_TEMP
        RET
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -