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

📄 com2iic.lss

📁 串口转发IIC程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:

COM2IIC.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000bd8  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000001e  00800060  00000bd8  00000c6c  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000046  0080007e  0080007e  00000c8a  2**0
                  ALLOC
  3 .noinit       00000000  008000c4  008000c4  00000c8a  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000c8a  2**0
                  CONTENTS
  5 .stab         000010b0  00000000  00000000  00000c8c  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000b65  00000000  00000000  00001d3c  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54
   4:	0c 94 45 00 	jmp	0x8a
   8:	0c 94 45 00 	jmp	0x8a
   c:	0c 94 45 00 	jmp	0x8a
  10:	0c 94 45 00 	jmp	0x8a
  14:	0c 94 45 00 	jmp	0x8a
  18:	0c 94 45 00 	jmp	0x8a
  1c:	0c 94 45 00 	jmp	0x8a
  20:	0c 94 45 00 	jmp	0x8a
  24:	0c 94 45 00 	jmp	0x8a
  28:	0c 94 45 00 	jmp	0x8a
  2c:	0c 94 7c 05 	jmp	0xaf8
  30:	0c 94 45 00 	jmp	0x8a
  34:	0c 94 1f 05 	jmp	0xa3e
  38:	0c 94 45 00 	jmp	0x8a
  3c:	0c 94 45 00 	jmp	0x8a
  40:	0c 94 45 00 	jmp	0x8a
  44:	0c 94 07 01 	jmp	0x20e
  48:	0c 94 45 00 	jmp	0x8a
  4c:	0c 94 45 00 	jmp	0x8a
  50:	0c 94 45 00 	jmp	0x8a

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	e8 ed       	ldi	r30, 0xD8	; 216
  68:	fb e0       	ldi	r31, 0x0B	; 11
  6a:	02 c0       	rjmp	.+4      	; 0x70

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	ae 37       	cpi	r26, 0x7E	; 126
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	ae e7       	ldi	r26, 0x7E	; 126
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a4 3c       	cpi	r26, 0xC4	; 196
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 47 00 	jmp	0x8e

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0

0000008e <main>:
extern struct IIC_BUFFER IIC_Buffer_In,IIC_Buffer_Out;
extern U8 ucIICTimeoutCount;			// IIC Time out counter

int main(void)
{
  8e:	ce e5       	ldi	r28, 0x5E	; 94
  90:	d4 e0       	ldi	r29, 0x04	; 4
  92:	de bf       	out	0x3e, r29	; 62
  94:	cd bf       	out	0x3d, r28	; 61
	U8 i;
	IIC_Init(IIC_SLAVE_ADDRESS,IIC_BAUDRATE_100K);
  96:	61 e0       	ldi	r22, 0x01	; 1
  98:	81 e0       	ldi	r24, 0x01	; 1
  9a:	0e 94 a5 00 	call	0x14a

	
	SerialInit();
  9e:	0e 94 d2 05 	call	0xba4
	IIC_Buffer_Out.ucDestinationAddress=10;
  a2:	8a e0       	ldi	r24, 0x0A	; 10
  a4:	80 93 a7 00 	sts	0x00A7, r24
	while(1)
	{
		if(inbufful)
  a8:	80 91 b6 00 	lds	r24, 0x00B6
  ac:	86 95       	lsr	r24
  ae:	86 95       	lsr	r24
  b0:	99 27       	eor	r25, r25
  b2:	81 70       	andi	r24, 0x01	; 1
  b4:	90 70       	andi	r25, 0x00	; 0
  b6:	00 97       	sbiw	r24, 0x00	; 0
  b8:	49 f1       	breq	.+82     	; 0x10c
		{// Uart Rx buffer full
			while(!IIC_Buffer_Out.ucIICBufferStatus.bEnAccess);
  ba:	80 91 a8 00 	lds	r24, 0x00A8
  be:	99 27       	eor	r25, r25
  c0:	81 70       	andi	r24, 0x01	; 1
  c2:	90 70       	andi	r25, 0x00	; 0
  c4:	00 97       	sbiw	r24, 0x00	; 0
  c6:	09 f4       	brne	.+2      	; 0xca
  c8:	f8 cf       	rjmp	.-16     	; 0xba
			for(i=0;i<ILEN;i++)
  ca:	19 82       	std	Y+1, r1	; 0x01
  cc:	89 81       	ldd	r24, Y+1	; 0x01
  ce:	8c 30       	cpi	r24, 0x0C	; 12
  d0:	90 f4       	brcc	.+36     	; 0xf6
			{
				IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=0;
  d2:	80 91 a8 00 	lds	r24, 0x00A8
  d6:	8e 7f       	andi	r24, 0xFE	; 254
  d8:	80 93 a8 00 	sts	0x00A8, r24
				IIC_Buffer_Out.IIC_BUFFER_UNION.ucData[i]=GetByte();
  dc:	89 81       	ldd	r24, Y+1	; 0x01
  de:	99 27       	eor	r25, r25
  e0:	8c 01       	movw	r16, r24
  e2:	0b 56       	subi	r16, 0x6B	; 107
  e4:	1f 4f       	sbci	r17, 0xFF	; 255
  e6:	0e 94 d4 04 	call	0x9a8
  ea:	f8 01       	movw	r30, r16
  ec:	80 83       	st	Z, r24
  ee:	89 81       	ldd	r24, Y+1	; 0x01
  f0:	8f 5f       	subi	r24, 0xFF	; 255
  f2:	89 83       	std	Y+1, r24	; 0x01
  f4:	eb cf       	rjmp	.-42     	; 0xcc
			}
			IIC_Buffer_Out.ucWriteP=i;
  f6:	89 81       	ldd	r24, Y+1	; 0x01
  f8:	80 93 a5 00 	sts	0x00A5, r24
			IIC_START;
  fc:	80 91 56 00 	lds	r24, 0x0056
 100:	85 6a       	ori	r24, 0xA5	; 165
 102:	80 93 56 00 	sts	0x0056, r24
 106:	8f ef       	ldi	r24, 0xFF	; 255
 108:	80 93 7f 00 	sts	0x007F, r24
		}

		if(IIC_Buffer_In.ucIICBufferStatus.bEnAccess)
 10c:	80 91 93 00 	lds	r24, 0x0093
 110:	99 27       	eor	r25, r25
 112:	81 70       	andi	r24, 0x01	; 1
 114:	90 70       	andi	r25, 0x00	; 0
 116:	00 97       	sbiw	r24, 0x00	; 0
 118:	39 f2       	breq	.-114    	; 0xa8
		{// Recieved a frame from IIC
			IIC_Buffer_In.ucIICBufferStatus.bEnAccess=0;
 11a:	80 91 93 00 	lds	r24, 0x0093
 11e:	8e 7f       	andi	r24, 0xFE	; 254
 120:	80 93 93 00 	sts	0x0093, r24
			for(i=0;i<IIC_Buffer_In.ucWriteP;i++)
 124:	19 82       	std	Y+1, r1	; 0x01
 126:	90 91 90 00 	lds	r25, 0x0090
 12a:	89 81       	ldd	r24, Y+1	; 0x01
 12c:	89 17       	cp	r24, r25
 12e:	08 f0       	brcs	.+2      	; 0x132
 130:	bb cf       	rjmp	.-138    	; 0xa8
			{
				PutByte(IIC_Buffer_In.IIC_BUFFER_UNION.ucData[i]);
 132:	89 81       	ldd	r24, Y+1	; 0x01
 134:	99 27       	eor	r25, r25
 136:	fc 01       	movw	r30, r24
 138:	e0 58       	subi	r30, 0x80	; 128
 13a:	ff 4f       	sbci	r31, 0xFF	; 255
 13c:	80 81       	ld	r24, Z
 13e:	0e 94 9d 03 	call	0x73a
 142:	89 81       	ldd	r24, Y+1	; 0x01
 144:	8f 5f       	subi	r24, 0xFF	; 255
 146:	89 83       	std	Y+1, r24	; 0x01
 148:	ee cf       	rjmp	.-36     	; 0x126

0000014a <IIC_Init>:
//	Output:
//		NONE
///////////////////////////////////////////
void IIC_Init(U8 ucSlaveAddr,U8 ucBaudrate)
{
 14a:	cf 93       	push	r28
 14c:	df 93       	push	r29
 14e:	cd b7       	in	r28, 0x3d	; 61
 150:	de b7       	in	r29, 0x3e	; 62
 152:	23 97       	sbiw	r28, 0x03	; 3
 154:	0f b6       	in	r0, 0x3f	; 63
 156:	f8 94       	cli
 158:	de bf       	out	0x3e, r29	; 62
 15a:	0f be       	out	0x3f, r0	; 63
 15c:	cd bf       	out	0x3d, r28	; 61
 15e:	89 83       	std	Y+1, r24	; 0x01
 160:	6a 83       	std	Y+2, r22	; 0x02
	unsigned char i;
	//Initlize baudrate
	TWBR=IIC_BaudrateConfig[ucBaudrate][0];
 162:	8a 81       	ldd	r24, Y+2	; 0x02
 164:	28 2f       	mov	r18, r24
 166:	33 27       	eor	r19, r19
 168:	c9 01       	movw	r24, r18
 16a:	82 0f       	add	r24, r18
 16c:	93 1f       	adc	r25, r19
 16e:	fc 01       	movw	r30, r24
 170:	e0 5a       	subi	r30, 0xA0	; 160
 172:	ff 4f       	sbci	r31, 0xFF	; 255
 174:	80 81       	ld	r24, Z
 176:	80 93 20 00 	sts	0x0020, r24
	TWSR=IIC_BaudrateConfig[ucBaudrate][1];
 17a:	8a 81       	ldd	r24, Y+2	; 0x02
 17c:	28 2f       	mov	r18, r24
 17e:	33 27       	eor	r19, r19
 180:	c9 01       	movw	r24, r18
 182:	82 0f       	add	r24, r18
 184:	93 1f       	adc	r25, r19
 186:	fc 01       	movw	r30, r24
 188:	ef 59       	subi	r30, 0x9F	; 159
 18a:	ff 4f       	sbci	r31, 0xFF	; 255
 18c:	80 81       	ld	r24, Z
 18e:	80 93 21 00 	sts	0x0021, r24

	//Set IIC Slave address, enable broadcast respond
	TWAR=(ucSlaveAddr<<1 | _BV(TWGCE));
 192:	89 81       	ldd	r24, Y+1	; 0x01
 194:	99 27       	eor	r25, r25
 196:	88 0f       	add	r24, r24
 198:	99 1f       	adc	r25, r25
 19a:	81 60       	ori	r24, 0x01	; 1
 19c:	80 93 22 00 	sts	0x0022, r24

	ucIICMode=IIC_MODE_SLAVE_RECEIVE;	//Default mode
 1a0:	81 e0       	ldi	r24, 0x01	; 1
 1a2:	80 93 7e 00 	sts	0x007E, r24
	ucIICError=IIC_ERROR_NOERROR;
 1a6:	10 92 94 00 	sts	0x0094, r1

	//Clear IIC buffer
	for(i=0;i<IIC_MAX_BUFFER_LEN;i++)
 1aa:	1b 82       	std	Y+3, r1	; 0x03
 1ac:	8b 81       	ldd	r24, Y+3	; 0x03
 1ae:	80 31       	cpi	r24, 0x10	; 16
 1b0:	80 f4       	brcc	.+32     	; 0x1d2
	{
		IIC_Buffer_In.IIC_BUFFER_UNION.ucData[i]=0;
 1b2:	8b 81       	ldd	r24, Y+3	; 0x03
 1b4:	99 27       	eor	r25, r25
 1b6:	fc 01       	movw	r30, r24
 1b8:	e0 58       	subi	r30, 0x80	; 128
 1ba:	ff 4f       	sbci	r31, 0xFF	; 255
 1bc:	10 82       	st	Z, r1
		IIC_Buffer_Out.IIC_BUFFER_UNION.ucData[i]=0;
 1be:	8b 81       	ldd	r24, Y+3	; 0x03
 1c0:	99 27       	eor	r25, r25
 1c2:	fc 01       	movw	r30, r24
 1c4:	eb 56       	subi	r30, 0x6B	; 107
 1c6:	ff 4f       	sbci	r31, 0xFF	; 255
 1c8:	10 82       	st	Z, r1
 1ca:	8b 81       	ldd	r24, Y+3	; 0x03
 1cc:	8f 5f       	subi	r24, 0xFF	; 255
 1ce:	8b 83       	std	Y+3, r24	; 0x03
 1d0:	ed cf       	rjmp	.-38     	; 0x1ac
	}

	//Clear buffer status
	IIC_Buffer_In.ucReadP=0;
 1d2:	10 92 91 00 	sts	0x0091, r1
	IIC_Buffer_In.ucWriteP=0;
 1d6:	10 92 90 00 	sts	0x0090, r1
	IIC_Buffer_In.ucIICBufferStatus.bEnAccess=0;	//In Buffer Disable Access
 1da:	80 91 93 00 	lds	r24, 0x0093
 1de:	8e 7f       	andi	r24, 0xFE	; 254
 1e0:	80 93 93 00 	sts	0x0093, r24

	IIC_Buffer_Out.ucReadP=0;
 1e4:	10 92 a6 00 	sts	0x00A6, r1
	IIC_Buffer_Out.ucWriteP=0;
 1e8:	10 92 a5 00 	sts	0x00A5, r1
	IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=1;//Out Buffer Enable Access	
 1ec:	80 91 a8 00 	lds	r24, 0x00A8
 1f0:	81 60       	ori	r24, 0x01	; 1
 1f2:	80 93 a8 00 	sts	0x00A8, r24

	// Clear TWINT , enabel TWI ack ,enable TWI port ,enable TWI Interrupt
	TWCR=(_BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE) );
 1f6:	85 ec       	ldi	r24, 0xC5	; 197
 1f8:	80 93 56 00 	sts	0x0056, r24
 1fc:	23 96       	adiw	r28, 0x03	; 3
 1fe:	0f b6       	in	r0, 0x3f	; 63
 200:	f8 94       	cli
 202:	de bf       	out	0x3e, r29	; 62
 204:	0f be       	out	0x3f, r0	; 63
 206:	cd bf       	out	0x3d, r28	; 61
 208:	df 91       	pop	r29
 20a:	cf 91       	pop	r28
 20c:	08 95       	ret

0000020e <__vector_17>:
}


///////////////////////////////////////////
//		IIC_handle
//	Function:	IIC Interrupt handler
//	Input:	
//		NONE
//	Output:
//		NONE
///////////////////////////////////////////
#ifdef ICC_AVR
void IIC_handler(void)
#endif
#ifdef GCC_AVR
SIGNAL(SIG_2WIRE_SERIAL)
#endif
{
 20e:	1f 92       	push	r1
 210:	0f 92       	push	r0
 212:	0f b6       	in	r0, 0x3f	; 63
 214:	0f 92       	push	r0
 216:	11 24       	eor	r1, r1
 218:	2f 93       	push	r18
 21a:	3f 93       	push	r19
 21c:	8f 93       	push	r24
 21e:	9f 93       	push	r25
 220:	af 93       	push	r26
 222:	bf 93       	push	r27
 224:	ef 93       	push	r30
 226:	ff 93       	push	r31
 228:	cf 93       	push	r28
 22a:	df 93       	push	r29
 22c:	cd b7       	in	r28, 0x3d	; 61
 22e:	de b7       	in	r29, 0x3e	; 62
 230:	23 97       	sbiw	r28, 0x03	; 3
 232:	de bf       	out	0x3e, r29	; 62
 234:	cd bf       	out	0x3d, r28	; 61
	U8 ucTwiStatus;

⌨️ 快捷键说明

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