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

📄 can_module.s

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