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

📄 iic_avr.lst

📁 串口转发IIC程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -