📄 can.asm
字号:
*******************************************************
* TMS320C24xx ANSI C Codegen Version 7.04
*******************************************************
; dspac -v2xx -iC:/CCStudio_v3.1/c2400/cgtools/include can.c C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\can.if
; dspopt NOT RUN
; dspcg -o -v2xx -o C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\can.if C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\can.asm C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\can.tmp
.port
.file "can.c"
.file "f2407_c.h"
.globl _portFF0F
.globl _portFFFF
.file "can.c"
.globl _port2040
.globl _test_can
.text
.sym _can_init,_can_init,32,2,0
.globl _can_init
.func 14
;>>>> void can_init(void)
******************************************************
* FUNCTION DEF : _can_init
******************************************************
_can_init:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+,AR3
.line 3
;>>>> *MCRB = *MCRB | 0x0c0; //IOPC6,7 as CANTX,CANRX
LARK AR3,28818
LACK 192
OR *
SACL *
.line 4
;>>>> *CAN_IFR=0xffff; //clear CAN int pending
ADRK 119
SPLK #65535,*
.line 5
;>>>> *LAM1_H=0x7fff; //mailbox 2,3 mask ID R
ADRK 4
SPLK #32767,*+
.line 6
;>>>> *LAM1_L=0xffff; //donot need to check the ID
SPLK #65535,*
.line 9
;>>>> *MCR=0x1040; /*set CCR=1,self test*/
SBRK 11
SPLK #4160,*
.line 10
;>>>> while(((*GSR)&0x0010) == 0) /*if CCE=0 then wait*/
ADRK 4
BIT * ,11
BBNZ L3
.line 11
;>>>> continue;
L1:
.line 10
LARK AR3,28935
MAR * ,AR3
BIT * ,11
BBZ L1
L3:
.line 12
;>>>> *BCR1=0x0023; /*TSEG1 = 4, TSEG2 = 3*/;
LACK 35
SBRK 2
SACL *-
.line 13
;>>>> *BCR2=0x0003; /*BRP = 3*/
LACK 3
SACL *-
.line 15
;>>>> *MCR=(*MCR)&0xefff; /*CCR=0*/
LACK 61439
AND *
SACL *
.line 16
;>>>> while(((*GSR)&0x0010) == 0x0010) /*if CCE=0 config success*/
LACK 16
ADRK 4
AND *
SUBK 16
BNZ L6
.line 17
;>>>> continue;
L4:
.line 16
LARK AR3,28935
LACK 16
MAR * ,AR3
AND *
SUBK 16
BZ L4
L6:
.line 21
;>>>> *MDER=0x40; /*disabled mailbox 0-5, config box2 as receive box, box3 as send box*/
LACK 64
SBRK 7
SACL *
.line 22
;>>>> *MCR=0x0143; /*CDR=1, self check mode, select mail box3*/
;>>>> //config mailbox2 control byte and ID
ADRK 3
SPLK #323,* ,AR4
.line 25
;>>>> *MSGID2H=0x05555;
LARK AR4,29201
SPLK #21845,*-
.line 26
;>>>> *MSGID2L=0x0aaaa;
SPLK #43690,*
.line 27
;>>>> *MSGCTRL2=0x0008; /*DCL = 8, RTR = 0 data frame*/
;>>>> //mailbox2 initilize
LACK 8
ADRK 2
SACL *
.line 29
;>>>> *MBX2A=0x0;
LACK 0
ADRK 2
SACL *+
.line 30
;>>>> *MBX2B=0x0;
SACL *+
.line 31
;>>>> *MBX2C=0x0;
SACL *+
.line 32
;>>>> *MBX2D=0x0;
;>>>> //config mailbox2 and 3 control byte and ID
SACL *
.line 35
;>>>> *MSGID3H=0x05555;
ADRK 2
SPLK #21845,*-
.line 36
;>>>> *MSGID3L=0x0aaaa;
SPLK #43690,*
.line 37
;>>>> *MSGCTRL3=0x0008; /*DCL = 8, RTR = 0 data frame*/
;>>>> //mailbox3 initilize
LACK 8
ADRK 2
SACL *
.line 39
;>>>> *MBX3A=0x01;
LACK 1
ADRK 2
SACL *+
.line 40
;>>>> *MBX3B=0x02;
LACK 2
SACL *+
.line 41
;>>>> *MBX3C=0x03;
LACK 3
SACL *+
.line 42
;>>>> *MBX3D=0x04;
LACK 4
SACL * ,AR3
.line 46
;>>>> *MCR=0x4c0; /*DBO = 1, ABO =1, STM = 1, self test mode*/
SPLK #1216,*
.line 47
;>>>> *MDER=0x4c; /*enable mailbox2,3, box2 as receivebox, box3 as sendbox*/
LACK 76
SBRK 3
SACL *
.line 48
;>>>> *CAN_IMR=0x0ffff; /*disable can int*/
ADRK 10
SPLK #65535,*-
.line 49
;>>>> *CAN_IFR=0x0ffff;
SPLK #65535,* ,AR1
EPI0_1:
.line 50
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 63,000000000H,1
.sym _test_can,_test_can,46,2,0
.globl _test_can
.func 66
;>>>> unsigned int test_can(void)
;>>>> unsigned int data_rec1,data_rec2,data_rec3,data_rec4;
******************************************************
* FUNCTION DEF : _test_can
******************************************************
_test_can:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,5
LAR AR0,*0+
.sym _data_rec1,1,14,1,16
.sym _data_rec2,2,14,1,16
.sym _data_rec3,3,14,1,16
.sym _data_rec4,4,14,1,16
.line 4
;>>>> can_init();
CALL _can_init
.line 6
;>>>> *TCR=0x20; /*mailbox3 request send*/
LARK AR3,28929
LACK 32
MAR * ,AR3
SACL *
.line 8
;>>>> while(((*TCR)&0x2000)==0)
BIT * ,2
BBNZ L9
.line 9
;>>>> continue; /*if TA3=0 then wait*/
L7:
.line 8
LARK AR3,28929
MAR * ,AR3
BIT * ,2
BBZ L7
L9:
.line 10
;>>>> *TCR=(*TCR)|0x2000; /*clear TA3 and MIF3*/
LACK 8192
OR *
SACL *+
.line 13
;>>>> while(((*RCR)&0x0040)==0)
BIT * ,9
BBNZ L12
.line 14
;>>>> continue; /*if RMP0=0 then wait*/
L10:
.line 13
LARK AR3,28930
MAR * ,AR3
BIT * ,9
BBZ L10
L12:
.line 15
;>>>> *RCR=(*RCR)|0x0040; /*RMP2=1*/
LACK 64
OR *
SACL * ,AR4
.line 17
;>>>> data_rec1=*MBX2A;
LARK AR4,29204
LAC *+,AR2
LARK AR2,1
MAR *0+
SACL *+,AR4
.line 18
;>>>> data_rec2=*MBX2B;
LAC *+,AR2
SACL *+,AR4
.line 19
;>>>> data_rec3=*MBX2C;
LAC *+,AR2
SACL *+,AR4
.line 20
;>>>> data_rec4=*MBX2D;
LAC * ,AR2
SACL *
.line 25
;>>>> if(data_rec1!=*MBX3A)return(0);
SBRK 3
LAC * ,AR4
ADRK 5
SUB *
BZ L13
LACK 0
B EPI0_2
L13:
.line 26
;>>>> if(data_rec2!=*MBX3B)return(0);
MAR *+,AR2
MAR *+
LAC * ,AR4
SUB *
BZ L14
LACK 0
B EPI0_2
L14:
.line 27
;>>>> if(data_rec3!=*MBX3C)return(0);
MAR *+,AR2
MAR *+
LAC * ,AR4
SUB *
BZ L15
LACK 0
B EPI0_2
L15:
.line 28
;>>>> if(data_rec4!=*MBX3D)return(0);
MAR *+,AR2
MAR *+
LAC * ,AR4
SUB *
BZ L16
LACK 0
B EPI0_2
L16:
.line 29
;>>>> return(1);
LACK 1
EPI0_2:
.line 30
MAR * ,AR1
SBRK 6
LAR AR0,*-
PSHD *
RET
.endfunc 95,000000000H,5
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -