📄 can_module.s
字号:
.module can_module.c
.area text(rom, con, rel)
.dbfile D:\candesignnow\can_module.c
.dbfunc e read_sja _read_sja fc
; sja_address -> R20,R21
; addr -> R16
.even
_read_sja::
xcall push_gset1
.dbline -1
.dbline 16
; #include "can.h"
; #include "macros.h"
; extern unsigned char TX_Buffer[13];
; extern unsigned char RX_Buffer[13];
; /*struct {
; uchar F_Fmt;
; uchar ID[4];
; uchar Data[8];
; }SJAFrameStruct, *P_SJAFrameStruct ;*/
;
; //SJAFrameStruct TX_Buffer;
; //unsigned char RX_Buffer[13];
; //unsigned char TX_Buffer[13];
;
; unsigned char read_sja(unsigned char addr) //读SJA1000状态寄存器子程序
; {
.dbline 17
; unsigned char *sja_address = (unsigned char *)startadd;
ldi R20,32512
ldi R21,127
.dbline 18
; sja_address = (unsigned char *)startadd;
.dbline 19
; sja_address = sja_address + addr;
mov R2,R16
clr R3
add R20,R2
adc R21,R3
.dbline 20
; return (*(sja_address));
movw R30,R20
ldd R16,z+0
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r sja_address 20 pc
.dbsym r addr 16 c
.dbend
.dbfunc e write_sja _write_sja fV
; sja_address -> R20,R21
; val -> R18
; addr -> R16
.even
_write_sja::
xcall push_gset1
.dbline -1
.dbline 24
; }
;
; void write_sja(unsigned char addr,unsigned char val) //写SJA1000控制寄存器子程序
; {
.dbline 25
; unsigned char *sja_address = (unsigned char *)startadd;
ldi R20,32512
ldi R21,127
.dbline 26
; sja_address = (unsigned char *)startadd;
.dbline 27
; sja_address = sja_address + addr;
mov R2,R16
clr R3
add R20,R2
adc R21,R3
.dbline 28
; *(sja_address) = val;
movw R30,R20
std z+0,R18
.dbline -2
.dbline 29
; }
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r sja_address 20 pc
.dbsym r val 18 c
.dbsym r addr 16 c
.dbend
.dbfunc e SJATestInterface _SJATestInterface fc
; Err_Flag -> R20
; Err_Cnt -> R22
; testvalue -> R10
.even
_SJATestInterface::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 32
;
; unsigned char SJATestInterface(unsigned char testvalue)
; {
.dbline 33
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 34
; unsigned char Err_Flag = TRUE;
ldi R20,1
xjmp L5
L4:
.dbline 36
; while(--Err_Cnt)
; {
.dbline 37
; write_sja(TEST, testvalue); //TEST defined in can.h
mov R18,R10
ldi R16,9
xcall _write_sja
.dbline 38
; if(read_sja(TEST) == testvalue)
ldi R16,9
xcall _read_sja
cp R16,R10
brne L7
.dbline 39
; {
.dbline 40
; Err_Flag = FALSE;
clr R20
.dbline 41
; break;
xjmp L6
L7:
.dbline 43
L5:
.dbline 35
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L4
L6:
.dbline 44
; }
; }
; return Err_Flag;
mov R16,R20
.dbline -2
L3:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbsym r testvalue 10 c
.dbend
.dbfunc e SJAEntryResetMode _SJAEntryResetMode fc
; Err_Flag -> R20
; Err_Cnt -> R22
.even
_SJAEntryResetMode::
xcall push_gset2
.dbline -1
.dbline 48
; }
;
; unsigned char SJAEntryResetMode(void)
; {
.dbline 49
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 50
; unsigned char Err_Flag = TRUE;
ldi R20,1
xjmp L11
L10:
.dbline 52
; while(--Err_Cnt)
; {
.dbline 53
; write_sja(MODE, 0x09);
ldi R18,9
clr R16
xcall _write_sja
.dbline 54
; if((read_sja(MODE) & 0x01) == 0x01)
clr R16
xcall _read_sja
mov R24,R16
andi R24,1
cpi R24,1
brne L13
.dbline 55
; {
.dbline 56
; Err_Flag = FALSE;
clr R20
.dbline 57
; break;
xjmp L12
L13:
.dbline 59
L11:
.dbline 51
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L10
L12:
.dbline 60
; }
; }
; return Err_Flag;
mov R16,R20
.dbline -2
L9:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbend
.dbfunc e SJAQuitResetMode _SJAQuitResetMode fc
; Err_Flag -> R20
; Err_Cnt -> R22
.even
_SJAQuitResetMode::
xcall push_gset2
.dbline -1
.dbline 64
; }
;
; unsigned char SJAQuitResetMode(void)
; {
.dbline 65
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 66
; unsigned char Err_Flag = TRUE;
ldi R20,1
xjmp L17
L16:
.dbline 68
; while(--Err_Cnt)
; {
.dbline 69
; write_sja(MODE, 0x00);
clr R18
clr R16
xcall _write_sja
.dbline 70
; if(read_sja(MODE) == 0x00)
clr R16
xcall _read_sja
tst R16
brne L19
.dbline 71
; {
.dbline 72
; Err_Flag = FALSE;
clr R20
.dbline 73
; break;
xjmp L18
L19:
.dbline 75
L17:
.dbline 67
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L16
L18:
.dbline 76
; }
; }
; return Err_Flag;
mov R16,R20
.dbline -2
L15:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbend
.dbfunc e SJATestRstMode _SJATestRstMode fc
; SjaFlag -> R20
.even
_SJATestRstMode::
xcall push_gset1
.dbline -1
.dbline 80
; }
;
; unsigned char SJATestRstMode(void)
; {
.dbline 82
; unsigned char SjaFlag;
; if((read_sja(MODE) & 0x01) == 0x01)
clr R16
xcall _read_sja
mov R24,R16
andi R24,1
cpi R24,1
brne L22
.dbline 83
; {
.dbline 84
; SjaFlag = FALSE;
clr R20
.dbline 85
; }
xjmp L23
L22:
.dbline 87
; else
; SjaFlag = TRUE; //工作模式下返回TRUE
ldi R20,1
L23:
.dbline 88
; return SjaFlag;
mov R16,R20
.dbline -2
L21:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r SjaFlag 20 c
.dbend
.dbfunc e SJASetOutControl _SJASetOutControl fc
; Err_Flag -> R20
; Err_Cnt -> R22
; OutCtrl -> R10
.even
_SJASetOutControl::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 92
; }
;
; unsigned char SJASetOutControl(unsigned char OutCtrl)
; {
.dbline 93
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 94
; unsigned char Err_Flag = TRUE;
ldi R20,1
.dbline 95
; if(SJATestRstMode())
xcall _SJATestRstMode
tst R16
breq L28
.dbline 96
; {
.dbline 97
; Err_Flag = TRUE;
.dbline 98
; }
xjmp L26
X0:
.dbline 100
; else
; {
L27:
.dbline 102
; while(--Err_Cnt)
; {
.dbline 103
; write_sja(OCR, OutCtrl);
mov R18,R10
ldi R16,8
xcall _write_sja
.dbline 104
; if(read_sja(OCR) == OutCtrl)
ldi R16,8
xcall _read_sja
cp R16,R10
brne L30
.dbline 105
; {
.dbline 106
; Err_Flag = FALSE;
clr R20
.dbline 107
; break;
xjmp L29
L30:
.dbline 109
L28:
.dbline 101
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L27
L29:
.dbline 110
; }
; }
; }
L26:
.dbline 111
; return Err_Flag;
mov R16,R20
.dbline -2
L24:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbsym r OutCtrl 10 c
.dbend
.dbfunc e SJASetAccCode _SJASetAccCode fc
; Err_Flag -> R20
; Err_Cnt -> R22
; acr3 -> R10
; acr2 -> R12
; acr1 -> R14
; acr0 -> y+10
.even
_SJASetAccCode::
xcall push_arg4
xcall push_gset5
mov R14,R18
ldd R12,y+14
ldd R10,y+16
.dbline -1
.dbline 117
; }
;
;
;
; unsigned char SJASetAccCode(unsigned char acr0, unsigned char acr1, unsigned char acr2, unsigned char acr3)
; {
.dbline 118
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 119
; unsigned char Err_Flag = TRUE;
ldi R20,1
.dbline 120
; if(SJATestRstMode())
xcall _SJATestRstMode
tst R16
breq L36
.dbline 121
; {
.dbline 122
; Err_Flag = TRUE;
.dbline 123
; }
xjmp L34
X1:
.dbline 125
; else
; {
L35:
.dbline 127
; while(--Err_Cnt)
; {
.dbline 128
; write_sja(ACR0, acr0);
ldd R18,y+10
ldi R16,16
xcall _write_sja
.dbline 129
; if(read_sja(ACR0) != acr0)
ldi R16,16
xcall _read_sja
ldd R0,y+10
cp R16,R0
breq L38
.dbline 130
; {
.dbline 131
; continue;
xjmp L36
L38:
.dbline 134
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 135
; write_sja(ACR1, acr1);
mov R18,R14
ldi R16,17
xcall _write_sja
.dbline 136
; if(read_sja(ACR1) != acr1)
ldi R16,17
xcall _read_sja
cp R16,R14
breq L40
.dbline 137
; {
.dbline 138
; continue;
xjmp L36
L40:
.dbline 141
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 142
; write_sja(ACR2, acr2);
mov R18,R12
ldi R16,18
xcall _write_sja
.dbline 143
; if(read_sja(ACR2) != acr2)
ldi R16,18
xcall _read_sja
cp R16,R12
breq L42
.dbline 144
; {
.dbline 145
; continue;
xjmp L36
L42:
.dbline 148
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 149
; write_sja(ACR3, acr3);
mov R18,R10
ldi R16,19
xcall _write_sja
.dbline 150
; if(read_sja(ACR3) != acr3)
ldi R16,19
xcall _read_sja
cp R16,R10
breq L44
.dbline 151
; {
.dbline 152
; continue;
xjmp L36
L44:
.dbline 155
clr R20
.dbline 156
xjmp L37
L36:
.dbline 126
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L35
L37:
.dbline 158
; }
;
; Err_Flag = FALSE;
; break;
; }
; }
L34:
.dbline 159
; return Err_Flag;
mov R16,R20
.dbline -2
L32:
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbsym r acr3 10 c
.dbsym r acr2 12 c
.dbsym r acr1 14 c
.dbsym l acr0 10 c
.dbend
.dbfunc e SJASetClockDivision _SJASetClockDivision fc
; Err_Flag -> R20
; Err_Cnt -> R22
; clockdiv -> R10
.even
_SJASetClockDivision::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 163
; }
;
; unsigned char SJASetClockDivision(unsigned char clockdiv)
; {
.dbline 164
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 165
; unsigned char Err_Flag = TRUE;
ldi R20,1
.dbline 166
; if(SJATestRstMode())
xcall _SJATestRstMode
tst R16
breq L50
.dbline 167
; {
.dbline 168
; Err_Flag = TRUE;
.dbline 169
; }
xjmp L48
X2:
.dbline 171
; else
; {
L49:
.dbline 173
; while(--Err_Cnt)
; {
.dbline 174
; write_sja(CDR, clockdiv);
mov R18,R10
ldi R16,31
xcall _write_sja
.dbline 175
; if(read_sja(CDR) == clockdiv)
ldi R16,31
xcall _read_sja
cp R16,R10
brne L52
.dbline 176
; {
.dbline 177
; Err_Flag = FALSE;
clr R20
.dbline 178
; break;
xjmp L51
L52:
.dbline 180
L50:
.dbline 172
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L49
L51:
.dbline 181
; }
; }
; }
L48:
.dbline 182
; return Err_Flag;
mov R16,R20
.dbline -2
L46:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbsym r clockdiv 10 c
.dbend
.dbfunc e SJASetAccMask _SJASetAccMask fc
; Err_Flag -> R20
; Err_Cnt -> R22
; amr3 -> R10
; amr2 -> R12
; amr1 -> R14
; amr0 -> y+10
.even
_SJASetAccMask::
xcall push_arg4
xcall push_gset5
mov R14,R18
ldd R12,y+14
ldd R10,y+16
.dbline -1
.dbline 186
; }
;
; unsigned char SJASetAccMask(unsigned char amr0, unsigned char amr1, unsigned char amr2, unsigned char amr3)
; {
.dbline 187
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 188
; unsigned char Err_Flag = TRUE;
ldi R20,1
.dbline 189
; if(SJATestRstMode())
xcall _SJATestRstMode
tst R16
breq L58
.dbline 190
; {
.dbline 191
; Err_Flag = TRUE;
.dbline 192
; }
xjmp L56
X3:
.dbline 194
; else
; {
L57:
.dbline 196
; while(--Err_Cnt)
; {
.dbline 197
; write_sja(AMR0, amr0);
ldd R18,y+10
ldi R16,20
xcall _write_sja
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -