📄 iic_avr.lst
字号:
812 .L35:
233:IIC_AVR.c **** case TW_MR_DATA_NACK:
234:IIC_AVR.c **** IIC_STOP;
814 .LM94:
815 04c2 8091 5600 lds r24,86
816 04c6 8569 ori r24,lo8(-107)
817 04c8 8093 5600 sts 86,r24
818 04cc 1092 0000 sts ucIICTimeoutCount,__zero_reg__
235:IIC_AVR.c **** // sbi(TWCR,TWEA); //Set TWEA to enable ACK
236:IIC_AVR.c **** if(IIC_Buffer_In.ucReadP==IIC_Buffer_In.ucWriteP)
820 .LM95:
821 04d0 9091 0000 lds r25,IIC_Buffer_In+17
822 04d4 8091 0000 lds r24,IIC_Buffer_In+16
823 04d8 9817 cp r25,r24
824 04da 41F4 brne .L36
237:IIC_AVR.c **** { //Data receive success
238:IIC_AVR.c **** //Enable user program get command from IIC recieve buffer
239:IIC_AVR.c **** IIC_Buffer_In.ucIICBufferStatus.bEnAccess=1;
826 .LM96:
827 04dc 8091 0000 lds r24,IIC_Buffer_In+19
828 04e0 8160 ori r24,lo8(1)
829 04e2 8093 0000 sts IIC_Buffer_In+19,r24
240:IIC_AVR.c **** ucIICError=IIC_ERROR_NOERROR;
831 .LM97:
832 04e6 1092 0000 sts ucIICError,__zero_reg__
833 04ea 03C0 rjmp .L37
834 .L36:
241:IIC_AVR.c **** }
242:IIC_AVR.c **** else
243:IIC_AVR.c **** {
244:IIC_AVR.c **** ucIICError=IIC_ERROR_NOT_ACK_DATA;
836 .LM98:
837 04ec 82E8 ldi r24,lo8(-126)
838 04ee 8093 0000 sts ucIICError,r24
839 .L37:
245:IIC_AVR.c **** }
246:IIC_AVR.c **** IIC_Buffer_In.ucWriteP=0;
841 .LM99:
842 04f2 1092 0000 sts IIC_Buffer_In+16,__zero_reg__
247:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_RECEIVE;
844 .LM100:
845 04f6 81E0 ldi r24,lo8(1)
846 04f8 8093 0000 sts ucIICMode,r24
248:IIC_AVR.c **** break;
848 .LM101:
849 04fc 32C0 rjmp .L5
850 .L38:
249:IIC_AVR.c ****
250:IIC_AVR.c **** //Same as TW_MT_ARB_LOST
251:IIC_AVR.c **** // case TW_MR_ARB_LOST:
252:IIC_AVR.c **** // ucIICMode=IIC_MODE_SLAVE_RECEIVE;
253:IIC_AVR.c **** // ucIICError=IIC_ERROR_ARBITRATION_LOST;
254:IIC_AVR.c **** // IIC_Buffer_In.ucReadP=0;
255:IIC_AVR.c **** // IIC_Buffer_In.ucWriteP=0;
256:IIC_AVR.c **** // break;
257:IIC_AVR.c ****
258:IIC_AVR.c ****
259:IIC_AVR.c **** ///////////////////////////////////////////
260:IIC_AVR.c **** // Slave Transmit Mode
261:IIC_AVR.c **** ///////////////////////////////////////////
262:IIC_AVR.c **** case TW_ST_SLA_ACK:
263:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_TRANSMIT;
852 .LM102:
853 04fe 1092 0000 sts ucIICMode,__zero_reg__
264:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
855 .LM103:
856 0502 85EC ldi r24,lo8(-59)
857 0504 8093 5600 sts 86,r24
858 .L39:
265:IIC_AVR.c **** case TW_ST_DATA_ACK:
266:IIC_AVR.c **** if(IIC_Buffer_Out.ucReadP!=IIC_Buffer_Out.ucWriteP)
860 .LM104:
861 0508 9091 0000 lds r25,IIC_Buffer_Out+17
862 050c 8091 0000 lds r24,IIC_Buffer_Out+16
863 0510 9817 cp r25,r24
864 0512 A1F0 breq .L43
267:IIC_AVR.c **** { // Data transmit not finish
268:IIC_AVR.c **** IIC_BUFFER_TO_BUS;
866 .LM105:
867 0514 A0E0 ldi r26,lo8(IIC_Buffer_Out+17)
868 0516 B0E0 ldi r27,hi8(IIC_Buffer_Out+17)
869 0518 2C91 ld r18,X
870 051a 822F mov r24,r18
871 051c 9927 clr r25
872 051e FC01 movw r30,r24
873 0520 E050 subi r30,lo8(-(IIC_Buffer_Out))
874 0522 F040 sbci r31,hi8(-(IIC_Buffer_Out))
875 0524 2F5F subi r18,lo8(-(1))
876 0526 2C93 st X,r18
877 0528 8081 ld r24,Z
878 052a 8093 2300 sts 35,r24
879 052e 8FEF ldi r24,lo8(-1)
880 0530 8093 0000 sts ucIICTimeoutCount,r24
269:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
882 .LM106:
883 0534 85EC ldi r24,lo8(-59)
884 0536 8093 5600 sts 86,r24
270:IIC_AVR.c **** break;
886 .LM107:
887 053a 13C0 rjmp .L5
888 .L43:
271:IIC_AVR.c **** }
272:IIC_AVR.c **** // Buffer Empty!!
273:IIC_AVR.c **** case TW_ST_ARB_LOST_SLA_ACK:
274:IIC_AVR.c **** case TW_ST_DATA_NACK:
275:IIC_AVR.c **** case TW_ST_LAST_DATA:
276:IIC_AVR.c **** //Transfer complet
277:IIC_AVR.c **** IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=1;
890 .LM108:
891 053c 8091 0000 lds r24,IIC_Buffer_Out+19
892 0540 8160 ori r24,lo8(1)
893 0542 8093 0000 sts IIC_Buffer_Out+19,r24
278:IIC_AVR.c **** IIC_Buffer_Out.ucReadP=0;
895 .LM109:
896 0546 1092 0000 sts IIC_Buffer_Out+17,__zero_reg__
279:IIC_AVR.c **** IIC_Buffer_Out.ucWriteP=0;
898 .LM110:
899 054a 1092 0000 sts IIC_Buffer_Out+16,__zero_reg__
280:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_RECEIVE;
901 .LM111:
902 054e 81E0 ldi r24,lo8(1)
903 0550 8093 0000 sts ucIICMode,r24
281:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
905 .LM112:
906 0554 85EC ldi r24,lo8(-59)
907 0556 8093 5600 sts 86,r24
282:IIC_AVR.c **** break;
909 .LM113:
910 055a 03C0 rjmp .L5
911 .L46:
283:IIC_AVR.c ****
284:IIC_AVR.c **** case TW_BUS_ERROR:
285:IIC_AVR.c **** case TW_NO_INFO:
286:IIC_AVR.c **** default:
287:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
913 .LM114:
914 055c 85EC ldi r24,lo8(-59)
915 055e 8093 5600 sts 86,r24
916 .L5:
917 /* epilogue: frame size=3 */
918 0562 2396 adiw r28,3
919 0564 F894 cli
920 0566 DEBF out __SP_H__,r29
921 0568 CDBF out __SP_L__,r28
922 056a DF91 pop r29
923 056c CF91 pop r28
924 056e FF91 pop r31
925 0570 EF91 pop r30
926 0572 BF91 pop r27
927 0574 AF91 pop r26
928 0576 9F91 pop r25
929 0578 8F91 pop r24
930 057a 3F91 pop r19
931 057c 2F91 pop r18
932 057e 0F90 pop __tmp_reg__
933 0580 0FBE out __SREG__,__tmp_reg__
934 0582 0F90 pop __tmp_reg__
935 0584 1F90 pop __zero_reg__
936 0586 1895 reti
937 /* epilogue end (size=19) */
938 /* function __vector_17 size 610 (571) */
946 .global I2C_Send
948 I2C_Send:
288:IIC_AVR.c **** break;
289:IIC_AVR.c ****
290:IIC_AVR.c ****
291:IIC_AVR.c **** }
292:IIC_AVR.c **** // TWCR |= _BV(TWINT); //Write 1 to Clear TWINT
293:IIC_AVR.c **** }
294:IIC_AVR.c ****
295:IIC_AVR.c ****
296:IIC_AVR.c **** ///////////////////////////////////////////
297:IIC_AVR.c **** //U8 I2C_Send(U8 I2C_Addr, U8* I2C_MsgData , U8 MsgDataLen, U8 s_Timeout )
298:IIC_AVR.c **** //其中U8 为 unsigned char。
299:IIC_AVR.c **** //参数说明:
300:IIC_AVR.c **** //I2C_Addr:发送的目标地址,每个板卡都应该有唯一的I2C通讯地址。
301:IIC_AVR.c **** //I2C_MsgData:存放消息数据的缓冲区。
302:IIC_AVR.c **** //Msg_DataLen:发送消息的数据长度。
303:IIC_AVR.c **** //S_Timeout:发送消息超时的时间,单位为毫秒(ms)。
304:IIC_AVR.c **** //返回值:是否发送成功,0:成功;~0:错误代码
305:IIC_AVR.c **** ///////////////////////////////////////////
306:IIC_AVR.c **** U8 I2C_Send(U8 I2C_Addr,U8 * I2C_MsgData,U8 MsgDataLen,U8 s_Timeout)
307:IIC_AVR.c **** {
950 .LM115:
951 /* prologue: frame size=5 */
952 0588 CF93 push r28
953 058a DF93 push r29
954 058c CDB7 in r28,__SP_L__
955 058e DEB7 in r29,__SP_H__
956 0590 2597 sbiw r28,5
957 0592 0FB6 in __tmp_reg__,__SREG__
958 0594 F894 cli
959 0596 DEBF out __SP_H__,r29
960 0598 0FBE out __SREG__,__tmp_reg__
961 059a CDBF out __SP_L__,r28
962 /* prologue end (size=10) */
963 059c 8983 std Y+1,r24
964 059e 6A83 std Y+2,r22
965 05a0 7B83 std Y+3,r23
966 05a2 4C83 std Y+4,r20
967 05a4 2D83 std Y+5,r18
308:IIC_AVR.c **** return 0;
969 .LM116:
970 05a6 80E0 ldi r24,lo8(0)
971 05a8 90E0 ldi r25,hi8(0)
972 /* epilogue: frame size=5 */
973 05aa 2596 adiw r28,5
974 05ac 0FB6 in __tmp_reg__,__SREG__
975 05ae F894 cli
976 05b0 DEBF out __SP_H__,r29
977 05b2 0FBE out __SREG__,__tmp_reg__
978 05b4 CDBF out __SP_L__,r28
979 05b6 DF91 pop r29
980 05b8 CF91 pop r28
981 05ba 0895 ret
982 /* epilogue end (size=9) */
983 /* function I2C_Send size 26 (7) */
989 .global I2C_Rcvd
991 I2C_Rcvd:
309:IIC_AVR.c **** }
310:IIC_AVR.c ****
311:IIC_AVR.c **** ///////////////////////////////////////////
312:IIC_AVR.c **** //U8 I2C_Rcvd(U8 * I2C_MsgData ,U8 * MsgDataLen ,U8 r_Timeout)
313:IIC_AVR.c **** //I2C_MsgData:接收消息数据的缓冲区。
314:IIC_AVR.c **** //Msg_DataLen:接收消息的数据长度。
315:IIC_AVR.c **** //r_Timeout:接收消息超时的时间,单位为毫秒(ms)。
316:IIC_AVR.c **** //返回值:是否接收成功,0:成功;~0:错误代码
317:IIC_AVR.c **** ///////////////////////////////////////////
318:IIC_AVR.c **** I8 I2C_Rcvd(U8 * I2C_MsgData,U8 * MsgDataLen,U8 r_Timeout)
319:IIC_AVR.c **** {
993 .LM117:
994 /* prologue: frame size=5 */
995 05bc CF93 push r28
996 05be DF93 push r29
997 05c0 CDB7 in r28,__SP_L__
998 05c2 DEB7 in r29,__SP_H__
999 05c4 2597 sbiw r28,5
1000 05c6 0FB6 in __tmp_reg__,__SREG__
1001 05c8 F894 cli
1002 05ca DEBF out __SP_H__,r29
1003 05cc 0FBE out __SREG__,__tmp_reg__
1004 05ce CDBF out __SP_L__,r28
1005 /* prologue end (size=10) */
1006 05d0 8983 std Y+1,r24
1007 05d2 9A83 std Y+2,r25
1008 05d4 6B83 std Y+3,r22
1009 05d6 7C83 std Y+4,r23
1010 05d8 4D83 std Y+5,r20
320:IIC_AVR.c **** return 0;
1012 .LM118:
1013 05da 80E0 ldi r24,lo8(0)
1014 05dc 90E0 ldi r25,hi8(0)
1015 /* epilogue: frame size=5 */
1016 05de 2596 adiw r28,5
1017 05e0 0FB6 in __tmp_reg__,__SREG__
1018 05e2 F894 cli
1019 05e4 DEBF out __SP_H__,r29
1020 05e6 0FBE out __SREG__,__tmp_reg__
1021 05e8 CDBF out __SP_L__,r28
1022 05ea DF91 pop r29
1023 05ec CF91 pop r28
1024 05ee 0895 ret
1025 /* epilogue end (size=9) */
1026 /* function I2C_Rcvd size 26 (7) */
1028 .comm IIC_Buffer_In,20,1
1029 .comm IIC_Buffer_Out,20,1
1030 .comm ucIICTimeoutCount,1,1
1031 .comm ucIICMode,1,1
1032 .comm ucIICError,1,1
1033 .comm ucIICAddress,1,1
1041 .text
1043 Letext:
1044 /* File "IIC_AVR.c": code 760 = 0x02f8 ( 664), prologues 50, epilogues 46 */
DEFINED SYMBOLS
*ABS*:00000000 IIC_AVR.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
C:\DOCUME~1\Guobg\LOCALS~1\Temp/ccgPaaaa.s:59 .data:00000000 IIC_BaudrateConfig
C:\DOCUME~1\Guobg\LOCALS~1\Temp/ccgPaaaa.s:70 .text:00000000 IIC_Init
*COM*:00000001 ucIICMode
*COM*:00000001 ucIICError
*COM*:00000014 IIC_Buffer_In
*COM*:00000014 IIC_Buffer_Out
C:\DOCUME~1\Guobg\LOCALS~1\Temp/ccgPaaaa.s:203 .text:000000c4 __vector_17
*COM*:00000001 ucIICTimeoutCount
C:\DOCUME~1\Guobg\LOCALS~1\Temp/ccgPaaaa.s:948 .text:00000588 I2C_Send
C:\DOCUME~1\Guobg\LOCALS~1\Temp/ccgPaaaa.s:991 .text:000005bc I2C_Rcvd
*COM*:00000001 ucIICAddress
C:\DOCUME~1\Guobg\LOCALS~1\Temp/ccgPaaaa.s:1043 .text:000005f0 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -