?? can.asm
字號:
st0_temp .usect ".b20",1 ;
st1_temp .usect ".b20",1 ;
context .usect ".b20",7 ;62-68
CAN_FLAG .usect ".data0",1 ;CAN 標志寄存器
DP_USER .set 5 ;DP指向280H-300H單元
.include "F2407REGS.H" ;引用頭部文件
.def _c_int0
;(1)建立中斷向量表
.sect ".vectors" ;定義主向量段
RSVECT B _c_int0 ;PM 0 復位向量 1
INT1 B PHANTOM ;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 GISR5 ;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 用戶定義軟件中斷 -
;中斷子向量入口定義pvecs
.sect ".pvecs" ;定義子向量段
PVECTORS B PHANTOM ;保留向量地址偏移量-00H
B PHANTOM ;保留向量地址偏移量-01H
B PHANTOM ;保留向量地址偏移量-02H
B PHANTOM ;保留向量地址偏移量-03H
B PHANTOM ;保留向量地址偏移量-04H
B PHANTOM ;保留向量地址偏移量-05H
B PHANTOM ;保留向量地址偏移量-06H
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 ;保留向量地址偏移量-3FH
B CANMBX_ISR ;保留向量地址偏移量-40H CAN接收中斷
B PHANTOM ;保留向量地址偏移量-41H
;(2)主程序
.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_CAN
SPLK #20h, 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標志位
LOOP1: LDP #DP_USER
BIT CAN_FLAG,BIT0 ;判是否接收到數據,如接收到則更新郵箱3
BCND LOOP1,NTC
SPLK #00H,CAN_FLAG ;清用戶接收標志
LDP #DP_CAN
SPLK #0000H,MDER ;郵箱不使能
SPLK #0140H,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
WAIT: NOP
B LOOP
;(3)系統初始化程序
SYSINIT:
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #81FEH,SCSR1
SPLK #0E8h,WDCR
LDP #0
SPLK #10h,IMR ;開中斷優先級5
SPLK #0FFFFh,IFR ;清中斷標志
RET
;(4)CAN初始化程序
CAN_INIT:
LDP #DP_PF2
LACL MCRB ;配置 CAN 引腳
OR #0C0H ;IOPC6,IOPC7 配置為特殊功能:CANRX,CANTX
SACL MCRB
;――――――――――――――― 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必須匹配
SPLK #1040H, MCR ;CCR=1 改變配置請求
W_CCE BIT GSR,#04h ;等待改變配置使能
BCND W_CCE,NTC ;當CCE=1 時即可配置 BCR2,BCR1 寄存器
SPLK #01H,BCR2 ;波特率預分頻寄存器
SPLK #0033H,BCR1 ;波特率設置為1M
LACL MCR
AND #0EFFFH
SACL MCR ;CCR=0 改變配置結束請求
W_NCCE BIT GSR,#04h ;等待改變配置不使能
BCND W_NCCE,TC ;只有當CEE=0時,BCR2,BCR1 寄存器配置成功
;―――――――――――――――寫 CAN 郵箱內容前寄存器設置―――――――――――――――
LDP #DP_CAN
SPLK #0040H,MDER ;不使能郵箱,郵箱2設為接收方式
SPLK #0143H,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 #0F7FFH,CAN_IMR ;中斷MBX3 不使能 ,MBX2使能, 低中斷優先級
SPLK #0FFFFH,CAN_IFR ;清全部中斷標志
SPLK #04c0H,MCR ;DBO=1,CDR=0,ABO=1,STM=0
SPLK #04CH,MDER ;ME2=ME3=1,MBX2接收, MBX3發送
RET
;(5)中斷程序
GISR5: ;優先級INT5中斷人口
;保護現場
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 ;跳到相應的中斷服務子程序
CANMBX_ISR: ;CAN接收中斷程序
LDP #DP_CAN
SPLK #0040h, RCR ;復位 RMP2 和 MIF2
LDP #DP_USER
SPLK #01H,CAN_FLAG ;置用戶接收標志
GISR5_RET: ;中斷返回
;恢復現場
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
;(6)假中斷程序
PHANTOM
KICK_DOG ;復位看門狗
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -