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

📄 can.lis

📁 can tongxunCAN128的底层驱动
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -