📄 can_module.s
字号:
.dbline 198
; if(read_sja(AMR0) != amr0)
ldi R16,20
xcall _read_sja
ldd R0,y+10
cp R16,R0
breq L60
.dbline 199
; {
.dbline 200
; continue;
xjmp L58
L60:
.dbline 203
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 204
; write_sja(AMR1, amr1);
mov R18,R14
ldi R16,21
xcall _write_sja
.dbline 205
; if(read_sja(AMR1) != amr1)
ldi R16,21
xcall _read_sja
cp R16,R14
breq L62
.dbline 206
; {
.dbline 207
; continue;
xjmp L58
L62:
.dbline 210
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 211
; write_sja(AMR2, amr2);
mov R18,R12
ldi R16,22
xcall _write_sja
.dbline 212
; if(read_sja(AMR2) != amr2)
ldi R16,22
xcall _read_sja
cp R16,R12
breq L64
.dbline 213
; {
.dbline 214
; continue;
xjmp L58
L64:
.dbline 217
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 218
; write_sja(AMR3, amr3);
mov R18,R10
ldi R16,23
xcall _write_sja
.dbline 219
; if(read_sja(AMR3) != amr3)
ldi R16,23
xcall _read_sja
cp R16,R10
breq L66
.dbline 220
; {
.dbline 221
; continue;
xjmp L58
L66:
.dbline 224
clr R20
.dbline 225
xjmp L59
L58:
.dbline 195
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L57
L59:
.dbline 227
; }
;
; Err_Flag = FALSE;
; break;
; }
; }
L56:
.dbline 228
; return Err_Flag;
mov R16,R20
.dbline -2
L54:
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 amr3 10 c
.dbsym r amr2 12 c
.dbsym r amr1 14 c
.dbsym l amr0 10 c
.dbend
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
_SJA_BTR_CODETAB::
.blkb 2
.area idata
.byte 'S,47
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 135,255
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 'G,47
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 131,255
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 'C,47
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 3,28
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 129,250
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 1,28
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 128,250
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 0,28
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 128,182
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 0,22
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.blkb 2
.area idata
.byte 0,20
.area data(ram, con, rel)
.dbfile D:\candesignnow\can_module.c
.dbsym e SJA_BTR_CODETAB _SJA_BTR_CODETAB A[26:26]c
.area text(rom, con, rel)
.dbfile D:\candesignnow\can_module.c
.dbfunc e SJASetBaudRateStandard _SJASetBaudRateStandard fc
; Err_Flag -> R20
; Err_Cnt -> R22
; BaudRateSize -> R10
.even
_SJASetBaudRateStandard::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 249
; }
;
; //16MHZ
; unsigned char SJA_BTR_CODETAB[] = {
; 0x53, 0x2F, //20KBPS 0
; 0x87, 0xFF, //40KBPS 1
; 0x47, 0x2F, //50KBPS 2
; 0x83, 0xFF, //80KBPS 3
; 0x43, 0x2F, //100KBPS 4
; 0x03, 0x1C, //125KBPS 5
; 0x81, 0xFA, //200KBPS 6
; 0x01, 0x1C, //250KBPS 7
; 0x80, 0xFA, //400KBPS 8
; 0x00, 0x1C, //500KBPS 9
; 0x80, 0xB6, //666KBPS 10
; 0x00, 0x16, //800KBPS 11
; 0x00, 0x14 //1000KBPS 12
; };
;
; unsigned char SJASetBaudRateStandard(unsigned char BaudRateSize)
; {
.dbline 250
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 251
; unsigned char Err_Flag = TRUE;
ldi R20,1
.dbline 252
; if(BaudRateSize > 12)
ldi R24,12
cp R24,R10
brlo X5
xjmp L72
X5:
.dbline 253
; {
.dbline 254
; Err_Flag = TRUE;
.dbline 255
; }
xjmp L70
X4:
.dbline 257
; else
; {
L71:
.dbline 259
; while(--Err_Cnt)
; {
.dbline 260
; write_sja(BTR0, SJA_BTR_CODETAB[BaudRateSize*2]);
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_SJA_BTR_CODETAB
ldi R25,>_SJA_BTR_CODETAB
add R30,R24
adc R31,R25
ldd R18,z+0
ldi R16,6
xcall _write_sja
.dbline 261
; if(read_sja(BTR0) != SJA_BTR_CODETAB[BaudRateSize*2])
ldi R16,6
xcall _read_sja
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_SJA_BTR_CODETAB
ldi R25,>_SJA_BTR_CODETAB
add R30,R24
adc R31,R25
ldd R2,z+0
cp R16,R2
breq L74
.dbline 262
; {
.dbline 263
; continue;
xjmp L72
L74:
.dbline 266
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 267
; write_sja(BTR1, SJA_BTR_CODETAB[BaudRateSize*2 + 1]);
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_SJA_BTR_CODETAB+1
ldi R25,>_SJA_BTR_CODETAB+1
add R30,R24
adc R31,R25
ldd R18,z+0
ldi R16,7
xcall _write_sja
.dbline 268
; if(read_sja(BTR1) != SJA_BTR_CODETAB[BaudRateSize*2 + 1])
ldi R16,7
xcall _read_sja
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_SJA_BTR_CODETAB+1
ldi R25,>_SJA_BTR_CODETAB+1
add R30,R24
adc R31,R25
ldd R2,z+0
cp R16,R2
breq L77
.dbline 269
; {
.dbline 270
; continue;
xjmp L72
L77:
.dbline 272
clr R20
.dbline 273
xjmp L73
L72:
.dbline 258
mov R24,R22
subi R24,1
mov R22,R24
tst R24
breq X6
xjmp L71
X6:
L73:
.dbline 275
; }
; Err_Flag = FALSE;
; break;
; }
; }
L70:
.dbline 276
; return Err_Flag;
mov R16,R20
.dbline -2
L68:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbsym r BaudRateSize 10 c
.dbend
.dbfunc e SJASetOtherReg _SJASetOtherReg fc
; Err_Flag -> R20
; Err_Cnt -> R22
.even
_SJASetOtherReg::
xcall push_gset2
.dbline -1
.dbline 327
;
; }
;
; /*void SJAWriteDataToTxBuf(unsigned char Num, unsigned char Data)
; {
; switch(Num)
; {
; case 0:
; TX_Buffer[0] = Data;
; break;
; case 1:
; TX_Buffer[1] = Data;
; break;
; case 2:
; TX_Buffer[2] = Data;
; break;
; case 3:
; TX_Buffer[3] = Data;
; break;
; case 4:
; TX_Buffer[4] = Data;
; break;
; case 5:
; TX_Buffer[5] = Data;
; break;
; case 6:
; TX_Buffer[6] = Data;
; break;
; case 7:
; TX_Buffer[7] = Data;
; break;
; case 8:
; TX_Buffer[8] = Data;
; break;
; case 9:
; TX_Buffer[9] = Data;
; break;
; case 10:
; TX_Buffer[10] = Data;
; break;
; case 11:
; TX_Buffer[11] = Data;
; break;
; case 12:
; TX_Buffer[12] = Data;
; break;
; }
; }*/
;
; unsigned char SJASetOtherReg(void)
; {
.dbline 328
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 329
; unsigned char Err_Flag = TRUE;
ldi R20,1
.dbline 331
;
; if(SJATestRstMode())
xcall _SJATestRstMode
tst R16
breq L84
.dbline 332
; {
.dbline 333
; Err_Flag = TRUE;
.dbline 334
; }
xjmp L82
X7:
.dbline 336
; else
; {
L83:
.dbline 338
; while(--Err_Cnt)
; {
.dbline 339
; write_sja(RXERR,0x00);
clr R18
ldi R16,14
xcall _write_sja
.dbline 340
; if(read_sja(RXERR) != 0x00)
ldi R16,14
xcall _read_sja
tst R16
breq L86
.dbline 341
; {
.dbline 342
; continue;
xjmp L84
L86:
.dbline 345
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 346
; write_sja(TXERR,0x00);;
clr R18
ldi R16,15
xcall _write_sja
.dbline 346
.dbline 347
; if(read_sja(TXERR) != 0x00)
ldi R16,15
xcall _read_sja
tst R16
breq L88
.dbline 348
; {
.dbline 349
; continue;
xjmp L84
L88:
.dbline 352
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 353
; write_sja(ECC,0x00);
clr R18
ldi R16,12
xcall _write_sja
.dbline 354
; if(read_sja(ECC) != 0x00)
ldi R16,12
xcall _read_sja
tst R16
breq L90
.dbline 355
; {
.dbline 356
; continue;
xjmp L84
L90:
.dbline 359
; }
;
; Err_Cnt = 0x20;
ldi R22,32
.dbline 360
; write_sja(RBSA,0x00);;
clr R18
ldi R16,30
xcall _write_sja
.dbline 360
.dbline 361
; if(read_sja(RBSA) != 0x00)
ldi R16,30
xcall _read_sja
tst R16
breq L92
.dbline 362
; {
.dbline 363
; continue;
xjmp L84
L92:
.dbline 366
clr R20
.dbline 367
xjmp L85
L84:
.dbline 337
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L83
L85:
.dbline 369
; }
;
; Err_Flag = FALSE;
; break;
; }
; }
L82:
.dbline 370
; return Err_Flag;
mov R16,R20
.dbline -2
L80:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbend
.dbfunc e SJASetIER _SJASetIER fc
; Err_Flag -> R20
; Err_Cnt -> R22
; value -> R10
.even
_SJASetIER::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 374
; }
;
; unsigned char SJASetIER(unsigned char value)
; {
.dbline 375
; unsigned char Err_Cnt = 0x20;
ldi R22,32
.dbline 376
; unsigned char Err_Flag = TRUE;
ldi R20,1
xjmp L96
L95:
.dbline 385
;
; /*if(SJATestRstMode())
; {
; Err_Flag = TRUE;
; }
; else*/
; //{
; while(--Err_Cnt)
; {
.dbline 386
; write_sja(IER, value);
mov R18,R10
ldi R16,4
xcall _write_sja
.dbline 387
; if(read_sja(IER) == value)
ldi R16,4
xcall _read_sja
cp R16,R10
brne L98
.dbline 388
; {
.dbline 389
; Err_Flag = FALSE;
clr R20
.dbline 390
; break;
xjmp L97
L98:
.dbline 392
L96:
.dbline 384
mov R24,R22
subi R24,1
mov R22,R24
tst R24
brne L95
L97:
.dbline 394
; }
; }
; //}
; return Err_Flag;
mov R16,R20
.dbline -2
L94:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Err_Flag 20 c
.dbsym r Err_Cnt 22 c
.dbsym r value 10 c
.dbend
.dbfunc e Init_CAN _Init_CAN fV
; temp -> R22
; k -> R20,R21
.even
_Init_CAN::
xcall push_gset2
sbiw R28,3
.dbline -1
.dbline 403
; }
;
;
;
; /*************************************************
; SJA1000初始化子函数
; *************************************************/
; void Init_CAN(void)
; {
.dbline 406
; unsigned char temp;
; unsigned int k ;
; CLI();
cli
L101:
.dbline 408
; do
; {
.dbline 409
; temp = SJATestInterface(0x55);
ldi R16,85
xcall _SJATestInterface
mov R22,R16
.dbline 410
L102:
.dbline 410
; }while(temp);//检查硬件连线
tst R22
brne L101
.dbline 411
; WDR();
wdr
.dbline 412
clr R20
clr R21
xjmp L107
L104:
.dbline 412
L105:
.dbline 412
subi R20,255 ; offset = 1
sbci R21,255
L107:
.dbline 412
; for(k=0;k<6;k++); //延时约5us
cpi R20,6
ldi R30,0
cpc R21,R30
brlo L104
L108:
.dbline 414
; do
; {
.dbline 415
; temp = SJAEntryResetMode();
xcall _SJAEntryResetMode
mov R22,R16
.dbline 416
L109:
.dbline 416
; }while(temp);
tst R22
brne L108
.dbline 417
; WDR();
wdr
.dbline 418
; read_sja(IR);//clear IR
ldi R16,3
xcall _read_sja
.dbline 419
clr R20
clr R21
xjmp L114
L111:
.dbline 419
L112:
.dbline 419
subi R20,255 ; offset = 1
sbci R21,255
L114:
.dbline 419
; for(k=0;k<6;k++); //延时约5us
cpi R20,6
ldi R30,0
cpc R21,R30
brlo L111
.dbline 420
; WDR();
wdr
.dbline 421
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -