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

📄 twi_master_drv.lis

📁 at90can128底层驱动 有SPI,TWI,总线,CAN接口等
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 02EC 2090BB00          lds R2,187
 02F0 2082              std z+0,R2
 02F2                   .dbline 180
 02F2           ;     Twi_set_stop();
 02F2 8091BC00          lds R24,188
 02F6 8061              ori R24,16
 02F8 8093BC00          sts 188,R24
 02FC                   .dbline 181
 02FC           ;     twi_busy = FALSE;
 02FC 2224              clr R2
 02FE 20920200          sts _twi_busy,R2
 0302                   .dbline 182
 0302           ;     twi_err  = TWI_RECEIVE_OK;
 0302 81E0              ldi R24,1
 0304 80930100          sts _twi_err,R24
 0308                   .dbline 183
 0308           ;     break;
 0308 0BC0              xjmp L5
 030A           L4:
 030A                   .dbline 187
 030A 8091BC00          lds R24,188
 030E 8061              ori R24,16
 0310 8093BC00          sts 188,R24
 0314                   .dbline 188
 0314 2224              clr R2
 0316 20920200          sts _twi_busy,R2
 031A                   .dbline 189
 031A 86E0              ldi R24,6
 031C 80930100          sts _twi_err,R24
 0320                   .dbline 190
 0320           L5:
 0320                   .dbline -2
 0320           L3:
 0320                   .dbline 0 ; func end
 0320 0895              ret
 0322                   .dbend
 0322                   .dbfunc e twi_send_message_polling _twi_send_message_polling fc
 0322           ;           info -> y+6
 0322           ;        nbbytes -> y+4
 0322           ;             rw -> R20
 0322           ;     slave_addr -> R22
                        .even
 0322           _twi_send_message_polling::
 0322 0E940000          xcall push_gset2
 0326 422F              mov R20,R18
 0328 602F              mov R22,R16
 032A                   .dbline -1
 032A                   .dbline 213
 032A           ; 
 032A           ;     //if we arrived here, unknown state has occurred.....
 032A           ;     default :
 032A           ;     Twi_set_stop();
 032A           ;     twi_busy = FALSE;
 032A           ;     twi_err  = TWI_UNKNOWN;
 032A           ;     break;
 032A           ;     }
 032A           ; }
 032A           ; 
 032A           ; /*****************************************************************************
 032A           ; 函数介绍:TWI主机模式,查询方式
 032A           ; 输入参数:    slave_addr:从机地址
 032A           ;                       rw:=TWI_WRITE发送模式;=TWI_READ接收模式
 032A           ;                       nbbytes:最大字节数
 032A           ;                       *info:数据缓存地址
 032A           ; 输出参数:
 032A           ; 返回值:twi_err:TWI通讯状态
 032A           ;  - TWI_TRANSFER_OK            发送完成
 032A           ;  - TWI_RECEIVE_OK             接收完成
 032A           ;  - TWI_BUS_ERROR              总线冲突
 032A           ;  - TWI_HOST_ADR_NACK  从机地址无应答
 032A           ;  - TWI_HOST_DATA_NACK 从机数据无应答(不存在)
 032A           ;  - TWI_ARBITRATION_LOST       仲裁失败
 032A           ;  - TWI_UNKNOWN                        TWI状态错误                     
 032A           ;  - TWI_NOT_FREE                       TWI通信忙
 032A           ;  - TWI_OK                             TWI通信开始
 032A           ; *****************************************************************************/
 032A           ; unsigned char twi_send_message_polling( uchar slave_addr,uchar rw, uchar nbbytes, uchar *info )
 032A           ; {
 032A                   .dbline 214
 032A           ;   twi_message.address = slave_addr;
 032A 60930300          sts _twi_message,R22
 032E                   .dbline 215
 032E           ;   twi_message.rw = rw;
 032E 40930400          sts _twi_message+1,R20
 0332                   .dbline 216
 0332           ;   twi_message.nbbytes = nbbytes;
 0332 0C80              ldd R0,y+4
 0334 00920500          sts _twi_message+2,R0
 0338                   .dbline 217
 0338           ;   twi_message.buf = info;
 0338 0E80              ldd R0,y+6
 033A 1F80              ldd R1,y+7
 033C 10920700          sts _twi_message+3+1,R1
 0340 00920600          sts _twi_message+3,R0
 0344           L60:
 0344                   .dbline 218
 0344           L61:
 0344                   .dbline 218
 0344           ;   Twi_wait_hw_stop();
 0344 2090BC00          lds R2,188
 0348 3324              clr R3
 034A 24FC              sbrc R2,4
 034C FBCF              rjmp L60
 034E                   .dbline 219
 034E           ;   Disable_twi_interrupt(); //FIXME
 034E 8091BC00          lds R24,188
 0352 8E7F              andi R24,254
 0354 8093BC00          sts 188,R24
 0358                   .dbline 220
 0358           ;   twi_nb_transmited=0;
 0358 2224              clr R2
 035A 20920000          sts _twi_nb_transmited,R2
 035E                   .dbline 221
 035E           ;   if (!twi_busy)
 035E 20900200          lds R2,_twi_busy
 0362 2220              tst R2
 0364 C9F4              brne L63
 0366                   .dbline 222
 0366           ;   {
 0366                   .dbline 223
 0366           ;     twi_busy =1;
 0366 81E0              ldi R24,1
 0368 80930200          sts _twi_busy,R24
 036C                   .dbline 224
 036C           ;     twi_err = TWI_OK;
 036C 88E0              ldi R24,8
 036E 80930100          sts _twi_err,R24
 0372                   .dbline 225
 0372           ;     Twi_set_start();
 0372 8091BC00          lds R24,188
 0376 8062              ori R24,32
 0378 8093BC00          sts 188,R24
 037C 06C0              xjmp L66
 037E           X17:
 037E                   .dbline 227
 037E           ;     while (twi_busy)
 037E           ;         {
 037E           L68:
 037E                   .dbline 228
 037E           L69:
 037E                   .dbline 228
 037E 8091BC00          lds R24,188
 0382 8078              andi R24,128
 0384 8038              cpi R24,128
 0386 D9F7              brne L68
 0388                   .dbline 229
 0388 45DE              xcall _twi_decode_status
 038A                   .dbline 231
 038A           L66:
 038A                   .dbline 226
 038A 20900200          lds R2,_twi_busy
 038E 2220              tst R2
 0390 B1F7              brne L69
 0392                   .dbline 233
 0392           ;         Twi_wait_event();
 0392           ;         twi_decode_status();
 0392           ; //        Twi_clear_si(); //REMOVE FROM MAIN LOOP, ADDED IN ALL NECESARY CASE (See JSB /RLE)
 0392           ;         }
 0392           ;    // Twi_set_stop(); RLE
 0392           ;     return twi_err;
 0392 00910100          lds R16,_twi_err
 0396 06C0              xjmp L56
 0398           L63:
 0398                   .dbline 235
 0398           ;   }
 0398           ;   Twi_set_stop();
 0398 8091BC00          lds R24,188
 039C 8061              ori R24,16
 039E 8093BC00          sts 188,R24
 03A2                   .dbline 236
 03A2           ;   return TWI_NOT_FREE;
 03A2 07E0              ldi R16,7
 03A4                   .dbline -2
 03A4           L56:
 03A4 0E940000          xcall pop_gset2
 03A8                   .dbline 0 ; func end
 03A8 0895              ret
 03AA                   .dbsym l info 6 pc
 03AA                   .dbsym l nbbytes 4 c
 03AA                   .dbsym r rw 20 c
 03AA                   .dbsym r slave_addr 22 c
 03AA                   .dbend
 03AA                   .dbfunc e twi_send_message_interrupt _twi_send_message_interrupt fc
 03AA           ;           info -> y+2
 03AA           ;        nbbytes -> y+0
 03AA           ;             rw -> R18
 03AA           ;     slave_addr -> R16
                        .even
 03AA           _twi_send_message_interrupt::
 03AA                   .dbline -1
 03AA                   .dbline 258
 03AA           ; }
 03AA           ; 
 03AA           ; /*****************************************************************************
 03AA           ; 函数介绍:TWI主机模式,中断方式
 03AA           ; 输入参数:    slave_addr:从机地址
 03AA           ;                       rw:=TWI_WRITE发送模式;=TWI_READ接收模式
 03AA           ;                       nbbytes:最大字节数
 03AA           ;                       *info:数据缓存地址
 03AA           ; 输出参数:
 03AA           ; 返回值:twi_err:TWI通讯状态
 03AA           ;  - TWI_TRANSFER_OK            发送完成
 03AA           ;  - TWI_RECEIVE_OK             接收完成
 03AA           ;  - TWI_BUS_ERROR              总线冲突
 03AA           ;  - TWI_HOST_ADR_NACK  从机地址无应答
 03AA           ;  - TWI_HOST_DATA_NACK 从机数据无应答(不存在)
 03AA           ;  - TWI_ARBITRATION_LOST       仲裁失败
 03AA           ;  - TWI_UNKNOWN                        TWI状态错误                              //接受复位
 03AA           ;  - TWI_NOT_FREE                       TWI通信忙
 03AA           ;  - TWI_OK                             TWI通信开始
 03AA           ; *****************************************************************************/
 03AA           ; unsigned char twi_send_message_interrupt( uchar slave_addr,uchar rw, uchar nbbytes, uchar *info)
 03AA           ; {
 03AA                   .dbline 259
 03AA           ;   twi_message.address = slave_addr;
 03AA 00930300          sts _twi_message,R16
 03AE                   .dbline 260
 03AE           ;   twi_message.rw = rw;
 03AE 20930400          sts _twi_message+1,R18
 03B2                   .dbline 261
 03B2           ;   twi_message.nbbytes = nbbytes;
 03B2 0880              ldd R0,y+0
 03B4 00920500          sts _twi_message+2,R0
 03B8                   .dbline 262
 03B8           ;   twi_message.buf = info;
 03B8 0A80              ldd R0,y+2
 03BA 1B80              ldd R1,y+3
 03BC 10920700          sts _twi_message+3+1,R1
 03C0 00920600          sts _twi_message+3,R0
 03C4           L75:
 03C4                   .dbline 263
 03C4           L76:
 03C4                   .dbline 263
 03C4           ;   Twi_wait_hw_stop();
 03C4 2090BC00          lds R2,188
 03C8 3324              clr R3
 03CA 24FC              sbrc R2,4
 03CC FBCF              rjmp L75
 03CE                   .dbline 264
 03CE           ;   twi_nb_transmited=0;
 03CE 2224              clr R2
 03D0 20920000          sts _twi_nb_transmited,R2
 03D4                   .dbline 265
 03D4           ;   if (!twi_busy)
 03D4 20900200          lds R2,_twi_busy
 03D8 2220              tst R2
 03DA 99F4              brne L78
 03DC                   .dbline 266
 03DC           ;   {
 03DC                   .dbline 267
 03DC           ;     twi_err = TWI_OK;
 03DC 88E0              ldi R24,8
 03DE 80930100          sts _twi_err,R24
 03E2                   .dbline 268
 03E2           ;     twi_busy =1;
 03E2 81E0              ldi R24,1
 03E4 80930200          sts _twi_busy,R24
 03E8                   .dbline 269
 03E8           ;     Enable_twi_interrupt();
 03E8 8091BC00          lds R24,188
 03EC 8160              ori R24,1
 03EE 8093BC00          sts 188,R24
 03F2                   .dbline 270
 03F2           ;     Twi_set_start();
 03F2 8091BC00          lds R24,188
 03F6 8062              ori R24,32
 03F8 8093BC00          sts 188,R24
 03FC                   .dbline 271
 03FC           ;     return twi_err;
 03FC 00910100          lds R16,_twi_err
 0400 06C0              xjmp L71
 0402           L78:
 0402                   .dbline 273
 0402           ;   }
 0402           ;   Twi_set_stop();
 0402 8091BC00          lds R24,188
 0406 8061              ori R24,16
 0408 8093BC00          sts 188,R24
 040C                   .dbline 274
 040C           ;   return TWI_NOT_FREE;
 040C 07E0              ldi R16,7
 040E                   .dbline -2
 040E           L71:
 040E                   .dbline 0 ; func end
 040E 0895              ret
 0410                   .dbsym l info 2 pc
 0410                   .dbsym l nbbytes 0 c
 0410                   .dbsym r rw 18 c
 0410                   .dbsym r slave_addr 16 c
 0410                   .dbend
                        .area vector(rom, abs)
                        .org 140
 008C 0C940802          jmp _twi_interrupt
                        .area text(rom, con, rel)
 0410                   .dbfile F:\zzz\i2c-master\twi_master_drv.c
 0410                   .dbfunc e twi_interrupt _twi_interrupt fV
                        .even
 0410           _twi_interrupt::
 0410 0E940000          xcall push_lset
 0414                   .dbline -1
 0414                   .dbline 287
 0414           ; }
 0414           ; 
 0414           ; /*****************************************************************************

⌨️ 快捷键说明

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