📄 can162.lst
字号:
014C 940E049A CALL pop_gset1
014E 9508 RET
_write_sja:
sja_address --> R20
val --> R18
addr --> R16
014F 940E0497 CALL push_gset1
(0021) }
(0022)
(0023) void write_sja(unsigned char addr,unsigned char val) //写SJA1000控制寄存器子程序
(0024) {
(0025) unsigned char *sja_address = (unsigned char *)startadd;
0151 E040 LDI R20,0
0152 E75F LDI R21,0x7F
(0026) sja_address = (unsigned char *)startadd;
(0027) sja_address = sja_address + addr;
0153 2E20 MOV R2,R16
0154 2433 CLR R3
0155 0D42 ADD R20,R2
0156 1D53 ADC R21,R3
(0028) *(sja_address) = val;
0157 01FA MOVW R30,R20
0158 8320 STD R18,0+Z
(0029) }
0159 940E049A CALL pop_gset1
015B 9508 RET
_SJATestInterface:
Err_Flag --> R20
Err_Cnt --> R22
testvalue --> R10
015C 940E04B2 CALL push_gset3
015E 2EA0 MOV R10,R16
(0030)
(0031) unsigned char SJATestInterface(unsigned char testvalue)
(0032) {
(0033) unsigned char Err_Cnt = 0x20;
015F E260 LDI R22,0x20
(0034) unsigned char Err_Flag = TRUE;
0160 E041 LDI R20,1
0161 C009 RJMP 0x016B
(0035) while(--Err_Cnt)
(0036) {
(0037) write_sja(TEST, testvalue); //TEST defined in can.h
0162 2D2A MOV R18,R10
0163 E009 LDI R16,0x9
0164 DFEA RCALL _write_sja
(0038) if(read_sja(TEST) == testvalue)
0165 E009 LDI R16,0x9
0166 DFDB RCALL _read_sja
0167 150A CP R16,R10
0168 F411 BNE 0x016B
(0039) {
(0040) Err_Flag = FALSE;
0169 2744 CLR R20
(0041) break;
016A C005 RJMP 0x0170
016B 2F86 MOV R24,R22
016C 5081 SUBI R24,1
016D 2F68 MOV R22,R24
016E 2388 TST R24
016F F791 BNE 0x0162
(0042) }
(0043) }
(0044) return Err_Flag;
0170 2F04 MOV R16,R20
0171 940E04C1 CALL pop_gset3
0173 9508 RET
_SJAEntryResetMode:
Err_Flag --> R20
Err_Cnt --> R22
0174 940E04AE CALL push_gset2
(0045) }
(0046)
(0047) unsigned char SJAEntryResetMode(void)
(0048) {
(0049) unsigned char Err_Cnt = 0x20;
0176 E260 LDI R22,0x20
(0050) unsigned char Err_Flag = TRUE;
0177 E041 LDI R20,1
0178 C00B RJMP 0x0184
(0051) while(--Err_Cnt)
(0052) {
(0053) write_sja(MODE, 0x09);
0179 E029 LDI R18,0x9
017A 2700 CLR R16
017B DFD3 RCALL _write_sja
(0054) if((read_sja(MODE) & 0x01) == 0x01)
017C 2700 CLR R16
017D DFC4 RCALL _read_sja
017E 2F80 MOV R24,R16
017F 7081 ANDI R24,1
0180 3081 CPI R24,1
0181 F411 BNE 0x0184
(0055) {
(0056) Err_Flag = FALSE;
0182 2744 CLR R20
(0057) break;
0183 C005 RJMP 0x0189
0184 2F86 MOV R24,R22
0185 5081 SUBI R24,1
0186 2F68 MOV R22,R24
0187 2388 TST R24
0188 F781 BNE 0x0179
(0058) }
(0059) }
(0060) return Err_Flag;
0189 2F04 MOV R16,R20
018A 940E04BE CALL pop_gset2
018C 9508 RET
_SJAQuitResetMode:
Err_Flag --> R20
Err_Cnt --> R22
018D 940E04AE CALL push_gset2
(0061) }
(0062)
(0063) unsigned char SJAQuitResetMode(void)
(0064) {
(0065) unsigned char Err_Cnt = 0x20;
018F E260 LDI R22,0x20
(0066) unsigned char Err_Flag = TRUE;
0190 E041 LDI R20,1
0191 C009 RJMP 0x019B
(0067) while(--Err_Cnt)
(0068) {
(0069) write_sja(MODE, 0x00);
0192 2722 CLR R18
0193 2700 CLR R16
0194 DFBA RCALL _write_sja
(0070) if(read_sja(MODE) == 0x00)
0195 2700 CLR R16
0196 DFAB RCALL _read_sja
0197 2300 TST R16
0198 F411 BNE 0x019B
(0071) {
(0072) Err_Flag = FALSE;
0199 2744 CLR R20
(0073) break;
019A C005 RJMP 0x01A0
019B 2F86 MOV R24,R22
019C 5081 SUBI R24,1
019D 2F68 MOV R22,R24
019E 2388 TST R24
019F F791 BNE 0x0192
(0074) }
(0075) }
(0076) return Err_Flag;
01A0 2F04 MOV R16,R20
01A1 940E04BE CALL pop_gset2
01A3 9508 RET
_SJATestRstMode:
SjaFlag --> R20
01A4 940E0497 CALL push_gset1
(0077) }
(0078)
(0079) unsigned char SJATestRstMode(void)
(0080) {
(0081) unsigned char SjaFlag;
(0082) if((read_sja(MODE) & 0x01) == 0x01)
01A6 2700 CLR R16
01A7 DF9A RCALL _read_sja
01A8 2F80 MOV R24,R16
01A9 7081 ANDI R24,1
01AA 3081 CPI R24,1
01AB F411 BNE 0x01AE
(0083) {
(0084) SjaFlag = FALSE;
01AC 2744 CLR R20
(0085) }
01AD C001 RJMP 0x01AF
(0086) else
(0087) SjaFlag = TRUE; //工作模式下返回TRUE
01AE E041 LDI R20,1
(0088) return SjaFlag;
01AF 2F04 MOV R16,R20
01B0 940E049A CALL pop_gset1
01B2 9508 RET
_SJASetOutControl:
Err_Flag --> R20
Err_Cnt --> R22
OutCtrl --> R10
01B3 940E04B2 CALL push_gset3
01B5 2EA0 MOV R10,R16
(0089) }
(0090)
(0091) unsigned char SJASetOutControl(unsigned char OutCtrl)
(0092) {
(0093) unsigned char Err_Cnt = 0x20;
01B6 E260 LDI R22,0x20
(0094) unsigned char Err_Flag = TRUE;
01B7 E041 LDI R20,1
(0095) if(SJATestRstMode())
01B8 DFEB RCALL _SJATestRstMode
01B9 2300 TST R16
01BA F051 BEQ 0x01C5
(0096) {
(0097) Err_Flag = TRUE;
(0098) }
01BB C00E RJMP 0x01CA
(0099) else
(0100) {
(0101) while(--Err_Cnt)
(0102) {
(0103) write_sja(OCR, OutCtrl);
01BC 2D2A MOV R18,R10
01BD E008 LDI R16,0x8
01BE DF90 RCALL _write_sja
(0104) if(read_sja(OCR) == OutCtrl)
01BF E008 LDI R16,0x8
01C0 DF81 RCALL _read_sja
01C1 150A CP R16,R10
01C2 F411 BNE 0x01C5
(0105) {
(0106) Err_Flag = FALSE;
01C3 2744 CLR R20
(0107) break;
01C4 C005 RJMP 0x01CA
01C5 2F86 MOV R24,R22
01C6 5081 SUBI R24,1
01C7 2F68 MOV R22,R24
01C8 2388 TST R24
01C9 F791 BNE 0x01BC
(0108) }
(0109) }
(0110) }
(0111) return Err_Flag;
01CA 2F04 MOV R16,R20
01CB 940E04C1 CALL pop_gset3
01CD 9508 RET
_SJASetAccCode:
Err_Flag --> R20
Err_Cnt --> R22
acr3 --> R10
acr2 --> R12
acr1 --> R14
acr0 --> Y+10
01CE 940E0464 CALL push_arg4
01D0 940E04BA CALL push_gset5
01D2 2EE2 MOV R14,R18
01D3 84CE LDD R12,14+Y
01D4 88A8 LDD R10,16+Y
(0112) }
(0113)
(0114)
(0115)
(0116) unsigned char SJASetAccCode(unsigned char acr0, unsigned char acr1, unsigned char acr2, unsigned char acr3)
(0117) {
(0118) unsigned char Err_Cnt = 0x20;
01D5 E260 LDI R22,0x20
(0119) unsigned char Err_Flag = TRUE;
01D6 E041 LDI R20,1
(0120) if(SJATestRstMode())
01D7 DFCC RCALL _SJATestRstMode
01D8 2300 TST R16
01D9 F139 BEQ 0x0201
(0121) {
(0122) Err_Flag = TRUE;
(0123) }
01DA C02B RJMP 0x0206
(0124) else
(0125) {
(0126) while(--Err_Cnt)
(0127) {
(0128) write_sja(ACR0, acr0);
01DB 852A LDD R18,10+Y
01DC E100 LDI R16,0x10
01DD DF71 RCALL _write_sja
(0129) if(read_sja(ACR0) != acr0)
01DE E100 LDI R16,0x10
01DF DF62 RCALL _read_sja
01E0 840A LDD R0,10+Y
01E1 1500 CP R16,R0
01E2 F009 BEQ 0x01E4
(0130) {
(0131) continue;
01E3 C01D RJMP 0x0201
(0132) }
(0133)
(0134) Err_Cnt = 0x20;
01E4 E260 LDI R22,0x20
(0135) write_sja(ACR1, acr1);
01E5 2D2E MOV R18,R14
01E6 E101 LDI R16,0x11
01E7 DF67 RCALL _write_sja
(0136) if(read_sja(ACR1) != acr1)
01E8 E101 LDI R16,0x11
01E9 DF58 RCALL _read_sja
01EA 150E CP R16,R14
01EB F009 BEQ 0x01ED
(0137) {
(0138) continue;
01EC C014 RJMP 0x0201
(0139) }
(0140)
(0141) Err_Cnt = 0x20;
01ED E260 LDI R22,0x20
(0142) write_sja(ACR2, acr2);
01EE 2D2C MOV R18,R12
01EF E102 LDI R16,0x12
01F0 DF5E RCALL _write_sja
(0143) if(read_sja(ACR2) != acr2)
01F1 E102 LDI R16,0x12
01F2 DF4F RCALL _read_sja
01F3 150C CP R16,R12
01F4 F009 BEQ 0x01F6
(0144) {
(0145) continue;
01F5 C00B RJMP 0x0201
(0146) }
(0147)
(0148) Err_Cnt = 0x20;
01F6 E260 LDI R22,0x20
(0149) write_sja(ACR3, acr3);
01F7 2D2A MOV R18,R10
01F8 E103 LDI R16,0x13
01F9 DF55 RCALL _write_sja
(0150) if(read_sja(ACR3) != acr3)
01FA E103 LDI R16,0x13
01FB DF46 RCALL _read_sja
01FC 150A CP R16,R10
01FD F009 BEQ 0x01FF
(0151) {
(0152) continue;
01FE C002 RJMP 0x0201
(0153) }
(0154)
(0155) Err_Flag = FALSE;
01FF 2744 CLR R20
(0156) break;
0200 C005 RJMP 0x0206
0201 2F86 MOV R24,R22
0202 5081 SUBI R24,1
0203 2F68 MOV R22,R24
0204 2388 TST R24
0205 F6A9 BNE 0x01DB
(0157) }
(0158) }
(0159) return Err_Flag;
0206 2F04 MOV R16,R20
0207 940E04C7 CALL pop_gset5
0209 9624 ADIW R28,4
020A 9508 RET
_SJASetClockDivision:
Err_Flag --> R20
Err_Cnt --> R22
clockdiv --> R10
020B 940E04B2 CALL push_gset3
020D 2EA0 MOV R10,R16
(0160) }
(0161)
(0162) unsigned char SJASetClockDivision(unsigned char clockdiv)
(0163) {
(0164) unsigned char Err_Cnt = 0x20;
020E E260 LDI R22,0x20
(0165) unsigned char Err_Flag = TRUE;
020F E041 LDI R20,1
(0166) if(SJATestRstMode())
0210 DF93 RCALL _SJATestRstMode
0211 2300 TST R16
0212 F051 BEQ 0x021D
(0167) {
(0168) Err_Flag = TRUE;
(0169) }
0213 C00E RJMP 0x0222
(0170) else
(0171) {
(0172) while(--Err_Cnt)
(0173) {
(0174) write_sja(CDR, clockdiv);
0214 2D2A MOV R18,R10
0215 E10F LDI R16,0x1F
0216 DF38 RCALL _write_sja
(0175) if(read_sja(CDR) == clockdiv)
0217 E10F LDI R16,0x1F
0218 DF29 RCALL _read_sja
0219 150A CP R16,R10
021A F411 BNE 0x021D
(0176) {
(0177) Err_Flag = FALSE;
021B 2744 CLR R20
(0178) break;
021C C005 RJMP 0x0222
021D 2F86 MOV R24,R22
021E 5081 SUBI R24,1
021F 2F68 MOV R22,R24
0220 2388 TST R24
0221 F791 BNE 0x0214
(0179) }
(0180) }
(0181) }
(0182) return Err_Flag;
0222 2F04 MOV R16,R20
0223 940E04C1 CALL pop_gset3
0225 9508 RET
_SJASetAccMask:
Err_Flag --> R20
Err_Cnt --> R22
amr3 --> R10
amr2 --> R12
amr1 --> R14
amr0 --> Y+10
0226 940E0464 CALL push_arg4
0228 940E04BA CALL push_gset5
022A 2EE2 MOV R14,R18
022B 84CE LDD R12,14+Y
022C 88A8 LDD R10,16+Y
(0183) }
(0184)
(0185) unsigned char SJASetAccMask(unsigned char amr0, unsigned char amr1, unsigned char amr2, unsigned char amr3)
(0186) {
(0187) unsigned char Err_Cnt = 0x20;
022D E260 LDI R22,0x20
(0188) unsigned char Err_Flag = TRUE;
022E E041 LDI R20,1
(0189) if(SJATestRstMode())
022F DF74 RCALL _SJATestRstMode
0230 2300 TST R16
0231 F139 BEQ 0x0259
(0190) {
(0191) Err_Flag = TRUE;
(0192) }
0232 C02B RJMP 0x025E
(0193) else
(0194) {
(0195) while(--Err_Cnt)
(0196) {
(0197) write_sja(AMR0, amr0);
0233 852A LDD R18,10+Y
0234 E104 LDI R16,0x14
0235 DF19 RCALL _write_sja
(0198) if(read_sja(AMR0) != amr0)
0236 E104 LDI R16,0x14
0237 DF0A RCALL _read_sja
0238 840A LDD R0,10+Y
0239 1500 CP R16,R0
023A F009 BEQ 0x023C
(0199) {
(0200) continue;
023B C01D RJMP 0x0259
(0201) }
(0202)
(0203) Err_Cnt = 0x20;
023C E260 LDI R22,0x20
(0204) write_sja(AMR1, amr1);
023D 2D2E MOV R18,R14
023E E105 LDI R16,0x15
023F DF0F RCALL _write_sja
(0205) if(read_sja(AMR1) != amr1)
0240 E105 LDI R16,0x15
0241 DF00 RCALL _read_sja
0242 150E CP R16,R14
0243 F009 BEQ 0x0245
(0206) {
(0207) continue;
0244 C014 RJMP 0x0259
(0208) }
(0209)
(0210) Err_Cnt = 0x20;
0245 E260 LDI R22,0x20
(0211) write_sja(AMR2, amr2);
0246 2D2C MOV R18,R12
0247 E106 LDI R16,0x16
0248 DF06 RCALL _write_sja
(0212) if(read_sja(AMR2) != amr2)
0249 E106 LDI R16,0x16
024A DEF7 RCALL _read_sja
024B 150C CP R16,R12
024C F009 BEQ 0x024E
(0213) {
(0214) continue;
024D C00B RJMP 0x0259
(0215) }
(0216)
(0217) Err_Cnt = 0x20;
024E E260 LDI R22,0x20
(0218) write_sja(AMR3, amr3);
024F 2D2A MOV R18,R10
0250 E107 LDI R16,0x17
0251 DEFD RCALL _write_sja
(0219) if(read_sja(AMR3) != amr3)
0252 E107 LDI R16,0x17
0253 DEEE RCALL _read_sja
0254 150A CP R16,R10
0255 F009 BEQ 0x0257
(0220) {
(0221) continue;
0256 C002 RJMP 0x0259
(0222) }
(0223)
(0224) Err_Flag = FALSE;
0257 2744 CLR R20
(0225) break;
0258 C005 RJMP 0x025E
0259 2F86 MOV R24,R22
025A 5081 SUBI R24,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -