📄 twi_master_drv.lis
字号:
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 + -