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

📄 hwg.lss

📁 AVRMEG32编写的一个项目代码,里面包含一般应用的模块.
💻 LSS
📖 第 1 页 / 共 5 页
字号:
000016c8 <.do_copy_data_loop>:
    16c8:	05 90       	lpm	r0, Z+
    16ca:	0d 92       	st	X+, r0

000016cc <.do_copy_data_start>:
    16cc:	ae 3d       	cpi	r26, 0xDE	; 222
    16ce:	b1 07       	cpc	r27, r17
    16d0:	d9 f7       	brne	.-10     	; 0x16c8 <.do_copy_data_loop>

000016d2 <__do_clear_bss>:
    16d2:	16 e0       	ldi	r17, 0x06	; 6
    16d4:	ae ed       	ldi	r26, 0xDE	; 222
    16d6:	b1 e0       	ldi	r27, 0x01	; 1
    16d8:	01 c0       	rjmp	.+2      	; 0x16dc <.do_clear_bss_start>

000016da <.do_clear_bss_loop>:
    16da:	1d 92       	st	X+, r1

000016dc <.do_clear_bss_start>:
    16dc:	a7 38       	cpi	r26, 0x87	; 135
    16de:	b1 07       	cpc	r27, r17
    16e0:	e1 f7       	brne	.-8      	; 0x16da <.do_clear_bss_loop>
    16e2:	0c 94 70 19 	jmp	0x32e0 <main>

000016e6 <__bad_interrupt>:
    16e6:	0c 94 00 00 	jmp	0x0 <__vectors>

000016ea <uartSetBaudRate>:
}

// set the uart baud rate
void uartSetBaudRate(u32 baudrate)
{
    16ea:	dc 01       	movw	r26, r24
    16ec:	cb 01       	movw	r24, r22
	// calculate division factor for requested baud rate, and set it
	u16 bauddiv = ((F_CPU+(baudrate*8L))/(baudrate*16L)-1);// 计算值为整数
    16ee:	73 e0       	ldi	r23, 0x03	; 3
    16f0:	88 0f       	add	r24, r24
    16f2:	99 1f       	adc	r25, r25
    16f4:	aa 1f       	adc	r26, r26
    16f6:	bb 1f       	adc	r27, r27
    16f8:	7a 95       	dec	r23
    16fa:	d1 f7       	brne	.-12     	; 0x16f0 <uartSetBaudRate+0x6>
    16fc:	9c 01       	movw	r18, r24
    16fe:	ad 01       	movw	r20, r26
    1700:	22 0f       	add	r18, r18
    1702:	33 1f       	adc	r19, r19
    1704:	44 1f       	adc	r20, r20
    1706:	55 1f       	adc	r21, r21
    1708:	80 50       	subi	r24, 0x00	; 0
    170a:	90 48       	sbci	r25, 0x80	; 128
    170c:	af 48       	sbci	r26, 0x8F	; 143
    170e:	bf 4f       	sbci	r27, 0xFF	; 255
    1710:	bc 01       	movw	r22, r24
    1712:	cd 01       	movw	r24, r26
    1714:	0e 94 80 26 	call	0x4d00 <__udivmodsi4>
    1718:	da 01       	movw	r26, r20
    171a:	c9 01       	movw	r24, r18
    171c:	01 97       	sbiw	r24, 0x01	; 1
	outb(UBRRL, bauddiv);
    171e:	89 b9       	out	0x09, r24	; 9
	#ifdef UBRRH
	outb(UBRRH, bauddiv>>8);
    1720:	89 2f       	mov	r24, r25
    1722:	99 27       	eor	r25, r25
    1724:	80 bd       	out	0x20, r24	; 32
    1726:	08 95       	ret

00001728 <uartInit>:
    1728:	88 ed       	ldi	r24, 0xD8	; 216
    172a:	8a b9       	out	0x0a, r24	; 10
    172c:	86 e8       	ldi	r24, 0x86	; 134
    172e:	80 bd       	out	0x20, r24	; 32
    1730:	60 e8       	ldi	r22, 0x80	; 128
    1732:	75 e2       	ldi	r23, 0x25	; 37
    1734:	80 e0       	ldi	r24, 0x00	; 0
    1736:	90 e0       	ldi	r25, 0x00	; 0
    1738:	0e 94 75 0b 	call	0x16ea <uartSetBaudRate>
    173c:	8f ef       	ldi	r24, 0xFF	; 255
    173e:	80 93 18 04 	sts	0x0418, r24
    1742:	78 94       	sei
    1744:	08 95       	ret

00001746 <uartInitBuffers>:
    1746:	40 ea       	ldi	r20, 0xA0	; 160
    1748:	50 e0       	ldi	r21, 0x00	; 0
    174a:	6e ed       	ldi	r22, 0xDE	; 222
    174c:	71 e0       	ldi	r23, 0x01	; 1
    174e:	89 e1       	ldi	r24, 0x19	; 25
    1750:	94 e0       	ldi	r25, 0x04	; 4
    1752:	0e 94 e3 0d 	call	0x1bc6 <bufferInit>
    1756:	40 e1       	ldi	r20, 0x10	; 16
    1758:	50 e0       	ldi	r21, 0x00	; 0
    175a:	6e e7       	ldi	r22, 0x7E	; 126
    175c:	72 e0       	ldi	r23, 0x02	; 2
    175e:	82 e2       	ldi	r24, 0x22	; 34
    1760:	94 e0       	ldi	r25, 0x04	; 4
    1762:	0e 94 e3 0d 	call	0x1bc6 <bufferInit>
    1766:	08 95       	ret

00001768 <uartSetRxHandler>:
    1768:	90 93 8f 02 	sts	0x028F, r25
    176c:	80 93 8e 02 	sts	0x028E, r24
    1770:	08 95       	ret

00001772 <uartGetRxBuffer>:
	#endif
}

// returns the receive buffer structure
cBuffer* uartGetRxBuffer(void)
{
	// return rx buffer pointer
	return &uartRxBuffer;
}
    1772:	89 e1       	ldi	r24, 0x19	; 25
    1774:	94 e0       	ldi	r25, 0x04	; 4
    1776:	08 95       	ret

00001778 <uartGetTxBuffer>:

// returns the transmit buffer structure 
cBuffer* uartGetTxBuffer(void)
{
	// return tx buffer pointer
	return &uartTxBuffer;
}
    1778:	82 e2       	ldi	r24, 0x22	; 34
    177a:	94 e0       	ldi	r25, 0x04	; 4
    177c:	08 95       	ret

0000177e <uartSendByte>:

// transmits a byte over the uart
void uartSendByte(u08 txData)
{
    177e:	98 2f       	mov	r25, r24
	// wait for the transmitter to be ready
	while(!uartReadyTx);
    1780:	80 91 18 04 	lds	r24, 0x0418
    1784:	88 23       	and	r24, r24
    1786:	e1 f3       	breq	.-8      	; 0x1780 <uartSendByte+0x2>
	// send byte
	outb(UDR, txData);
    1788:	9c b9       	out	0x0c, r25	; 12
	// set ready state to FALSE
 
	uartReadyTx = FALSE;
    178a:	10 92 18 04 	sts	0x0418, r1
    178e:	08 95       	ret

00001790 <uartReceiveByte>:
}

// gets a single byte from the uart receive buffer (getchar-style)
int uartGetByte(void)
{
	u08 c;
	if(uartReceiveByte(&c))
		return c;
	else
		return -1;
}

// gets a byte (if available) from the uart receive buffer
u08 uartReceiveByte(u08* rxData)
{
    1790:	cf 93       	push	r28
    1792:	df 93       	push	r29
    1794:	ec 01       	movw	r28, r24
	// make sure we have a receive buffer
	if(uartRxBuffer.size)
    1796:	80 91 1b 04 	lds	r24, 0x041B
    179a:	90 91 1c 04 	lds	r25, 0x041C
    179e:	00 97       	sbiw	r24, 0x00	; 0
    17a0:	69 f0       	breq	.+26     	; 0x17bc <uartReceiveByte+0x2c>
	{
		// make sure we have data
		if(uartRxBuffer.datalength)
    17a2:	80 91 1d 04 	lds	r24, 0x041D
    17a6:	90 91 1e 04 	lds	r25, 0x041E
    17aa:	00 97       	sbiw	r24, 0x00	; 0
    17ac:	39 f0       	breq	.+14     	; 0x17bc <uartReceiveByte+0x2c>
		{
			// get byte from beginning of buffer
			*rxData = bufferGetFromFront(&uartRxBuffer);
    17ae:	89 e1       	ldi	r24, 0x19	; 25
    17b0:	94 e0       	ldi	r25, 0x04	; 4
    17b2:	0e 94 ed 0d 	call	0x1bda <bufferGetFromFront>
    17b6:	88 83       	st	Y, r24
			return TRUE;
    17b8:	8f ef       	ldi	r24, 0xFF	; 255
    17ba:	90 e0       	ldi	r25, 0x00	; 0
    17bc:	df 91       	pop	r29
    17be:	cf 91       	pop	r28
    17c0:	08 95       	ret

000017c2 <uartGetByte>:
    17c2:	cf 93       	push	r28
    17c4:	df 93       	push	r29
    17c6:	cd b7       	in	r28, 0x3d	; 61
    17c8:	de b7       	in	r29, 0x3e	; 62
    17ca:	21 97       	sbiw	r28, 0x01	; 1
    17cc:	0f b6       	in	r0, 0x3f	; 63
    17ce:	f8 94       	cli
    17d0:	de bf       	out	0x3e, r29	; 62
    17d2:	0f be       	out	0x3f, r0	; 63
    17d4:	cd bf       	out	0x3d, r28	; 61
    17d6:	ce 01       	movw	r24, r28
    17d8:	01 96       	adiw	r24, 0x01	; 1
    17da:	0e 94 c8 0b 	call	0x1790 <uartReceiveByte>
    17de:	88 23       	and	r24, r24
    17e0:	19 f0       	breq	.+6      	; 0x17e8 <uartGetByte+0x26>
    17e2:	89 81       	ldd	r24, Y+1	; 0x01
    17e4:	99 27       	eor	r25, r25
    17e6:	02 c0       	rjmp	.+4      	; 0x17ec <uartGetByte+0x2a>
    17e8:	8f ef       	ldi	r24, 0xFF	; 255
    17ea:	9f ef       	ldi	r25, 0xFF	; 255
    17ec:	21 96       	adiw	r28, 0x01	; 1
    17ee:	0f b6       	in	r0, 0x3f	; 63
    17f0:	f8 94       	cli
    17f2:	de bf       	out	0x3e, r29	; 62
    17f4:	0f be       	out	0x3f, r0	; 63
    17f6:	cd bf       	out	0x3d, r28	; 61
    17f8:	df 91       	pop	r29
    17fa:	cf 91       	pop	r28
    17fc:	08 95       	ret

000017fe <uartFlushReceiveBuffer>:
		}
		else
		{
			// no data
			return FALSE;
		}
	}
	else
	{
		// no buffer
		return FALSE;
	}
}

// flush all data out of the receive buffer
void uartFlushReceiveBuffer(void)
{
	// flush all data from receive buffer
	//bufferFlush(&uartRxBuffer);
	// same effect as above
	uartRxBuffer.datalength = 0;
    17fe:	10 92 1e 04 	sts	0x041E, r1
    1802:	10 92 1d 04 	sts	0x041D, r1
    1806:	08 95       	ret

00001808 <uartReceiveBufferIsEmpty>:
}

// return true if uart receive buffer is empty
u08 uartReceiveBufferIsEmpty(void)
{
	if(uartRxBuffer.datalength == 0)
    1808:	80 91 1d 04 	lds	r24, 0x041D
    180c:	90 91 1e 04 	lds	r25, 0x041E
    1810:	89 2b       	or	r24, r25
    1812:	19 f4       	brne	.+6      	; 0x181a <uartReceiveBufferIsEmpty+0x12>
	{
		return TRUE;
    1814:	8f ef       	ldi	r24, 0xFF	; 255
    1816:	90 e0       	ldi	r25, 0x00	; 0
    1818:	08 95       	ret
	}
	else
	{
		return FALSE;
    181a:	80 e0       	ldi	r24, 0x00	; 0
    181c:	90 e0       	ldi	r25, 0x00	; 0
	}
}
    181e:	08 95       	ret

00001820 <uartAddToTxBuffer>:

// add byte to end of uart Tx buffer
u08 uartAddToTxBuffer(u08 data)
{
	// add data byte to the end of the tx buffer
	return bufferAddToEnd(&uartTxBuffer, data);
    1820:	68 2f       	mov	r22, r24
    1822:	82 e2       	ldi	r24, 0x22	; 34
    1824:	94 e0       	ldi	r25, 0x04	; 4
    1826:	0e 94 46 0e 	call	0x1c8c <bufferAddToEnd>
}
    182a:	99 27       	eor	r25, r25
    182c:	08 95       	ret

0000182e <uartSendTxBuffer>:

// start transmission of the current uart Tx buffer contents
void uartSendTxBuffer(void)
{
	// turn on buffered transmit
	uartBufferedTx = TRUE;
    182e:	8f ef       	ldi	r24, 0xFF	; 255
    1830:	80 93 21 04 	sts	0x0421, r24
	// send the first byte to get things going by interrupts
	uartSendByte(bufferGetFromFront(&uartTxBuffer));
    1834:	82 e2       	ldi	r24, 0x22	; 34

⌨️ 快捷键说明

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