본문 바로가기
공부,일/atmega328P

atmega 328p USART (2) 레지스터

by fromnothing1 2021. 8. 2.

19.10.1 UDRn – USART I/O Data Register n (0xC6)

USART 는 특이하게 송신 , 수신 하는 데이터 레지스터를 공유한다. 정확히 말해서는 각각의 

transmit data buffer shift register , receive data buffer shift registers 가지고 있지만 직접 접근 할 수 는 없다. 

UDRn 레지스터를 통해서 각가의 레지스터에 접근 가능한데 

 

UDREn flag 가 set 되어 있을때 UDRn 레지스터에 데이터를 입력하고 ,transmit data buffer shift register 가 비어 있다면 ,데이터를 shift register 에 적는다  그리고 바로 TxDnb pin 으로 전송한다. 

 

19.10.2 UCSRnA – USART Control and Status Register n A  (0xC0)

• Bit 7 – RXCn: USART Receive Complete

 

데이터를 다 받고 나면 1로  set ,  cpu 가 이를 읽어서 수신 버퍼가 비면 , 0 으로 clear 

또는  receive complete interrupt 를 일으키면 0 으로 clear 

 

• Bit 6 – TXCn: USART Transmit Complete

 

the transmit shift register 가  모든 bit 를 shift 하고 , UDRn 레지스터에 아무 데이터가 없다면 1로 set 

이는 transmit complete interrupt 가 발생하면 자동으로  clear 된다. 

 

또는 이  bit 를 1로 적으면  clear 된다. 


• Bit 5 – UDREn: USART Data Register Empty

 

transmit buffer (UDRn) 가 데이터를 받을 준비가 되면 set 된다. 

송신 버퍼에 새로운 데이터를  쓰거나 ,  register empty interrupt 를 실행하면 0 으로  clear 된다. 

시스템 reset 시 이 비트는 1이 디폴트 값이다.

 

• Bit 4 – FEn: Frame Error

frame error 의 발생여부를 알려주는  bit 이다.

수신데이터의 첫번째 stop bit가 0 이면 1로 set 된다. 

이 플랙은 UDRn 을 읽거나  다음 데이터의 stop bit 가 1이면 clear  된다. 

 

UCSRnA 레지스터를 라이트하면  항상 clear된다. 

 

• Bit 3 – DORn: Data OverRun

Data OverRun 에러를 감지하는 bit 이다. overRun 에러는 수신 버퍼에 아직 읽지 않은 데이터가 있을때 

수신 시프트 레지스터에 새로운 데이터가 들어올때 1로  set  된다. 

 

이 플랙은 UDRn 을 읽으면 0으로 clear  된다.

UCSRnA 레지스터를 라이트하면  항상 clear된다. 

 

• Bit 2 – UPEn: USART Parity Error

 

parity error 가 발생했을때 1로 set 

 

이 플랙은 UDRn 을 읽으면 0으로 clear  된다.

UCSRnA 레지스터를 라이트하면  항상 clear된다. 



• Bit 1 – U2Xn: Double the USART Transmission Speed

 

비동기 모드에서 2배속 모드를 적용하기 위한  bit  

1  로 set 되면 클럭 분주비를 16 에서 8로 낮춰서 전송 속도를 2배로 높인다.


• Bit 0 – MPCMn: Multi-processor Communication Mode

 

멀티 프로세싱 모드로 전환하기 위해서 사용 

멀티 프로세싱모드는 1대1통신이아닌 1대  M 통신으로 각각의 주소를 가지고 있고 , 내가 원하는 주소의 장비와 통신하는 방식이다.

19.10.3 UCSRnB – USART Control and Status Register n B (0xC1)

• Bit 7 – RXCIEn: RX Complete Interrupt Enable n

 

the global interrupt flag 가 1이고,  RXCn flag 이 1일때 
RX Complete Interrupt  가 발생하도록 해준다.


• Bit 6 – TXCIEn: TX Complete Interrupt Enable n

the global interrupt flag 가 1이고,  TXCn flag 이 1일때 
TX Complete Interrupt 가 발생하도록 해준다.


• Bit 5 – UDRIEn: USART Data Register Empty Interrupt Enable n

 

the global interrupt flag 가 1이고,  UDREn 이 1일때 
Data Register Empty Interrupt가 발생하도록 해준다.

 

• Bit 4 – RXENn: Receiver Enable n

USART  가 수신부로 동작하게 해준다. TxDn pin 이 병렬 포트가 아니라 송신용 핀으로 동작하게 해준다. 

또한 FEn, DORn, and UPEn flags 가 동작하도록 하용한다. 


• Bit 3 – TXENn: Transmitter Enable n

 

USART  가 송신부로 동작하게 해준다. RxDn pin 이 병렬 포트가 아니라 수신용 핀으로 동작하게 해준다. 

또한 FEn, DORn, and UPEn flags 가 동작하도록 하용한다. 

만약 송신 중간에 이  bit 가 0으로  clear   되더라도 송신을 완료한후 효력을 발휘 한다. 
• Bit 2 – UCSZn2: Character Size n

전송할 데이터의 크기를 설정


• Bit 1 – RXB8n: Receive Data Bit 8 n

전송 문자가 9 개로 설정된경우 8번째  bit 를 저장하는  bit 이다. 

항상  UDRn  레지스터보다 먼저 읽어져야 한다. 


• Bit 0 – TXB8n: Transmit Data Bit 8 n

 

전송 문자가 9로 설정될 경우 8번째  bit를 저장하는  bit   이다. 

항상   UDRn  레지스터보다 먼저 써져야 한다.

19.10.4 UCSRnC – USART Control and Status Register n C (0xC2)

 

7~3 bit 

2~0 bit

• Bit 0 – UCPOLn: Clock Polarity

동기 전송 모드에서만 효력이 있으며 ,송,수신이  XCKn  클럭의 상승 , 하강 엣지에서  sampling  할지 정한다.

19.10.5 UBRRnL(0xC4) and UBRRnH(0xC5) – USART Baud Rate Registers

 

 

송수신 보더레이트를 설정하는 레지스터 이다. (좀 범위가 넓은 분주기이다.)

16 bit 레지스터는 항상 H   를 먼저 라이트하고 L 을 라이트 한다. 

 

사실 위의 레지스터로 정확한 보러 레이트를 얻기는 힘들다 ( 위의 레지스터 값은 정수 값으로 정확한 보러 레이트를 얻고 싶다면 실수 범위를 다뤄야함 ) 

이렇게 실수를 다룰 수 없기 때문에 생기는 오류가 존재 하는데 밑의 표는이 오류를 표로 정리해 놓았다.

 

아두이노는 16MHz 임으로 위의 표를 적용하면 된다.

'공부,일 > atmega328P' 카테고리의 다른 글

atmega328P TWI(I2C) 통신 (1) 개념 및 레지스터  (0) 2021.08.05
atmega 328p USART (3) 실습  (0) 2021.08.02
atmega 328p USART (1) 개념 및 다이어그램  (0) 2021.08.01
질문  (0) 2021.07.30
atmega 328p SPI(2) 실습  (0) 2021.07.29

댓글