📄 iic_avr.lst
字号:
134:IIC_AVR.c **** IIC_STOP; //Data transmit error,Release IIC bus
563 .LM44:
564 0344 8091 5600 lds r24,86
565 0348 8569 ori r24,lo8(-107)
566 034a 8093 5600 sts 86,r24
567 034e 1092 0000 sts ucIICTimeoutCount,__zero_reg__
135:IIC_AVR.c **** //Enable user program write a new command to IIC transmit buffer
136:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_RECEIVE;
569 .LM45:
570 0352 81E0 ldi r24,lo8(1)
571 0354 8093 0000 sts ucIICMode,r24
137:IIC_AVR.c **** ucIICError=IIC_ERROR_NOT_ACK_DATA;
573 .LM46:
574 0358 82E8 ldi r24,lo8(-126)
575 035a 8093 0000 sts ucIICError,r24
138:IIC_AVR.c **** IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=1;
577 .LM47:
578 035e 8091 0000 lds r24,IIC_Buffer_Out+19
579 0362 8160 ori r24,lo8(1)
580 0364 8093 0000 sts IIC_Buffer_Out+19,r24
139:IIC_AVR.c **** IIC_Buffer_Out.ucReadP=0;
582 .LM48:
583 0368 1092 0000 sts IIC_Buffer_Out+17,__zero_reg__
140:IIC_AVR.c **** IIC_Buffer_Out.ucWriteP=0;
585 .LM49:
586 036c 1092 0000 sts IIC_Buffer_Out+16,__zero_reg__
141:IIC_AVR.c **** break;
588 .LM50:
589 0370 F8C0 rjmp .L5
590 .L15:
142:IIC_AVR.c **** case TW_MT_ARB_LOST:
143:IIC_AVR.c **** //Enable user program write a new command to IIC transmit buffer
144:IIC_AVR.c **** if(ucIICMode==IIC_MODE_MASTER_TRANSMIT)
592 .LM51:
593 0372 8091 0000 lds r24,ucIICMode
594 0376 8230 cpi r24,lo8(2)
595 0378 51F4 brne .L16
145:IIC_AVR.c **** {
146:IIC_AVR.c **** IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=1;
597 .LM52:
598 037a 8091 0000 lds r24,IIC_Buffer_Out+19
599 037e 8160 ori r24,lo8(1)
600 0380 8093 0000 sts IIC_Buffer_Out+19,r24
147:IIC_AVR.c **** IIC_Buffer_Out.ucReadP=0;
602 .LM53:
603 0384 1092 0000 sts IIC_Buffer_Out+17,__zero_reg__
148:IIC_AVR.c **** IIC_Buffer_Out.ucWriteP=0;
605 .LM54:
606 0388 1092 0000 sts IIC_Buffer_Out+16,__zero_reg__
607 038c 09C0 rjmp .L17
608 .L16:
149:IIC_AVR.c **** }
150:IIC_AVR.c **** else
151:IIC_AVR.c **** {
152:IIC_AVR.c **** IIC_Buffer_In.ucIICBufferStatus.bEnAccess=0;
610 .LM55:
611 038e 8091 0000 lds r24,IIC_Buffer_In+19
612 0392 8E7F andi r24,lo8(-2)
613 0394 8093 0000 sts IIC_Buffer_In+19,r24
153:IIC_AVR.c **** IIC_Buffer_In.ucReadP=0;
615 .LM56:
616 0398 1092 0000 sts IIC_Buffer_In+17,__zero_reg__
154:IIC_AVR.c **** IIC_Buffer_In.ucWriteP=0;
618 .LM57:
619 039c 1092 0000 sts IIC_Buffer_In+16,__zero_reg__
620 .L17:
155:IIC_AVR.c **** }
156:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_RECEIVE;
622 .LM58:
623 03a0 81E0 ldi r24,lo8(1)
624 03a2 8093 0000 sts ucIICMode,r24
157:IIC_AVR.c **** ucIICError=IIC_ERROR_ARBITRATION_LOST;
626 .LM59:
627 03a6 83E8 ldi r24,lo8(-125)
628 03a8 8093 0000 sts ucIICError,r24
158:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
630 .LM60:
631 03ac 85EC ldi r24,lo8(-59)
632 03ae 8093 5600 sts 86,r24
159:IIC_AVR.c **** break;
634 .LM61:
635 03b2 D7C0 rjmp .L5
636 .L21:
160:IIC_AVR.c ****
161:IIC_AVR.c **** ///////////////////////////////////////////
162:IIC_AVR.c **** // Slave Recieve Mode
163:IIC_AVR.c **** ///////////////////////////////////////////
164:IIC_AVR.c ****
165:IIC_AVR.c **** case TW_SR_SLA_ACK:
166:IIC_AVR.c **** case TW_SR_GCALL_ACK:
167:IIC_AVR.c **** case TW_SR_ARB_LOST_SLA_ACK:
168:IIC_AVR.c **** case TW_SR_ARB_LOST_GCALL_ACK:
169:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_RECEIVE;
638 .LM62:
639 03b4 81E0 ldi r24,lo8(1)
640 03b6 8093 0000 sts ucIICMode,r24
170:IIC_AVR.c **** IIC_Buffer_In.ucWriteP=0;
642 .LM63:
643 03ba 1092 0000 sts IIC_Buffer_In+16,__zero_reg__
171:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWIE)|_BV(TWEA));
645 .LM64:
646 03be 85EC ldi r24,lo8(-59)
647 03c0 8093 5600 sts 86,r24
172:IIC_AVR.c **** break;
649 .LM65:
650 03c4 CEC0 rjmp .L5
651 .L23:
173:IIC_AVR.c **** case TW_SR_DATA_ACK:
174:IIC_AVR.c **** case TW_SR_GCALL_DATA_ACK:
175:IIC_AVR.c **** if(IIC_Buffer_In.ucWriteP<IIC_MAX_BUFFER_LEN)
653 .LM66:
654 03c6 8091 0000 lds r24,IIC_Buffer_In+16
655 03ca 8031 cpi r24,lo8(16)
656 03cc A0F4 brsh .L24
176:IIC_AVR.c **** {
177:IIC_AVR.c **** IIC_BUS_TO_BUFFER;
658 .LM67:
659 03ce A0E0 ldi r26,lo8(IIC_Buffer_In+16)
660 03d0 B0E0 ldi r27,hi8(IIC_Buffer_In+16)
661 03d2 2C91 ld r18,X
662 03d4 822F mov r24,r18
663 03d6 9927 clr r25
664 03d8 FC01 movw r30,r24
665 03da E050 subi r30,lo8(-(IIC_Buffer_In))
666 03dc F040 sbci r31,hi8(-(IIC_Buffer_In))
667 03de 8091 2300 lds r24,35
668 03e2 8083 st Z,r24
669 03e4 2F5F subi r18,lo8(-(1))
670 03e6 2C93 st X,r18
671 03e8 8FEF ldi r24,lo8(-1)
672 03ea 8093 0000 sts ucIICTimeoutCount,r24
178:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWIE)|_BV(TWEA));
674 .LM68:
675 03ee 85EC ldi r24,lo8(-59)
676 03f0 8093 5600 sts 86,r24
677 03f4 B6C0 rjmp .L5
678 .L24:
179:IIC_AVR.c **** }
180:IIC_AVR.c **** else
181:IIC_AVR.c **** { //Buffer Overlow
182:IIC_AVR.c **** // cbi(TWCR,TWEA); //Clear TWEA Disable data ACK and address ACK
183:IIC_AVR.c **** TWCR=_BV(TWINT);
680 .LM69:
681 03f6 80E8 ldi r24,lo8(-128)
682 03f8 8093 5600 sts 86,r24
184:IIC_AVR.c **** ucIICError=IIC_ERROR_BUFFER_OVERLOW;
684 .LM70:
685 03fc 85E8 ldi r24,lo8(-123)
686 03fe 8093 0000 sts ucIICError,r24
185:IIC_AVR.c ****
186:IIC_AVR.c **** }
187:IIC_AVR.c **** break;
688 .LM71:
689 0402 AFC0 rjmp .L5
690 .L27:
188:IIC_AVR.c **** case TW_SR_DATA_NACK:
189:IIC_AVR.c **** case TW_SR_GCALL_DATA_NACK:
190:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
692 .LM72:
693 0404 85EC ldi r24,lo8(-59)
694 0406 8093 5600 sts 86,r24
191:IIC_AVR.c **** break;
696 .LM73:
697 040a ABC0 rjmp .L5
698 .L28:
192:IIC_AVR.c ****
193:IIC_AVR.c **** case TW_SR_STOP:
194:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
700 .LM74:
701 040c 85EC ldi r24,lo8(-59)
702 040e 8093 5600 sts 86,r24
195:IIC_AVR.c **** // sbi(TWCR,TWEA); //Set TWEA Enable data ACK and address ACK
196:IIC_AVR.c **** if(ucIICError==IIC_ERROR_NOERROR)
704 .LM75:
705 0412 8091 0000 lds r24,ucIICError
706 0416 8823 tst r24
707 0418 09F0 breq .+2
708 041a A3C0 rjmp .L5
197:IIC_AVR.c **** {
198:IIC_AVR.c **** IIC_Buffer_In.ucReadP=0;
710 .LM76:
711 041c 1092 0000 sts IIC_Buffer_In+17,__zero_reg__
199:IIC_AVR.c **** IIC_Buffer_In.ucIICBufferStatus.bEnAccess=1;
713 .LM77:
714 0420 8091 0000 lds r24,IIC_Buffer_In+19
715 0424 8160 ori r24,lo8(1)
716 0426 8093 0000 sts IIC_Buffer_In+19,r24
200:IIC_AVR.c **** }
201:IIC_AVR.c **** break;
718 .LM78:
719 042a 9BC0 rjmp .L5
720 .L30:
202:IIC_AVR.c ****
203:IIC_AVR.c **** ///////////////////////////////////////////
204:IIC_AVR.c **** // Master Recieve Mode
205:IIC_AVR.c **** ///////////////////////////////////////////
206:IIC_AVR.c **** case TW_MR_SLA_ACK:
207:IIC_AVR.c **** ucIICMode=IIC_MODE_MASTER_RECEIVE;
722 .LM79:
723 042c 83E0 ldi r24,lo8(3)
724 042e 8093 0000 sts ucIICMode,r24
208:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
726 .LM80:
727 0432 85EC ldi r24,lo8(-59)
728 0434 8093 5600 sts 86,r24
729 .L31:
209:IIC_AVR.c **** case TW_MR_DATA_ACK: //Recieve data from slave IIC device
210:IIC_AVR.c **** if(IIC_Buffer_In.ucWriteP!=IIC_Buffer_In.ucReadP-1) //ucReadP must initlize
731 .LM81:
732 0438 8091 0000 lds r24,IIC_Buffer_In+16
733 043c 282F mov r18,r24
734 043e 3327 clr r19
735 0440 8091 0000 lds r24,IIC_Buffer_In+17
736 0444 9927 clr r25
737 0446 0197 sbiw r24,1
738 0448 2817 cp r18,r24
739 044a 3907 cpc r19,r25
740 044c A1F0 breq .L32
211:IIC_AVR.c **** //with Bytes to read before
212:IIC_AVR.c **** //Call IICMasrRecieve
213:IIC_AVR.c **** { // Not last byte to recieve
214:IIC_AVR.c **** IIC_BUS_TO_BUFFER;
742 .LM82:
743 044e A0E0 ldi r26,lo8(IIC_Buffer_In+16)
744 0450 B0E0 ldi r27,hi8(IIC_Buffer_In+16)
745 0452 2C91 ld r18,X
746 0454 822F mov r24,r18
747 0456 9927 clr r25
748 0458 FC01 movw r30,r24
749 045a E050 subi r30,lo8(-(IIC_Buffer_In))
750 045c F040 sbci r31,hi8(-(IIC_Buffer_In))
751 045e 8091 2300 lds r24,35
752 0462 8083 st Z,r24
753 0464 2F5F subi r18,lo8(-(1))
754 0466 2C93 st X,r18
755 0468 8FEF ldi r24,lo8(-1)
756 046a 8093 0000 sts ucIICTimeoutCount,r24
215:IIC_AVR.c **** TWCR=(_BV(TWEN)|_BV(TWINT)|_BV(TWEA)|_BV(TWIE));
758 .LM83:
759 046e 85EC ldi r24,lo8(-59)
760 0470 8093 5600 sts 86,r24
216:IIC_AVR.c **** break;
762 .LM84:
763 0474 76C0 rjmp .L5
764 .L32:
217:IIC_AVR.c **** }
218:IIC_AVR.c **** else
219:IIC_AVR.c **** { //Last byte has come to IIC Bus
220:IIC_AVR.c **** IIC_BUS_TO_BUFFER;
766 .LM85:
767 0476 A0E0 ldi r26,lo8(IIC_Buffer_In+16)
768 0478 B0E0 ldi r27,hi8(IIC_Buffer_In+16)
769 047a 2C91 ld r18,X
770 047c 822F mov r24,r18
771 047e 9927 clr r25
772 0480 FC01 movw r30,r24
773 0482 E050 subi r30,lo8(-(IIC_Buffer_In))
774 0484 F040 sbci r31,hi8(-(IIC_Buffer_In))
775 0486 8091 2300 lds r24,35
776 048a 8083 st Z,r24
777 048c 2F5F subi r18,lo8(-(1))
778 048e 2C93 st X,r18
779 0490 8FEF ldi r24,lo8(-1)
780 0492 8093 0000 sts ucIICTimeoutCount,r24
221:IIC_AVR.c **** TWCR=(_BV(TWINT)|_BV(TWEN)|_BV(TWIE));
782 .LM86:
783 0496 85E8 ldi r24,lo8(-123)
784 0498 8093 5600 sts 86,r24
222:IIC_AVR.c **** // cbi(TWCR,TWEA); //Clear TWEA send NACK to finish recieve
223:IIC_AVR.c **** break;
786 .LM87:
787 049c 62C0 rjmp .L5
788 .L34:
224:IIC_AVR.c **** }
225:IIC_AVR.c **** case TW_MR_SLA_NACK: //Slave IIC device did not return a NACK during
226:IIC_AVR.c **** //address phase
227:IIC_AVR.c **** IIC_STOP; //Slave address error,Release IIC bus
790 .LM88:
791 049e 8091 5600 lds r24,86
792 04a2 8569 ori r24,lo8(-107)
793 04a4 8093 5600 sts 86,r24
794 04a8 1092 0000 sts ucIICTimeoutCount,__zero_reg__
228:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_RECEIVE;
796 .LM89:
797 04ac 81E0 ldi r24,lo8(1)
798 04ae 8093 0000 sts ucIICMode,r24
229:IIC_AVR.c **** ucIICError=IIC_ERROR_NOT_ACK_SLA;
800 .LM90:
801 04b2 81E8 ldi r24,lo8(-127)
802 04b4 8093 0000 sts ucIICError,r24
230:IIC_AVR.c **** IIC_Buffer_In.ucReadP=0;
804 .LM91:
805 04b8 1092 0000 sts IIC_Buffer_In+17,__zero_reg__
231:IIC_AVR.c **** IIC_Buffer_In.ucWriteP=0;
807 .LM92:
808 04bc 1092 0000 sts IIC_Buffer_In+16,__zero_reg__
232:IIC_AVR.c **** break;
810 .LM93:
811 04c0 50C0 rjmp .L5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -