⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can162.lst

📁 Atmel mcu can interface design example
💻 LST
📖 第 1 页 / 共 4 页
字号:
    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 + -