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

📄 can.lis

📁 can tongxunCAN128的底层驱动
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 038C 90E0              ldi R25,0
 038E 2090F000          lds R2,_CAN_tx_OverFlow
 0392 3090F100          lds R3,_CAN_tx_OverFlow+1
 0396 8215              cp R24,R2
 0398 9305              cpc R25,R3
 039A 90F0              brlo L52
 039C                   .dbline 187
 039C           ;          {
 039C                   .dbline 188
 039C           ;             can_tx_count = 0;
 039C 2224              clr R2
 039E 20920000          sts _can_tx_count,R2
 03A2                   .dbline 189
 03A2           ;                 can_sendingP = can_willsendP; 
 03A2 20900100          lds R2,_can_willsendP
 03A6 20920200          sts _can_sendingP,R2
 03AA                   .dbline 190
 03AA           ;                 CANSTMOB &= ~(1<<TXOK);
 03AA 8091EE00          lds R24,238
 03AE 8F7B              andi R24,191
 03B0 8093EE00          sts 238,R24
 03B4                   .dbline 191
 03B4           ;                 CAN_tx_OverFlow = 60000;
 03B4 80E6              ldi R24,60000
 03B6 9AEE              ldi R25,234
 03B8 9093F100          sts _CAN_tx_OverFlow+1,R25
 03BC 8093F000          sts _CAN_tx_OverFlow,R24
 03C0                   .dbline 192
 03C0           ;          }
 03C0           L52:
 03C0                   .dbline 193
 03C0           L50:
 03C0                   .dbline 183
 03C0 80910000          lds R24,_can_tx_count
 03C4 8830              cpi R24,8
 03C6 C1F2              breq L49
 03C8                   .dbline 194
 03C8           ;    }
 03C8           ;   if(can_tx_count || (CANGSTA & (1<<TXBSY)))
 03C8 8823              tst R24
 03CA 21F4              brne L56
 03CC 8091D900          lds R24,217
 03D0 8071              andi R24,16
 03D2 11F1              breq L54
 03D4           L56:
 03D4                   .dbline 195
 03D4           ;   {
 03D4                   .dbline 196
 03D4           ;      tx_msg_buff[can_willsendP] = tx_msg;
 03D4 20900100          lds R2,_can_willsendP
 03D8 8CE0              ldi R24,12
 03DA 829D              mul R24,R2
 03DC 1001              movw R2,R0
 03DE 80E0              ldi R24,<_tx_msg_buff
 03E0 90E0              ldi R25,>_tx_msg_buff
 03E2 280E              add R2,R24
 03E4 391E              adc R3,R25
 03E6 0CE0              ldi R16,12
 03E8 10E0              ldi R17,0
 03EA 3A92              st -y,R3
 03EC 2A92              st -y,R2
 03EE 5A93              st -y,R21
 03F0 4A93              st -y,R20
 03F2 0E940000          xcall asgnblk
 03F6                   .dbline 197
 03F6           ;      if(++can_willsendP == can_TX_BUFFER_SIZE)
 03F6 80910100          lds R24,_can_willsendP
 03FA 8F5F              subi R24,255    ; addi 1
 03FC 282E              mov R2,R24
 03FE 20920100          sts _can_willsendP,R2
 0402 8830              cpi R24,8
 0404 19F4              brne L57
 0406                   .dbline 198
 0406           ;            can_willsendP = 0;
 0406 2224              clr R2
 0408 20920100          sts _can_willsendP,R2
 040C           L57:
 040C                   .dbline 199
 040C           ;        ++can_tx_count;
 040C 80910000          lds R24,_can_tx_count
 0410 8F5F              subi R24,255    ; addi 1
 0412 80930000          sts _can_tx_count,R24
 0416                   .dbline 200
 0416           ;   } 
 0416 17C0              xjmp L55
 0418           L54:
 0418                   .dbline 202
 0418           ;   else 
 0418           ;   {
 0418                   .dbline 203
 0418           ;     if(can_willsendP != can_sendingP)
 0418 20900200          lds R2,_can_sendingP
 041C 30900100          lds R3,_can_willsendP
 0420 3214              cp R3,R2
 0422 31F0              breq L59
 0424                   .dbline 204
 0424           ;       {
 0424                   .dbline 205
 0424           ;         NOP();
 0424 0000              nop
 0426                   .dbline 206
 0426           ;         can_willsendP=0;
 0426 2224              clr R2
 0428 20920100          sts _can_willsendP,R2
 042C                   .dbline 207
 042C           ;         can_sendingP=0;
 042C 20920200          sts _can_sendingP,R2
 0430                   .dbline 208
 0430           ;       }
 0430           L59:
 0430                   .dbline 209
 0430 CE01              movw R24,R28
 0432 0CE0              ldi R16,12
 0434 10E0              ldi R17,0
 0436 9A93              st -y,R25
 0438 8A93              st -y,R24
 043A 5A93              st -y,R21
 043C 4A93              st -y,R20
 043E 0E940000          xcall asgnblk
 0442 8E01              movw R16,R28
 0444 37DF              xcall _can_tx
 0446                   .dbline 210
 0446           L55:
 0446                   .dbline -2
 0446           L48:
 0446 2C96              adiw R28,12
 0448 0E940000          xcall pop_gset1
 044C                   .dbline 0 ; func end
 044C 0895              ret
 044E                   .dbsym r tx_msg 20 pS[_VCI_CAN_OBJ]
 044E                   .dbend
                        .area vector(rom, abs)
                        .org 72
 0048 0C942702          jmp _can_ReceiveData
                        .area text(rom, con, rel)
 044E                   .dbfile F:\测量模块\16MCan\can.c
 044E                   .dbfunc e can_ReceiveData _can_ReceiveData fV
 044E           ;         RCFlag -> <dead>
 044E           ;        RCtemp2 -> R10,R11
 044E           ;        RCtemp1 -> R12,R13
 044E           ;           temp -> y+210
 044E           ;       RC_CANSI -> y+208
 044E           ;      CAN_REMOb -> y+180
 044E           ;            RCF -> R10,R11
 044E           ;          tempp -> R14,R15
 044E           ;             nn -> R14
 044E           ;             tt -> y+207
 044E           ;            msg -> y+0
 044E           ;              i -> R12
 044E           ;        nb_data -> R10
                        .even
 044E           _can_ReceiveData::
 044E 0E940000          xcall push_lset
 0452 0E940000          xcall push_gset5
 0456 EF97              sbiw R28,63
 0458 EF97              sbiw R28,63
 045A EF97              sbiw R28,63
 045C 6697              sbiw R28,22  ; offset = 211
 045E                   .dbline -1
 045E                   .dbline 219
 045E           ;     can_tx(tx_msg);
 045E           ;   }  
 045E           ; }
 045E           ; 
 045E           ; 
 045E           ; /*******************************************************************
 045E           ; CAN receive interrupt service routine (mailbox i)
 045E           ; *******************************************************************/
 045E           ; #pragma interrupt_handler can_ReceiveData:19
 045E           ; void can_ReceiveData (void)             //receive interrupt 
 045E           ; {Uchar RCFlag;
 045E                   .dbline 221
 045E           ;       unsigned char nb_data;
 045E           ;       unsigned char temp = CANPAGE;           //save CANPAGE
 045E 2090ED00          lds R2,237
 0462 FE01              movw R30,R28
 0464 EE52              subi R30,46  ; addi 210
 0466 FF4F              sbci R31,255
 0468 2082              std z+0,R2
 046A                   .dbline 222
 046A           ;       unsigned char i,tt=0,CAN_REMOb[15],nn;
 046A 0024              clr R0
 046C FE01              movw R30,R28
 046E E153              subi R30,49  ; addi 207
 0470 FF4F              sbci R31,255
 0472 0082              std z+0,R0
 0474                   .dbline 229
 0474           ;       unsigned int RC_CANSI,RCtemp1,RCtemp2,tempp,RCF;
 0474           ;       VCI_CAN_OBJ msg[15];
 0474           ; 
 0474           ;     //VCI_CAN_OBJ CanTkfrm;
 0474           ; 
 0474           ;       
 0474           ; if(CANSTMOB & (1<<TXOK))
 0474 8091EE00          lds R24,238
 0478 8074              andi R24,64
 047A 99F1              breq L62
 047C                   .dbline 230
 047C           ;  { 
 047C                   .dbline 231
 047C           ;    CANSTMOB &= ~(1<<TXOK);
 047C 8091EE00          lds R24,238
 0480 8F7B              andi R24,191
 0482 8093EE00          sts 238,R24
 0486                   .dbline 232
 0486           ;    if(can_tx_count)
 0486 20900000          lds R2,_can_tx_count
 048A 2220              tst R2
 048C 09F4              brne X4
 048E 42C1              xjmp L63
 0490           X4:
 0490                   .dbline 233
 0490           ;      {
 0490                   .dbline 234
 0490           ;          --can_tx_count;
 0490 822D              mov R24,R2
 0492 8150              subi R24,1
 0494 80930000          sts _can_tx_count,R24
 0498                   .dbline 235
 0498           ;          can_tx(tx_msg_buff[can_sendingP]);
 0498 20900200          lds R2,_can_sendingP
 049C 8CE0              ldi R24,12
 049E 829D              mul R24,R2
 04A0 1001              movw R2,R0
 04A2 80E0              ldi R24,<_tx_msg_buff
 04A4 90E0              ldi R25,>_tx_msg_buff
 04A6 280E              add R2,R24
 04A8 391E              adc R3,R25
 04AA CE01              movw R24,R28
 04AC 8D53              subi R24,61  ; offset = 195
 04AE 9F4F              sbci R25,255
 04B0 0CE0              ldi R16,12
 04B2 10E0              ldi R17,0
 04B4 9A93              st -y,R25
 04B6 8A93              st -y,R24
 04B8 3A92              st -y,R3
 04BA 2A92              st -y,R2
 04BC 0E940000          xcall asgnblk
 04C0 8E01              movw R16,R28
 04C2 0D53              subi R16,61  ; offset = 195
 04C4 1F4F              sbci R17,255
 04C6 F6DE              xcall _can_tx
 04C8                   .dbline 236
 04C8           ;          if(++can_sendingP==can_TX_BUFFER_SIZE) can_sendingP=0;
 04C8 80910200          lds R24,_can_sendingP
 04CC 8F5F              subi R24,255    ; addi 1
 04CE 282E              mov R2,R24
 04D0 20920200          sts _can_sendingP,R2
 04D4 8830              cpi R24,8
 04D6 09F0              breq X5
 04D8 1DC1              xjmp L63
 04DA           X5:
 04DA                   .dbline 236
 04DA 2224              clr R2
 04DC 20920200          sts _can_sendingP,R2
 04E0                   .dbline 237
 04E0           ;        }
 04E0                   .dbline 238
 04E0           ;  }
 04E0 19C1              xjmp L63
 04E2           L62:
 04E2                   .dbline 240
 04E2           ; else 
 04E2           ;  {     
 04E2                   .dbline 241
 04E2           ;       RCtemp2=CANSIT2;
 04E2 A090E000          lds R10,224
 04E6 BB24              clr R11
 04E8                   .dbline 242
 04E8           ;       RCtemp1=CANSIT1;
 04E8 C090E100          lds R12,225
 04EC DD24              clr R13
 04EE                   .dbline 243
 04EE           ;       CANSTMOB &= ~(1<<RXOK);
 04EE 8091EE00          lds R24,238
 04F2 8F7D              andi R24,223
 04F4 8093EE00          sts 238,R24
 04F8                   .dbline 244
 04F8           ;       RC_CANSI=(RCtemp1<<8)|RCtemp2;
 04F8 1601              movw R2,R12
 04FA 322C              mov R3,R2
 04FC 2224              clr R2
 04FE 2A28              or R2,R10
 0500 3B28              or R3,R11
 0502 FE01              movw R30,R28
 0504 E053              subi R30,48  ; addi 208
 0506 FF4F              sbci R31,255
 0508 3182              std z+1,R3
 050A 2082              std z+0,R2
 050C                   .dbline 245
 050C           ;     for(i=0;i<15;i++)
 050C CC24              clr R12
 050E 2BC0              xjmp L71
 0510           L68:
 0510                   .dbline 246
 0510           ;        {
 0510                   .dbline 247
 0510           ;         tempp=(1<<i);
 0510 2C2D              mov R18,R12
 0512 3327              clr R19
 0514 01E0              ldi R16,1
 0516 10E0              ldi R17,0
 0518 0E940000          xcall lsl16
 051C 7801              movw R14,R16
 051E                   .dbline 248
 051E           ;         RCF=(RC_CANSI&tempp);
 051E FE01              movw R30,R28
 0520 E053              subi R30,48  ; addi 208
 0522 FF4F              sbci R31,255
 0524 A080              ldd R10,z+0
 0526 B180              ldd R11,z+1
 0528 A022              and R10,R16
 052A B122              and R11,R17
 052C                   .dbline 249
 052C           ;         if(RCF!=0)
 052C AA20              tst R10
 052E 11F4              brne X3
 0530 BB20              tst R11
 0532 C1F0              breq L72
 0534           X3:
 0534                   .dbline 250
 0534           ;           {
 0534                   .dbline 251
 0534           ;                if(i==10)
 0534 8C2D              mov R24,R12
 0536 8A30              cpi R24,10
 0538 09F4              brne L74

⌨️ 快捷键说明

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