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

📄 16mcan.lst

📁 can tongxunCAN128的底层驱动
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    00CC EFCF      LDI	R28,0xFF
    00CD E1D0      LDI	R29,0x10
    00CE BFCD      OUT	0x3D,R28
    00CF BFDE      OUT	0x3E,R29
    00D0 52C0      SUBI	R28,0x20
    00D1 40D0      SBCI	R29,0
    00D2 EA0A      LDI	R16,0xAA
    00D3 8308      STD	Y+0,R16
    00D4 2400      CLR	R0
    00D5 EFE2      LDI	R30,0xF2
    00D6 E0F1      LDI	R31,1
    00D7 E012      LDI	R17,2
    00D8 36E3      CPI	R30,0x63
    00D9 07F1      CPC	R31,R17
    00DA F011      BEQ	0x00DD
    00DB 9201      ST	R0,Z+
    00DC CFFB      RJMP	0x00D8
    00DD 8300      STD	Z+0,R16
    00DE EAE6      LDI	R30,0xA6
    00DF E0F0      LDI	R31,0
    00E0 E0A0      LDI	R26,0
    00E1 E0B1      LDI	R27,1
    00E2 E011      LDI	R17,1
    00E3 39E8      CPI	R30,0x98
    00E4 07F1      CPC	R31,R17
    00E5 F021      BEQ	0x00EA
    00E6 95C8      LPM
    00E7 9631      ADIW	R30,1
    00E8 920D      ST	R0,X+
    00E9 CFF9      RJMP	0x00E3
    00EA 940E00ED  CALL	_main
_exit:
    00EC CFFF      RJMP	_exit
_main:
  i                    --> R20
  j                    --> R22
    00ED 972C      SBIW	R28,0xC
FILE: F:\测量模块\16MCan\main.c
(0001) #include "main.h"
(0002) 
(0003) VCI_CAN_OBJ msg_test;
(0004) 
(0005) void main(void)
(0006) {
(0007)  Uchar i,j;
(0008)   can_init ();
    00EE 940E0121  CALL	_can_init
(0009)   SEI();
    00F0 9478      BSET	7
(0010)    for(i=0;i<10;i++)
    00F1 2744      CLR	R20
    00F2 C027      RJMP	0x011A
(0011)   {
(0012)     msg_test.ID = i;
    00F3 2E24      MOV	R2,R20
    00F4 2433      CLR	R3
    00F5 2444      CLR	R4
    00F6 2455      CLR	R5
    00F7 923001F3  STS	msg_test+1,R3
    00F9 922001F2  STS	msg_test,R2
    00FB 925001F5  STS	msg_test+3,R5
    00FD 924001F4  STS	msg_test+2,R4
(0013)     for(j=0;j<8;j++)
    00FF 2766      CLR	R22
    0100 C008      RJMP	0x0109
(0014) 	{
(0015) 	  msg_test.Data[j] = j;
    0101 EF86      LDI	R24,0xF6
    0102 E091      LDI	R25,1
    0103 2FE6      MOV	R30,R22
    0104 27FF      CLR	R31
    0105 0FE8      ADD	R30,R24
    0106 1FF9      ADC	R31,R25
    0107 8360      STD	Z+0,R22
    0108 9563      INC	R22
    0109 3068      CPI	R22,0x8
    010A F3B0      BCS	0x0101
(0016) 	}
(0017)     can_tx_buff(msg_test);
    010B EF82      LDI	R24,0xF2
    010C E091      LDI	R25,1
    010D 01FE      MOVW	R30,R28
    010E E00C      LDI	R16,0xC
    010F E010      LDI	R17,0
    0110 93FA      ST	R31,-Y
    0111 93EA      ST	R30,-Y
    0112 939A      ST	R25,-Y
    0113 938A      ST	R24,-Y
    0114 940E052F  CALL	asgnblk
    0116 018E      MOVW	R16,R28
    0117 940E02D2  CALL	_can_tx_buff
    0119 9543      INC	R20
    011A 304A      CPI	R20,0xA
    011B F2B8      BCS	0x00F3
    011C C001      RJMP	0x011E
(0018)   }
(0019)   while(1)
(0020)   {
(0021)     NOP();
    011D 0000      NOP
    011E CFFE      RJMP	0x011D
    011F 962C      ADIW	R28,0xC
    0120 9508      RET
FILE: F:\测量模块\16MCan\can.c
(0001) #include "main.h"
(0002) 
(0003) //#pragma interrupt_handler can_ReceiveData:19
(0004) 
(0005) /*******************************************************************
(0006) CAN initialization:
(0007) Mailbox 0: Receive  --> interrupt
(0008) Mailbox 1: Transmit --> polling
(0009) *******************************************************************/
(0010) #define TYP_RESET		5
(0011) #define TYP_BAUD		10
(0012) 
(0013) #define SELFID  2
(0014) 
(0015) extern unsigned char sysrst;
(0016) unsigned char canbaud;
(0017) 
(0018) const Uchar CanBaud[6][3]={{0x02,0x04,0x13},{0x06,0x04,0x13},{0x0E,0x04,0x13},{0x12,0x04,0x13},{0x1E,0x04,0x13},{0x26,0x04,0x13}};
(0019) 
(0020) 
(0021) 
(0022) unsigned long CANMOBID[15]={0x1300ff01,0x1300ff01,0x02000000|(SELFID<<8),0x02000000|(SELFID<<8),0x0100ff00,0x0100ff00,0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x0200ff00,0x12000001,0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x1300ff01};
(0023) unsigned long CANMOBMD[15]={0x1f00ffff,0x1f00ffff,0x0f00ff00,            0x0f00ff00,            0x0f00ff00,0x0f00ff00,0x0f00ff00,            0x0f00ff00,            0x0f00ff00,0x1f0000ff,0x0f00ff00,0x0f00ff00,0x0f00ff00,0x0f00ff00,0x1f00ffff};
(0024) unsigned char CANIDT[15][4]={0};
(0025) unsigned char CANIDM[15][4]={0};
(0026) Uchar counterTemp;
(0027) void can_init (void)
(0028) {
(0029)  canMob_init();
_can_init:
    0121 D001      RCALL	_canMob_init
    0122 9508      RET
_canMob_init:
  temp2                --> R10
  temp1                --> R22
  temp                 --> Y,+0
  j                    --> R22
  i                    --> R20
    0123 940E04D3  CALL	push_gset3
    0125 9724      SBIW	R28,4
(0030)  //IDRcbufInit();
(0031)  //RstIDused();
(0032) }
(0033) 
(0034) 
(0035) void canMob_init (void)
(0036) {
(0037)     unsigned char i,j;
(0038) 	unsigned long temp;
(0039) 	unsigned int temp1,temp2;
(0040) 	
(0041) 	
(0042) 	//DDRD=(1<<PD5)|(0<<PD6);   //TXCAN, RXCNA
(0043) 	DDRD|=0x20;
    0126 9A55      SBI	0x0A,5
(0044) 	DDRD&=0xBF;
    0127 B18A      IN	R24,0x0A
    0128 7B8F      ANDI	R24,0xBF
    0129 B98A      OUT	0x0A,R24
(0045) 	CANGCON |= (1<<SWRES);              //reset CAN interface
    012A 918000D8  LDS	R24,0xD8
    012C 6081      ORI	R24,1
    012D 938000D8  STS	0xD8,R24
(0046)     
(0047) 	
(0048) 	//CANMOBID[2]=(unsigned long)(SELFID<<8)|CANMOBID[2];
(0049) 	for(i=0;i<15;i++)
    012F 2744      CLR	R20
    0130 C043      RJMP	0x0174
(0050) 	{
(0051) 	 temp=CANMOBID[i]<<3;
    0131 E084      LDI	R24,4
    0132 9F84      MUL	R24,R20
    0133 01F0      MOVW	R30,R0
    0134 E080      LDI	R24,0
    0135 E091      LDI	R25,1
    0136 0FE8      ADD	R30,R24
    0137 1FF9      ADC	R31,R25
    0138 8100      LDD	R16,Z+0
    0139 8111      LDD	R17,Z+1
    013A 8122      LDD	R18,Z+2
    013B 8133      LDD	R19,Z+3
    013C E083      LDI	R24,3
    013D E090      LDI	R25,0
    013E 938A      ST	R24,-Y
    013F 940E0523  CALL	lsl32
    0141 8308      STD	Y+0,R16
    0142 8319      STD	Y+1,R17
    0143 832A      STD	Y+2,R18
    0144 833B      STD	Y+3,R19
(0052) 	 temp1=(unsigned int)temp;
    0145 8168      LDD	R22,Y+0
    0146 8179      LDD	R23,Y+1
(0053) 	 temp2=(unsigned int)(temp/0x00010000);
    0147 8028      LDD	R2,Y+0
    0148 8039      LDD	R3,Y+1
    0149 804A      LDD	R4,Y+2
    014A 805B      LDD	R5,Y+3
    014B 0152      MOVW	R10,R4
(0054) 	 CANIDT[i][3]=(Uchar)temp1;
    014C E084      LDI	R24,4
    014D 9F84      MUL	R24,R20
    014E 01F0      MOVW	R30,R0
    014F E78B      LDI	R24,0x7B
    0150 E091      LDI	R25,1
    0151 0FE8      ADD	R30,R24
    0152 1FF9      ADC	R31,R25
    0153 8360      STD	Z+0,R22
(0055) 	 CANIDT[i][2]=(Uchar)(temp1>>8);
    0154 E084      LDI	R24,4
    0155 9F84      MUL	R24,R20
    0156 01F0      MOVW	R30,R0
    0157 E78A      LDI	R24,0x7A
    0158 E091      LDI	R25,1
    0159 0FE8      ADD	R30,R24
    015A 1FF9      ADC	R31,R25
    015B 011B      MOVW	R2,R22
    015C 2C23      MOV	R2,R3
    015D 2433      CLR	R3
    015E 8220      STD	Z+0,R2
(0056) 	 CANIDT[i][1]=(Uchar)temp2;
    015F E084      LDI	R24,4
    0160 9F84      MUL	R24,R20
    0161 01F0      MOVW	R30,R0
    0162 E789      LDI	R24,0x79
    0163 E091      LDI	R25,1
    0164 0FE8      ADD	R30,R24
    0165 1FF9      ADC	R31,R25
    0166 82A0      STD	Z+0,R10
(0057) 	 CANIDT[i][0]=(Uchar)(temp2>>8); 
    0167 E084      LDI	R24,4
    0168 9F84      MUL	R24,R20
    0169 01F0      MOVW	R30,R0
    016A E788      LDI	R24,0x78
    016B E091      LDI	R25,1
    016C 0FE8      ADD	R30,R24
    016D 1FF9      ADC	R31,R25
    016E 0115      MOVW	R2,R10
    016F 2C23      MOV	R2,R3
    0170 2433      CLR	R3
    0171 8220      STD	Z+0,R2
(0058) 	 NOP();
    0172 0000      NOP
    0173 9543      INC	R20
    0174 304F      CPI	R20,0xF
    0175 F408      BCC	0x0177
    0176 CFBA      RJMP	0x0131
(0059) 	}
(0060) 	
(0061) 	for(i=0;i<15;i++)
    0177 2744      CLR	R20
    0178 C043      RJMP	0x01BC
(0062) 	{
(0063) 	 temp=CANMOBMD[i]<<3;
    0179 E084      LDI	R24,4
    017A 9F84      MUL	R24,R20
    017B 01F0      MOVW	R30,R0
    017C E38C      LDI	R24,0x3C
    017D E091      LDI	R25,1
    017E 0FE8      ADD	R30,R24
    017F 1FF9      ADC	R31,R25
    0180 8100      LDD	R16,Z+0
    0181 8111      LDD	R17,Z+1
    0182 8122      LDD	R18,Z+2
    0183 8133      LDD	R19,Z+3
    0184 E083      LDI	R24,3
    0185 E090      LDI	R25,0
    0186 938A      ST	R24,-Y
    0187 940E0523  CALL	lsl32
    0189 8308      STD	Y+0,R16
    018A 8319      STD	Y+1,R17
    018B 832A      STD	Y+2,R18
    018C 833B      STD	Y+3,R19
(0064) 	 temp1=(unsigned int)temp;
    018D 8168      LDD	R22,Y+0
    018E 8179      LDD	R23,Y+1
(0065) 	 temp2=(unsigned int)(temp/0x00010000);
    018F 8028      LDD	R2,Y+0
    0190 8039      LDD	R3,Y+1
    0191 804A      LDD	R4,Y+2
    0192 805B      LDD	R5,Y+3
    0193 0152      MOVW	R10,R4
(0066) 	 CANIDM[i][3]=(Uchar)temp1;
    0194 E084      LDI	R24,4
    0195 9F84      MUL	R24,R20
    0196 01F0      MOVW	R30,R0
    0197 EB87      LDI	R24,0xB7
    0198 E091      LDI	R25,1
    0199 0FE8      ADD	R30,R24
    019A 1FF9      ADC	R31,R25
    019B 8360      STD	Z+0,R22
(0067) 	 CANIDM[i][2]=(Uchar)(temp1>>8);
    019C E084      LDI	R24,4
    019D 9F84      MUL	R24,R20
    019E 01F0      MOVW	R30,R0
    019F EB86      LDI	R24,0xB6
    01A0 E091      LDI	R25,1
    01A1 0FE8      ADD	R30,R24
    01A2 1FF9      ADC	R31,R25
    01A3 011B      MOVW	R2,R22
    01A4 2C23      MOV	R2,R3
    01A5 2433      CLR	R3
    01A6 8220      STD	Z+0,R2
(0068) 	 CANIDM[i][1]=(Uchar)temp2;
    01A7 E084      LDI	R24,4
    01A8 9F84      MUL	R24,R20
    01A9 01F0      MOVW	R30,R0
    01AA EB85      LDI	R24,0xB5
    01AB E091      LDI	R25,1
    01AC 0FE8      ADD	R30,R24
    01AD 1FF9      ADC	R31,R25
    01AE 82A0      STD	Z+0,R10
(0069) 	 CANIDM[i][0]=(Uchar)(temp2>>8); 
    01AF E084      LDI	R24,4
    01B0 9F84      MUL	R24,R20
    01B1 01F0      MOVW	R30,R0
    01B2 EB84      LDI	R24,0xB4
    01B3 E091      LDI	R25,1
    01B4 0FE8      ADD	R30,R24
    01B5 1FF9      ADC	R31,R25
    01B6 0115      MOVW	R2,R10
    01B7 2C23      MOV	R2,R3
    01B8 2433      CLR	R3
    01B9 8220      STD	Z+0,R2
(0070) 	 NOP();
    01BA 0000      NOP
    01BB 9543      INC	R20
    01BC 304F      CPI	R20,0xF
    01BD F408      BCC	0x01BF
    01BE CFBA      RJMP	0x0179
(0071) 	}
(0072)     //reset all MObs
(0073)     for (i=0; i<15; i++)
    01BF 2744      CLR	R20
    01C0 C023      RJMP	0x01E4
(0074)     {
(0075)         CANPAGE = (i<<4);           //select MOb
    01C1 2F84      MOV	R24,R20
    01C2 708F      ANDI	R24,0xF
    01C3 9582      SWAP	R24
    01C4 938000ED  STS	0xED,R24
(0076)         CANCDMOB = 0;           	//disable MOb
    01C6 2422      CLR	R2
    01C7 922000EF  STS	0xEF,R2
(0077)         CANSTMOB = 0;               //clear status
    01C9 922000EE  STS	0xEE,R2
(0078)         CANIDT1 = 0;        		//clear ID
    01CB 922000F3  STS	0xF3,R2
(0079)         CANIDT2 = 0;
    01CD 922000F2  STS	0xF2,R2
(0080)         CANIDT3 = 0;
    01CF 922000F1  STS	0xF1,R2
(0081)         CANIDT4 = 0;
    01D1 922000F0  STS	0xF0,R2
(0082)         CANIDM1 = 0;            	//clear mask
    01D3 922000F7  STS	0xF7,R2
(0083)         CANIDM2 = 0;
    01D5 922000F6  STS	0xF6,R2
(0084)         CANIDM3 = 0;
    01D7 922000F5  STS	0xF5,R2
(0085)         CANIDM4 = 0;
    01D9 922000F4  STS	0xF4,R2
(0086)         for (j=0; j<8; j++)
    01DB 2766      CLR	R22
    01DC C004      RJMP	0x01E1
(0087)             CANMSG = 0;         //clear data
    01DD 2422      CLR	R2
    01DE 922000FA  STS	0xFA,R2
    01E0 9563      INC	R22
    01E1 3068      CPI	R22,0x8
    01E2 F3D0      BCS	0x01DD
    01E3 9543      INC	R20
    01E4 304F      CPI	R20,0xF
    01E5 F2D8      BCS	0x01C1
(0088)     }
(0089) 
(0090)     //bit timing -> datasheet page 260 (check table) 250Kbps
(0091)     //CANBT1 = 0x02;            //16Mhz,1Mbps
(0092)     //CANBT2 = 0x04;
(0093)     //CANBT3 = 0x13;
(0094)     
(0095) 	//canbaud= EEPROM_read(0x0020);
(0096) 	CANBT1 = CanBaud[2][0];         
    01E6 E9EA      LDI	R30,0x9A
    01E7 E0F0      LDI	R31,0
    01E8 91E4      LPM	R30,0(Z)
    01E9 93E000E2  STS	0xE2,R30
(0097)     CANBT2 = CanBaud[2][1];
    01EB E9EB      LDI	R30,0x9B
    01EC E0F0      LDI	R31,0
    01ED 91E4      LPM	R30,0(Z)
    01EE 93E000E3  STS	0xE3,R30
(0098)     CANBT3 = CanBaud[2][2];
    01F0 E9EC      LDI	R30,0x9C
    01F1 E0F0      LDI	R31,0
    01F2 91E4      LPM	R30,0(Z)
    01F3 93E000E4  STS	0xE4,R30
(0099) 	
(0100)     //configure MObi
(0101) 	/******************************************************************/
(0102)    for (i=0; i<15; i++)
    01F5 2744      CLR	R20
    01F6 C05A      RJMP	0x0251
(0103)    {
(0104) 	CANPAGE = (i<<4);                   //MOb number 0
    01F7 2F84      MOV	R24,R20
    01F8 708F      ANDI	R24,0xF
    01F9 9582      SWAP	R24
    01FA 938000ED  STS	0xED,R24
(0105)      CANIDT1 = CANIDT[i][0];        		//clear ID
    01FC E084      LDI	R24,4
    01FD 9F84      MUL	R24,R20
    01FE 01F0      MOVW	R30,R0
    01FF E788      LDI	R24,0x78
    0200 E091      LDI	R25,1
    0201 0FE8      ADD	R30,R24
    0202 1FF9      ADC	R31,R25
    0203 8020      LDD	R2,Z+0
    0204 922000F3  STS	0xF3,R2
(0106)      CANIDT2 = CANIDT[i][1];
    0206 E084      LDI	R24,4
    0207 9F84      MUL	R24,R20
    0208 01F0      MOVW	R30,R0
    0209 E789      LDI	R24,0x79
    020A E091      LDI	R25,1
    020B 0FE8      ADD	R30,R24
    020C 1FF9      ADC	R31,R25
    020D 8020      LDD	R2,Z+0
    020E 922000F2  STS	0xF2,R2
(0107)      CANIDT3 = CANIDT[i][2];
    0210 E084      LDI	R24,4
    0211 9F84      MUL	R24,R20
    0212 01F0      MOVW	R30,R0
    0213 E78A      LDI	R24,0x7A
    0214 E091      LDI	R25,1
    0215 0FE8      ADD	R30,R24
    0216 1FF9      ADC	R31,R25
    0217 8020      LDD	R2,Z+0
    0218 922000F1  STS	0xF1,R2
(0108)      CANIDT4 = CANIDT[i][3];
    021A E084      LDI	R24,4
    021B 9F84      MUL	R24,R20
    021C 01F0      MOVW	R30,R0
    021D E78B      LDI	R24,0x7B
    021E E091      LDI	R25,1
    021F 0FE8      ADD	R30,R24
    0220 1FF9      ADC	R31,R25
    0221 8020      LDD	R2,Z+0
    0222 922000F0  STS	0xF0,R2
(0109)      CANIDM1 = CANIDM[i][0];            	//clear mask
    0224 E084      LDI	R24,4
    0225 9F84      MUL	R24,R20
    0226 01F0      MOVW	R30,R0
    0227 EB84      LDI	R24,0xB4
    0228 E091      LDI	R25,1
    0229 0FE8      ADD	R30,R24
    022A 1FF9      ADC	R31,R25

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -