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

📄 can_module.s

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