?? can.lis
字號:
?
+
020C 80E0 ldi R24,<_CANIDM
020E 90E0 ldi R25,>_CANIDM
0210 E80F add R30,R24
0212 F91F adc R31,R25
0214 2080 ldd R2,z+0
0216 2092F700 sts 247,R2
021A .dbline 110
021A 84E0 ldi R24,4
021C 849F mul R24,R20
021E F001 movw R30,R0
0220 80E0 ldi R24,<_CANIDM+1
0222 90E0 ldi R25,>_CANIDM+1
0224 E80F add R30,R24
0226 F91F adc R31,R25
0228 2080 ldd R2,z+0
022A 2092F600 sts 246,R2
022E .dbline 111
022E 84E0 ldi R24,4
0230 849F mul R24,R20
0232 F001 movw R30,R0
0234 80E0 ldi R24,<_CANIDM+2
0236 90E0 ldi R25,>_CANIDM+2
0238 E80F add R30,R24
023A F91F adc R31,R25
023C 2080 ldd R2,z+0
023E 2092F500 sts 245,R2
0242 .dbline 112
0242 84E0 ldi R24,4
0244 849F mul R24,R20
0246 F001 movw R30,R0
0248 80E0 ldi R24,<_CANIDM+3
024A 90E0 ldi R25,>_CANIDM+3
024C E80F add R30,R24
024E F91F adc R31,R25
0250 2080 ldd R2,z+0
0252 2092F400 sts 244,R2
0256 .dbline 114
0256 80E9 ldi R24,144
0258 8093EF00 sts 239,R24
025C .dbline 115
025C 0000 nop
025E .dbline 116
025E L31:
025E .dbline 102
025E 4395 inc R20
0260 L33:
0260 .dbline 102
0260 4F30 cpi R20,15
0262 08F4 brsh X2
0264 A3CF xjmp L30
0266 X2:
0266 .dbline 119
0266 ; {
0266 ; CANPAGE = (i<<4); //MOb number 0
0266 ; CANIDT1 = CANIDT[i][0]; //clear ID
0266 ; CANIDT2 = CANIDT[i][1];
0266 ; CANIDT3 = CANIDT[i][2];
0266 ; CANIDT4 = CANIDT[i][3];
0266 ; CANIDM1 = CANIDM[i][0]; //clear mask
0266 ; CANIDM2 = CANIDM[i][1];
0266 ; CANIDM3 = CANIDM[i][2];
0266 ; CANIDM4 = CANIDM[i][3]; //0 = ignore bit
0266 ; //CANIDM4 = (1<<IDEMSK); //identifier extention mask
0266 ; CANCDMOB = (2<<CONMOB) | (1<<IDE); //reception, ext. ID,rev2.0B
0266 ; NOP();
0266 ; }
0266 ;
0266 ; //CANHPMOB = (2<<HPMOB);
0266 ; CANGCON = (1<<ENASTB); //start CAN interface, enable mode
0266 82E0 ldi R24,2
0268 8093D800 sts 216,R24
026C .dbline 124
026C ; /***********************************************************************/
026C ; //interrupts
026C ; //CANGIE = (1<<ENIT) | (1<<ENRX); //enable receive interrupt
026C ;
026C ; CANGIE = (1<<ENIT) | (1<<ENTX)| (1<<ENRX); //enable receive interrupt and transmitte interrupt
026C 80EB ldi R24,176
026E 8093DB00 sts 219,R24
0272 .dbline 126
0272 ; ///////////////////////////////////////////////////////////////////////
0272 ; CANIE1 = 0xff;
0272 8FEF ldi R24,255
0274 8093DF00 sts 223,R24
0278 .dbline 127
0278 ; CANIE2 = 0x7f; //enable ALL MObs interrupt
0278 8FE7 ldi R24,127
027A 8093DE00 sts 222,R24
027E .dbline 128
027E ; CANSIT1 = 0; //clear MOb status interrupt
027E 2224 clr R2
0280 2092E100 sts 225,R2
0284 .dbline 129
0284 ; CANSIT2 = 0;
0284 2092E000 sts 224,R2
0288 .dbline 132
0288 ;
0288 ; /////////////////////////// Enable Mob0 transmit/////////////////////
0288 ; CLI();
0288 F894 cli
028A .dbline 133
028A ; CANPAGE = (1<<4);
028A 80E1 ldi R24,16
028C 8093ED00 sts 237,R24
0290 .dbline 134
0290 ; CANCDMOB |= (1<<CONMOB0);
0290 8091EF00 lds R24,239
0294 8064 ori R24,64
0296 8093EF00 sts 239,R24
029A L40:
029A .dbline 137
029A L41:
029A .dbline 137
029A ; /////////////////////////////////////////////////////////////////////
029A ;
029A ; while (!(CANGSTA & (1<<ENFG))); //wait until module ready
029A 8091D900 lds R24,217
029E 8470 andi R24,4
02A0 E1F3 breq L40
02A2 .dbline 139
02A2 ;
02A2 ; CANGCON |= (1<<ENA); //enable CAN controller
02A2 8091D800 lds R24,216
02A6 8260 ori R24,2
02A8 8093D800 sts 216,R24
02AC .dbline -2
02AC L2:
02AC 2496 adiw R28,4
02AE 0E940000 xcall pop_gset3
02B2 .dbline 0 ; func end
02B2 0895 ret
02B4 .dbsym r temp2 10 i
02B4 .dbsym r temp1 22 i
02B4 .dbsym l temp 0 l
02B4 .dbsym r j 22 c
02B4 .dbsym r i 20 c
02B4 .dbend
02B4 .dbfunc e can_tx _can_tx fV
02B4 .dbstruct 0 12 _VCI_CAN_OBJ
02B4 .dbfield 0 ID L
02B4 .dbfield 4 Data A[8:8]c
02B4 .dbend
02B4 ; i -> R10
02B4 ; msg -> R12,R13
.even
02B4 _can_tx::
02B4 0E940000 xcall push_gset4
02B8 6801 movw R12,R16
02BA .dbline -1
02BA .dbline 146
02BA ; }
02BA ;
02BA ; /*******************************************************************
02BA ; CAN transmission via mailbox 1 (polling)
02BA ; *******************************************************************/
02BA ; void can_tx (VCI_CAN_OBJ msg)
02BA ; {
02BA .dbline 149
02BA ; unsigned char i;
02BA ; //enable MOb1, auto increment index, start with index = 0
02BA ; CANPAGE = (1<<4);
02BA 80E1 ldi R24,16
02BC 8093ED00 sts 237,R24
02C0 .dbline 151
02C0 ;
02C0 ; CANCDMOB = (1<<IDE) | (8<<DLC0); //set IDE bit rev2.0B, data length = 8
02C0 88E1 ldi R24,24
02C2 8093EF00 sts 239,R24
02C6 .dbline 154
02C6 ;
02C6 ;
02C6 ; msg.ID <<= 3; //write 29 Bit identifier
02C6 83E0 ldi R24,3
02C8 90E0 ldi R25,0
02CA F601 movw R30,R12
02CC 0081 ldd R16,z+0
02CE 1181 ldd R17,z+1
02D0 2281 ldd R18,z+2
02D2 3381 ldd R19,z+3
02D4 8A93 st -y,R24
02D6 0E940000 xcall lsl32
02DA F601 movw R30,R12
02DC 0083 std z+0,R16
02DE 1183 std z+1,R17
02E0 2283 std z+2,R18
02E2 3383 std z+3,R19
02E4 .dbline 155
02E4 ; CANIDT4 = (unsigned char) (msg.ID&0xF8);
02E4 48EF ldi R20,248
02E6 50E0 ldi R21,0
02E8 60E0 ldi R22,0
02EA 70E0 ldi R23,0
02EC 2080 ldd R2,z+0
02EE 3180 ldd R3,z+1
02F0 4280 ldd R4,z+2
02F2 5380 ldd R5,z+3
02F4 2422 and R2,R20
02F6 3522 and R3,R21
02F8 4622 and R4,R22
02FA 5722 and R5,R23
02FC 2092F000 sts 240,R2
0300 .dbline 156
0300 ; CANIDT3 = (unsigned char) (msg.ID>>8);
0300 88E0 ldi R24,8
0302 90E0 ldi R25,0
0304 8A93 st -y,R24
0306 0E940000 xcall asr32
030A 0093F100 sts 241,R16
030E .dbline 157
030E ; CANIDT2 = (unsigned char) (msg.ID>>16);
030E F601 movw R30,R12
0310 2080 ldd R2,z+0
0312 3180 ldd R3,z+1
0314 4280 ldd R4,z+2
0316 5380 ldd R5,z+3
0318 1201 movw R2,R4
031A 2092F200 sts 242,R2
031E .dbline 158
031E ; CANIDT1 = (unsigned char) (msg.ID>>24);
031E 88E1 ldi R24,24
0320 90E0 ldi R25,0
0322 0081 ldd R16,z+0
0324 1181 ldd R17,z+1
0326 2281 ldd R18,z+2
0328 3381 ldd R19,z+3
032A 8A93 st -y,R24
032C 0E940000 xcall asr32
0330 0093F300 sts 243,R16
0334 .dbline 160
0334 ;
0334 ; for(i=0;i<8;i++)
0334 AA24 clr R10
0336 0AC0 xjmp L47
0338 L44:
0338 .dbline 161
0338 .dbline 163
0338 C601 movw R24,R12
033A 0496 adiw R24,4
033C EA2D mov R30,R10
033E FF27 clr R31
0340 E80F add R30,R24
0342 F91F adc R31,R25
0344 2080 ldd R2,z+0
0346 2092FA00 sts 250,R2
034A .dbline 164
034A L45:
034A .dbline 160
034A A394 inc R10
034C L47:
034C .dbline 160
034C 8A2D mov R24,R10
034E 8830 cpi R24,8
0350 98F3 brlo L44
0352 .dbline 167
0352 ; {
0352 ;
0352 ; CANMSG = msg.Data[i];
0352 ; }
0352 ; // for (i=0; i<8; i++) //put data in mailbox 6
0352 ;
0352 ; CANCDMOB |= (1<<CONMOB0); //enable transmission
0352 8091EF00 lds R24,239
0356 8064 ori R24,64
0358 8093EF00 sts 239,R24
035C .dbline -2
035C L43:
035C 0E940000 xcall pop_gset4
0360 .dbline 0 ; func end
0360 0895 ret
0362 .dbsym r i 10 c
0362 .dbsym r msg 12 pS[_VCI_CAN_OBJ]
0362 .dbend
.area data(ram, con, rel)
00F0 .dbfile F:\測量模塊\16MCan\can.c
00F0 _CAN_tx_OverFlow::
00F0 .blkb 2
.area idata
00F0 60EA .word 60000
.area data(ram, con, rel)
00F2 .dbfile F:\測量模塊\16MCan\can.c
00F2 .dbsym e CAN_tx_OverFlow _CAN_tx_OverFlow i
.area text(rom, con, rel)
0362 .dbfile F:\測量模塊\16MCan\can.c
0362 .dbfunc e can_tx_buff _can_tx_buff fV
0362 ; tx_msg -> R20,R21
.even
0362 _can_tx_buff::
0362 0E940000 xcall push_gset1
0366 A801 movw R20,R16
0368 2C97 sbiw R28,12
036A .dbline -1
036A .dbline 181
036A ;
036A ; //while (!(CANSTMOB & (1<<TXOK))); //wait until complete
036A ; //CANSTMOB &= ~(1<<TXOK); //reset flag
036A ; }
036A ;
036A ;
036A ; #define can_TX_BUFFER_SIZE 8
036A ; VCI_CAN_OBJ tx_msg_buff[can_TX_BUFFER_SIZE];
036A ; Uchar can_sendingP;
036A ; Uchar can_willsendP;
036A ; Uchar can_tx_count;
036A ; Uint CAN_tx_OverFlow= 60000;
036A ; void can_tx_buff(VCI_CAN_OBJ tx_msg)
036A ; {
036A .dbline 182
036A ; CAN_tx_OverFlow = 60000;
036A 80E6 ldi R24,60000
036C 9AEE ldi R25,234
036E 9093F100 sts _CAN_tx_OverFlow+1,R25
0372 8093F000 sts _CAN_tx_OverFlow,R24
0376 24C0 xjmp L50
0378 L49:
0378 .dbline 184
0378 ; while (can_tx_count == can_TX_BUFFER_SIZE)
0378 ; {
0378 .dbline 185
0378 ; CAN_tx_OverFlow--;
0378 8091F000 lds R24,_CAN_tx_OverFlow
037C 9091F100 lds R25,_CAN_tx_OverFlow+1
0380 0197 sbiw R24,1
0382 9093F100 sts _CAN_tx_OverFlow+1,R25
0386 8093F000 sts _CAN_tx_OverFlow,R24
038A .dbline 186
038A ; if(CAN_tx_OverFlow<=50)
038A 82E3 ldi R24,50
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -