Mega (UART), / (USART) . (. 2.28) , .
. 2.28.
UART
:
( )
.
5, 6, 7, 8 9 1 2 -.
(/).
.
.
- .
, .
.
.
ATmega128 : 0 1. . 0 1 -. ATmega103 1 , UBRR0H UCRS0C. , ATmega103 0.
: , . . , ( ) . XCK ( ) . , , , . - . , .. . . , , (UDR). , , (), .
. . : , , . UMSEL (UCSRC) . ( ) U2X UCSRA. (UMSEL=1) XCK (DDR_XCK) ( ) ( ). XCK .
|
|
- . .
(UBRR) . (fosc) UBRR UBRRL. . (= fosc/(UBRR+1)). 2, 8 16 . . , 2, 8 16 , UMSEL, U2X DDR_XCK.
. 2.54 ( ) UBRR .
2.54.
UBRR | ||
(U2X=0) | ||
(U2X=1) | ||
. 2.54 :
- BAUD - , 9600 ( , );
- UBRR - UBRRH UBRRL, (0 4095);
- fOSC - .
(U2X). , U2X UCSRA. . .
16 8, , . , 16 8 , , . - .
. .
XCK . , . CPU , , XCK : .
|
|
, fosc , - .
. (UMSEL=1), XCK ( ) ( ). . , ( RxD) XCK, , ( TxD).
UCPOL UCRSC , XCK , . UCPOL=0 XCK, XCK. , UCPOL, XCK, XCK.
. , ( -), . 30 :
1 -
5, 6, 7, 8 9
, ,
1 2 -
-, , . ( 9), . , , -. ( ).
2.29 . .
- St - - .
- 08 - .
- P - : .
- Sp1,Sp2 - - .
- IDLE - , RxD TxD. .
, , UCSZ2:0, UPM1:0 USBS UCSRB UCSRC. . , , .
(UCSZ2:0) . (UPM1:0) / : , . - - (USBS). -. FE , - 0.
. Ȼ . , . :
,
P - ; P - ;
dn - n- .
, -.
. . UCSRA, UCSRB UCSR, UBBRH:UBBRL (. ).
|
|
. , . , , (.. ).
, , , , . TXC , RXC - . , TXC ( UDR).
. , ( ) . . , r17:r16.
USART_Init:; out UBRRH, r17out UBRRL, r16; ldi r16, (1<<RXEN)|(1<<TXEN)out UCSRB,r16; : 8 , 2-ldi r16, (1<<USBS)|(3<<UCSZ0)out UCSRC,r16ret
, , , , .. , , , -.
- . (TXEN) UCSRB. , TxD . , - . , XCK - .
58 . . CPU UDR, -. , . ( ) - . , , , U2X XCK .
, (UDRE). 8 , UDR . . , R16 .
|
|
USART_Transmit:; sbis UCSRA,UDRErjmp USART_Transmit; (r16) , out UDR,r16 ret
UDRE.
9 . 9 (UCSZ=7), 9- TXB8 UCSRB, UDR. 9 . , R17:R16.
USART_Transmit:; sbis UCSRA,UDRErjmp USART_Transmit; 9- r17 TXB8cbi UCSRB,TXB8sbrc r17,0sbi UCSRB,TXB8; (r16) , out UDR,r16ret
9- .
. , : (UDRE) (TXC). . (UDRE) . , , . UCSRA.
1 (UDRIE) UCSRB, , UDRE ( , ). UDRE UDR. , UDR UDRE . .
(TXC) , . TXC 1. TXC (, RS485), , .
(TXCIE=1) UCSRB, , TXC ( , ). TXC, .. .
. . (UPM1 = 1), - .
. TXEN , , .. . TxD.
- . , 1 (RXEN) UCSRB. RxD : . , . , XCK .
58 . -. - XCK . - . -, .. , . - UDR.
|
|
, (RXC). 8, UDR . .
USART_Receive:; sbis UCSRA, RXCrjmp USART_Receive; in r16, UDRret
, RXC.
9 . 9 (UCSZ=7), UDR 9- RXB8 UCSRB. FE, DOR UPE: UCSRA, UDR. , , , UDR FIFO , , TXB8, FE, DOR UPE . 9 .
USART_Receive:; sbis UCSRA, RXCrjmp USART_Receive; 9- in r18, UCSRAin r17, UCSRBin r16, UDR; , andi r18,(1<<FE)|(1<<DOR)|(1<<UPE)breq USART_ReceiveNoErrorldi r17, HIGH(-1)ldi r16, LOW(-1)USART_ReceiveNoError:; 9- lsr r17andi r17, 0x01ret
- - . , .. , .
. , .
(RXC) . 1, , 0, (.. - ). (RXEN=0), RXC .
(RXCIE) UCSRB, RXC ( , ). , UDR, RXC. .
. : () FE, DOR UPE. UCSRA. , , . , , UCSRA (UDR), .. UDR . . , UCSRA . .
() FE - . FE 0, - , 1, , .. 0. , . FE USBS UCSRC, .. - . 0 UCSRA.
(DOR) - . , ( ), -. DOR , UDR. 0 UCSRA. DOR , .
(UPE) , . , . 0 UCSRA.
. UPM1. : UPM0. . -. UPE , . UPE , , , (UPM1 = 1). (UDR).
. , . , . (.. RXEN=0) RxD. FIFO , , .
. FIFO , .. . . , , , UDR RXC. , .
USART_Flush:sbis UCSRA, RXCretin r16, UDRrjmp USART_Flush
. . . RxD. () , . , ( ).
. . . 2.30 - . 16 8 . . (U2X=1). , 0, RxD (.. ).
( ) () RxD, -. , 1 . 8, 9, 10 4, 5, 6 - ( ). ( ), - , 1 0. -, , . -.
. 2.30. - U2X=0 U2X=1
. - . 16 8 . . 2.31 i- . , .
. 2.31. U2X=0 U2X=1
, . . : , 1. , 0. , , RxD. , .. -. , - , . 2.32 - - .
. 2.32. - -
, -, . - , FE.
1 0 - , , . , () 2.32. ( ). (C) -. - ( ).
- UDRn
RXBn[7:0] | ||||||||
TXBn[7:0] | ||||||||
W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R |
n -, n UDRn. UDRn, TXBn. , UDRn RXBn.
5-, 6- 7- , .
, UDREn UCSRAn. UDRn UDREn n. , . TxDn. FIFO ( - ). FIFO , . , -- (SBI CBI). (SBIC SBIS), .. FIFO.
UCSRnA.
RXCn | TXCn | UDREn | FEn | DORn | UPEn | U2Xn | MPCMn | |
W/R | R | W/R | R | R | R | R | W/R | W/R |
7 RXCn. . , , (.., ). , , , RXCn . RXCn (. RXCIEn).
6 TXCn. . , UDRn . TXCn 1 . TXCn (. TXCIEn).
5 UDREn. . UDREn UDRn . UDREn=1, , , . UDREn (. UDRIEn). UDREn , .
4 FEn. . , , , . - . (UDRn). FEn , - . UCSRnA 0.
3 DORn. . , . , ( ), , -. (UDRn). UCSRnA . 0.
2 UPEn. . , , (UPMn1 = 1). (UDRn). UCSRnA 0.
1 - U2Xn. . . 0. 1 16 8, .
0 MPCMn. . . MPCMn 1, , . MPCMn .
B n - UCSRnB
RXCIEn | TXCIEn | UDRIEn | RXENn | TXENn | UCSZn2 | RXB8n | TXB8n | |
W/R | W/R | W/R | W/R | W/R | W/R | W/R | . | W/R |
7 RXCIEn. . 1 RXCn. n , RXCIEn=1 I=1 ( SREG), RXCn UCSRnA.
6 TXCIE. . 1 TXCn. n , TXCIEn=1 I=1 ( SREG), TXCn UCSRnA.
5 UDRIEn. . UDREn. , UDRIEn=1, I=1 ( SREG) UDREn UCSRnA.
4 RXENn. . 1 n. , , RxDn. , FEn, DORn UPEn.
3 TXENn. . 1 n. , TxDn. ( . 0 TXENn) , .. . TxDn -.
2 - UCSZn2. . UCSZn2 UCSZn1:0 UCSRnC , , .
1 - RXB8n. 8- . RXB8n 9- 9- . , 8 UDRn.
0 - TXB8n. 8- . TXB8n 9- 9- . , UDRn.
- UCSRnC
- | UMSELn | UPMn1 | UPMn0 | USBSn | UCSZn1 | UCSZn0 | UCPOLn | |
W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R |
. ATmega103.
7 - . . UCSRnC . 0.
6 UMSELn. . (. 2.55).
2.55. UMSELn
UMSELn | |
5,4 UPMn 1,0. . . . , UPEn UCSRnA (. 2.56).
2.56. UPMn
UPMn1 | UPMn0 | |
() | ||
3 USBSn. -. . (. 2.57).
2.57. USBSn
USBSn | - |
1 | |
2 |
2,1 - UCSZn1,0. . UCSZn1,0 UCSZn2 UCSRnB , , (. 2.58).
2.58. UCSZn
UCSZn2 | UCSZn1 | UCSZn0 | |
5 | |||
6 | |||
7 | |||
8 | |||
9 |
0 UCPOLn. . . , 0. UCPOLn (XCKn) (. 2.59).
2.59. UCPOLn
UCPOLn | TxDn | RxDn |
XCKn | XCKn | |
XCKn | XCKn |
- UBRRnL UBRRnH
UBRRnH | - | - | - | - | UBRRn[11:8] | |||
UBRRnL | UBRRn[7:0] | |||||||
W/R | R | R | R | R | W/R | W/R | W/R | W/R |
W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | |
UBRRnH ATmega103
15:12. .
11:0 - UBRRn11:0. . UBRR - 12- , . UBRRnH 4 , UBRRnL 8 n. , . UBRRnL .