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

📄 twi_master_drv.lis

📁 at90can128底层驱动 有SPI,TWI,总线,CAN接口等
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0414           ; 函数介绍:TWI中断例程
 0414           ; 输入参数:
 0414           ; 输出参数:
 0414           ; 返回值:无
 0414           ; *****************************************************************************/
 0414           ; //#pragma vector = TWI_vect
 0414           ; //__interrupt void twi_interrupt()
 0414           ; #pragma interrupt_handler twi_interrupt:36
 0414           ; void twi_interrupt()
 0414           ; {
 0414                   .dbline 288
 0414           ;   twi_decode_status();
 0414 FFDD              xcall _twi_decode_status
 0416                   .dbline -2
 0416           L80:
 0416 0E940000          xcall pop_lset
 041A                   .dbline 0 ; func end
 041A 1895              reti
 041C                   .dbend
 041C                   .dbfunc e TWI_MW _TWI_MW fV
 041C           ;           info -> y+8
 041C           ;        nbbytes -> R22
 041C           ;     slave_addr -> R20
                        .even
 041C           _TWI_MW::
 041C 0E940000          xcall push_gset2
 0420 622F              mov R22,R18
 0422 402F              mov R20,R16
 0424 2497              sbiw R28,4
 0426                   .dbline -1
 0426                   .dbline 301
 0426           ; //  Twi_clear_si(); //REMOVE FROM MAIN LOOP, ADDED IN ALL NECESARY CASE (See JSB /RLE)
 0426           ; }
 0426           ; 
 0426           ; /*****************************************************************************
 0426           ; 函数介绍:主机发送模式
 0426           ; 输入参数:    slave_addr:从机地址
 0426           ;                       nbbytes:最大字节数
 0426           ;                       *info:数据缓存地址
 0426           ; 输出参数:
 0426           ; 返回值:无
 0426           ; *****************************************************************************/
 0426           ; void TWI_MW(uchar slave_addr,uchar nbbytes,uchar *info)    //用户程序
 0426           ; {
 0426                   .dbline 303
 0426           ;       //twi_send_message_polling(slave_addr, TWI_WRITE, nbbytes, info);       //查询方式
 0426           ;       twi_send_message_interrupt(slave_addr, TWI_WRITE, nbbytes, info);       //中断方式
 0426 0884              ldd R0,y+8
 0428 1984              ldd R1,y+9
 042A 1B82              std y+3,R1
 042C 0A82              std y+2,R0
 042E 6883              std y+0,R22
 0430 2227              clr R18
 0432 042F              mov R16,R20
 0434 BADF              xcall _twi_send_message_interrupt
 0436                   .dbline -2
 0436           L81:
 0436 2496              adiw R28,4
 0438 0E940000          xcall pop_gset2
 043C                   .dbline 0 ; func end
 043C 0895              ret
 043E                   .dbsym l info 8 pc
 043E                   .dbsym r nbbytes 22 c
 043E                   .dbsym r slave_addr 20 c
 043E                   .dbend
 043E                   .dbfunc e TWI_MR _TWI_MR fV
 043E           ;           info -> y+8
 043E           ;        nbbytes -> R22
 043E           ;     slave_addr -> R20
                        .even
 043E           _TWI_MR::
 043E 0E940000          xcall push_gset2
 0442 622F              mov R22,R18
 0444 402F              mov R20,R16
 0446 2497              sbiw R28,4
 0448                   .dbline -1
 0448                   .dbline 315
 0448           ; }
 0448           ; 
 0448           ; /*****************************************************************************
 0448           ; 函数介绍:主机接收模式
 0448           ; 输入参数:    slave_addr:从机地址
 0448           ;                       nbbytes:最大字节数
 0448           ;                       *info:数据缓存地址
 0448           ; 输出参数:
 0448           ; 返回值:无
 0448           ; *****************************************************************************/
 0448           ; void TWI_MR(uchar slave_addr,uchar nbbytes,uchar *info)
 0448           ; {
 0448                   .dbline 317
 0448           ;       //twi_send_message_polling(slave_addr, TWI_READ, nbbytes, info);        //查询方式
 0448           ;       twi_send_message_interrupt(slave_addr, TWI_READ, nbbytes, info);        //中断方式
 0448 0884              ldd R0,y+8
 044A 1984              ldd R1,y+9
 044C 1B82              std y+3,R1
 044E 0A82              std y+2,R0
 0450 6883              std y+0,R22
 0452 21E0              ldi R18,1
 0454 042F              mov R16,R20
 0456 A9DF              xcall _twi_send_message_interrupt
 0458                   .dbline -2
 0458           L82:
 0458 2496              adiw R28,4
 045A 0E940000          xcall pop_gset2
 045E                   .dbline 0 ; func end
 045E 0895              ret
 0460                   .dbsym l info 8 pc
 0460                   .dbsym r nbbytes 22 c
 0460                   .dbsym r slave_addr 20 c
 0460                   .dbend
                        .area lit(rom, con, rel)
 0000           L84:
 0000 9055              .byte 144,'U
 0002 55                .byte 'U
                        .area text(rom, con, rel)
 0460                   .dbfile F:\zzz\i2c-master\twi_master_drv.c
 0460                   .dbfunc e main _main fV
 0460           ;        Mkeybuf -> y+5
 0460           ;        Mdisbuf -> y+2
 0460           ;              i -> R20,R21
                        .even
 0460           _main::
 0460 2997              sbiw R28,9
 0462                   .dbline -1
 0462                   .dbline 323
 0462           ; }
 0462           ; 
 0462           ; 
 0462           ; 
 0462           ; void main(void)
 0462           ; {
 0462                   .dbline 326
 0462           ; int i;
 0462           ;       
 0462           ;       uchar Mdisbuf[3]={0x90,0x55,0x55};
 0462 80E0              ldi R24,<L84
 0464 90E0              ldi R25,>L84
 0466 FE01              movw R30,R28
 0468 3296              adiw R30,2
 046A 03E0              ldi R16,3
 046C 10E0              ldi R17,0
 046E FA93              st -y,R31
 0470 EA93              st -y,R30
 0472 9A93              st -y,R25
 0474 8A93              st -y,R24
 0476 0E940000          xcall asgncblk
 047A                   .dbline 329
 047A           ;       uchar Mkeybuf[4];
 047A           ;       
 047A           ;       twi_busy = 0;
 047A 2224              clr R2
 047C 20920200          sts _twi_busy,R2
 0480                   .dbline 331
 0480           ;       
 0480           ;       CLI();
 0480 F894              cli
 0482                   .dbline 332
 0482           ;       twi_lib_init();
 0482 BEDD              xcall _twi_lib_init
 0484                   .dbline 333
 0484           ;       SEI();
 0484 7894              sei
 0486 35C0              xjmp L86
 0488           L85:
 0488                   .dbline 341
 0488           ;       
 0488           ; 
 0488           ; /*while(1)    
 0488           ;       if(!twi_busy)
 0488           ;               TWI_MR(0x4F, 2, Mkeybuf);  //向从机温度传感器0x4F读取2个数据    
 0488           ; */
 0488           ; while(1)
 0488           ; {     
 0488                   .dbline 342
 0488           ;       if(!twi_busy)   
 0488 20900200          lds R2,_twi_busy
 048C 2220              tst R2
 048E 39F4              brne L88
 0490                   .dbline 343
 0490           ;               TWI_MR(0x21, 4, Mkeybuf);
 0490 CE01              movw R24,R28
 0492 0596              adiw R24,5
 0494 9983              std y+1,R25
 0496 8883              std y+0,R24
 0498 24E0              ldi R18,4
 049A 01E2              ldi R16,33
 049C D0DF              xcall _TWI_MR
 049E           L88:
 049E                   .dbline 345
 049E           ;       
 049E           ;       if(!twi_busy){
 049E 20900200          lds R2,_twi_busy
 04A2 2220              tst R2
 04A4 49F4              brne L90
 04A6                   .dbline 345
 04A6                   .dbline 346
 04A6           ;               Mdisbuf[2]=0x09;//点亮                  
 04A6 89E0              ldi R24,9
 04A8 8C83              std y+4,R24
 04AA                   .dbline 347
 04AA           ;               TWI_MW(0x21, 3, Mdisbuf); //向从机0x21写入3个数据
 04AA CE01              movw R24,R28
 04AC 0296              adiw R24,2
 04AE 9983              std y+1,R25
 04B0 8883              std y+0,R24
 04B2 23E0              ldi R18,3
 04B4 01E2              ldi R16,33
 04B6 B2DF              xcall _TWI_MW
 04B8                   .dbline 348
 04B8           ;       }
 04B8           L90:
 04B8                   .dbline 349
 04B8 4427              clr R20
 04BA 5527              clr R21
 04BC           L93:
 04BC                   .dbline 349
 04BC           L94:
 04BC                   .dbline 349
 04BC           ;       for(i=0;i<2000;i++);
 04BC 4F5F              subi R20,255  ; offset = 1
 04BE 5F4F              sbci R21,255
 04C0                   .dbline 349
 04C0 403D              cpi R20,208
 04C2 E7E0              ldi R30,7
 04C4 5E07              cpc R21,R30
 04C6 D4F3              brlt L93
 04C8                   .dbline 350
 04C8           ;       if(!twi_busy){
 04C8 20900200          lds R2,_twi_busy
 04CC 2220              tst R2
 04CE 49F4              brne L97
 04D0                   .dbline 350
 04D0                   .dbline 351
 04D0           ;               Mdisbuf[2]=0x89;//灭                    
 04D0 89E8              ldi R24,137
 04D2 8C83              std y+4,R24
 04D4                   .dbline 352
 04D4           ;               TWI_MW(0x21, 3, Mdisbuf); //向从机0x21写入3个数据
 04D4 CE01              movw R24,R28
 04D6 0296              adiw R24,2
 04D8 9983              std y+1,R25
 04DA 8883              std y+0,R24
 04DC 23E0              ldi R18,3
 04DE 01E2              ldi R16,33
 04E0 9DDF              xcall _TWI_MW
 04E2                   .dbline 353
 04E2           ;       }
 04E2           L97:
 04E2                   .dbline 354
 04E2 4427              clr R20
 04E4 5527              clr R21
 04E6           L100:
 04E6                   .dbline 354
 04E6           L101:
 04E6                   .dbline 354
 04E6 4F5F              subi R20,255  ; offset = 1
 04E8 5F4F              sbci R21,255
 04EA                   .dbline 354
 04EA 403D              cpi R20,208
 04EC E7E0              ldi R30,7
 04EE 5E07              cpc R21,R30
 04F0 D4F3              brlt L100
 04F2                   .dbline 355
 04F2           L86:
 04F2                   .dbline 340
 04F2 CACF              xjmp L85
 04F4           L104:
 04F4                   .dbline 361
 04F4           L105:
 04F4                   .dbline 361
 04F4 FFCF              xjmp L104
 04F6           X18:
 04F6                   .dbline -2
 04F6           L83:
 04F6 2996              adiw R28,9
 04F8                   .dbline 0 ; func end
 04F8 0895              ret
 04FA                   .dbsym l Mkeybuf 5 A[4:4]c
 04FA                   .dbsym l Mdisbuf 2 A[3:3]c
 04FA                   .dbsym r i 20 I
 04FA                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\zzz\i2c-master\twi_master_drv.c
 0000           _twi_nb_transmited::
 0000                   .blkb 1
 0001                   .dbsym e twi_nb_transmited _twi_nb_transmited c
 0001           _twi_err::
 0001                   .blkb 1
 0002                   .dbsym e twi_err _twi_err c
 0002           _twi_busy::
 0002                   .blkb 1
 0003                   .dbsym e twi_busy _twi_busy c
 0003           _twi_message::
 0003                   .blkb 5
 0008                   .dbstruct 0 5 .1
 0008                   .dbfield 0 address c
 0008                   .dbfield 1 rw c
 0008                   .dbfield 2 nbbytes c
 0008                   .dbfield 3 buf pc
 0008                   .dbend
 0008                   .dbsym e twi_message _twi_message S[.1]

⌨️ 快捷键说明

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