📄 uartintr.lis
字号:
0098 .dbline 70
0098 ; UART_TxTail = tmptail; /* store new index */
0098 00930000 sts _UART_TxTail,R16
009C .dbline 71
009C ; UDR = UART_TxBuf[tmptail]; /* start transmition */
009C 80E0 ldi R24,<_UART_TxBuf
009E 90E0 ldi R25,>_UART_TxBuf
00A0 E02F mov R30,R16
00A2 FF27 clr R31
00A4 E80F add R30,R24
00A6 F91F adc R31,R25
00A8 2080 ldd R2,z+0
00AA 2CB8 out 0xc,R2
00AC .dbline 72
00AC ; }
00AC 01C0 xjmp L7
00AE L6:
00AE .dbline 74
00AE .dbline 75
00AE 5598 cbi 0xa,5
00B0 .dbline 76
00B0 L7:
00B0 .dbline -2
00B0 L5:
00B0 2990 ld R2,y+
00B2 2FBE out 0x3f,R2
00B4 F991 ld R31,y+
00B6 E991 ld R30,y+
00B8 9991 ld R25,y+
00BA 8991 ld R24,y+
00BC 1991 ld R17,y+
00BE 0991 ld R16,y+
00C0 3990 ld R3,y+
00C2 2990 ld R2,y+
00C4 .dbline 0 ; func end
00C4 1895 reti
00C6 .dbsym r tmptail 16 c
00C6 .dbend
00C6 .dbfunc e ReceiveByte _ReceiveByte fc
00C6 ; tmptail -> R16
.even
00C6 _ReceiveByte::
00C6 .dbline -1
00C6 .dbline 81
00C6 ; else
00C6 ; {
00C6 ; UCSRB &= ~(1<<UDRIE); /* disable UDRE interrupt */
00C6 ; }
00C6 ; }
00C6 ;
00C6 ; /* Read and write functions */
00C6 ; unsigned char ReceiveByte( void )
00C6 ; {
00C6 L9:
00C6 .dbline 85
00C6 L10:
00C6 .dbline 84
00C6 ; unsigned char tmptail;
00C6 ;
00C6 ; while ( UART_RxHead == UART_RxTail ) /* wait for incomming data */
00C6 20908200 lds R2,_UART_RxTail
00CA 30908300 lds R3,_UART_RxHead
00CE 3214 cp R3,R2
00D0 D1F3 breq L9
00D2 .dbline 86
00D2 ; ;
00D2 ; tmptail = ( UART_RxTail + 1 ) & UART_RX_BUFFER_MASK;/* calculate buffer index */
00D2 00918200 lds R16,_UART_RxTail
00D6 0F5F subi R16,255 ; addi 1
00D8 0F77 andi R16,127
00DA .dbline 87
00DA ; UART_RxTail = tmptail; /* store new index */
00DA 00938200 sts _UART_RxTail,R16
00DE .dbline 88
00DE ; return UART_RxBuf[tmptail]; /* return data */
00DE 80E0 ldi R24,<_UART_RxBuf
00E0 90E0 ldi R25,>_UART_RxBuf
00E2 E02F mov R30,R16
00E4 FF27 clr R31
00E6 E80F add R30,R24
00E8 F91F adc R31,R25
00EA 0081 ldd R16,z+0
00EC .dbline -2
00EC L8:
00EC .dbline 0 ; func end
00EC 0895 ret
00EE .dbsym r tmptail 16 c
00EE .dbend
00EE .dbfunc e TransmitByte _TransmitByte fV
00EE ; tmphead -> R10
00EE ; data -> R16
.even
00EE _TransmitByte::
00EE 0E940000 xcall push_gset3x
00F2 .dbline -1
00F2 .dbline 92
00F2 ; }
00F2 ;
00F2 ; void TransmitByte( unsigned char data )
00F2 ; {
00F2 .dbline 95
00F2 ; unsigned char tmphead;
00F2 ; /* calculate buffer index */
00F2 ; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK;
00F2 80910100 lds R24,_UART_TxHead
00F6 8F5F subi R24,255 ; addi 1
00F8 8F77 andi R24,127
00FA A82E mov R10,R24
00FC L13:
00FC .dbline 99
00FC L14:
00FC .dbline 98
00FC ; /* wait for free space in buffer */
00FC ;
00FC ; while ( tmphead == UART_TxTail )
00FC 20900000 lds R2,_UART_TxTail
0100 A214 cp R10,R2
0102 E1F3 breq L13
0104 .dbline 100
0104 ; ;
0104 ; UART_TxBuf[tmphead] = data; /* store data in buffer */
0104 80E0 ldi R24,<_UART_TxBuf
0106 90E0 ldi R25,>_UART_TxBuf
0108 EA2D mov R30,R10
010A FF27 clr R31
010C E80F add R30,R24
010E F91F adc R31,R25
0110 0083 std z+0,R16
0112 .dbline 101
0112 ; UART_TxHead = tmphead; /* store new index */
0112 A0920100 sts _UART_TxHead,R10
0116 .dbline 102
0116 ; UCSRB |= (1<<UDRIE); /* enable UDRE interrupt */
0116 559A sbi 0xa,5
0118 .dbline -2
0118 L12:
0118 0E940000 xcall pop_gset3x
011C .dbline 0 ; func end
011C 0895 ret
011E .dbsym r tmphead 10 c
011E .dbsym r data 16 c
011E .dbend
011E .dbfunc e DataInReceiveBuffer _DataInReceiveBuffer fc
.even
011E _DataInReceiveBuffer::
011E .dbline -1
011E .dbline 106
011E ; }
011E ;
011E ; unsigned char DataInReceiveBuffer( void )
011E ; {
011E .dbline 107
011E ; return ( UART_RxHead != UART_RxTail );
011E 20908200 lds R2,_UART_RxTail
0122 30908300 lds R3,_UART_RxHead
0126 3214 cp R3,R2
0128 19F0 breq L17
012A 01E0 ldi R16,1
012C 10E0 ldi R17,0
012E 02C0 xjmp L18
0130 L17:
0130 0027 clr R16
0132 1127 clr R17
0134 L18:
0134 .dbline -2
0134 L16:
0134 .dbline 0 ; func end
0134 0895 ret
0136 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\avrwork3_pt100\uartintr.c
0000 _UART_TxTail:
0000 .blkb 1
0001 .dbsym s UART_TxTail _UART_TxTail c
0001 _UART_TxHead:
0001 .blkb 1
0002 .dbsym s UART_TxHead _UART_TxHead c
0002 _UART_TxBuf:
0002 .blkb 128
0082 .dbsym s UART_TxBuf _UART_TxBuf A[128:128]c
0082 _UART_RxTail:
0082 .blkb 1
0083 .dbsym s UART_RxTail _UART_RxTail c
0083 _UART_RxHead:
0083 .blkb 1
0084 .dbsym s UART_RxHead _UART_RxHead c
0084 _UART_RxBuf:
0084 .blkb 128
0104 .dbsym s UART_RxBuf _UART_RxBuf A[128:128]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -