📄 hwg.lss
字号:
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 + -