MEC382 마이크로프로세서응용및실습 USART Serial Communication Jee-Hwan Ryu School of Mechanical Engineering 통신방법 병렬통신 고속데이터전송이필요한곳에서이루어짐 여러개의라인에서동시에이루어짐 직렬통신 한라인에서이루어짐 데이터의송수신속도가느리다 라인수적고멀리까지통신 동기식, 비동기식있음 동기식 : 기준클럭인동기클럭라인과데이터송 / 수신에필요한라인이있다. 동기클럭에동기해서데이터를순차적으로송 / 수신 높은전송효율을필요로하고선로에잡음이있거나장거리전송에유리, 대량의데이터를고속으로전송하는데사용 비동기식 : 동기클럭없이데이터의전송속도가동기를대신 약속된 Baud rate(1초당데이터를몇개씩보내느냐 ) 에따라서양쪽의송 / 수신기는데이터주고받는다 제어비트 (start bit, stop bit) 를사용해데이터의시작과끝을알림
동기식송신의원리 동기식수신의원리
비동기식방법 USART 직렬통신포트개요 Universal Synchronous and Asynchronous Receiver and Transmitter USART0 및 USART1 2개의직렬포트를가짐 동기및비동기전송모드에서전이중통신이가능 전이중통신방식 (full-duplex) 이란송신을하면서동시에수신도할수있는방식을말한다. 멀티프로세서통신모드동작가능 높은정밀도의 Baud Rate Generator 내장 동기식전송모드에서마스터로동작하는경우는내부클럭사용하여전송속도결정, 슬레이브로동작하는경우 XCKn단자로입력되는클럭신호에의하여동작 비동기식전송모드에서는항상내부클럭에의하여보레이트가결정됨
USART 직렬통신포트개요 전송데이터는 5~9비트로설정, 스톱비트는 1~2비트로설정가능 전송중패리티비트사용하지않을수도있고, 짝수또는홀수패리티를임의로설정가능 수신동작에는패리티에러, 오버런에러, 프레임에러를검출하는기능있다. 송신완료 (TX Complete), 송신데이터레지스터준비완료 (TX Data Register Empty), 수신완료 (RX Complete) 등 3가지인터럽트사용 USART 핀
USART 직렬통신포트의구성블럭도 핀은동기모드에서만사용 UDRn (USARTn I/O Data Register) 송수신데이터버퍼의기능을수행 각포트의송 / 수신버퍼는동일한번지에위치하지만내부적으로는서로다른별개의레지스터 송신할데이터를 UDRn에쓰면, 송신데이터버퍼 TXBn에저장됨 수신데이터버퍼 RXBn에있는값이 UDRn으로읽혀진다 전송데이터문자를 5~7 비트로설정 송신의경우사용하지않는상위비트무시 수신의경우이상위비트들이수신부에서 0으로처리
UDRn (USARTn I/O Data Register) 송신버퍼는 UCSRnA 레지스터의 UDREn 플랙비트가 1 로되어있는경우에만라이트가능 UDREn 플랙비트가 0으로되어있는경우는만약 UDRn 에데이터를라이트하더라도이는송신부가무시한다. 정상적으로 UDRn 레지스터의송신버퍼에라이트된데이터는송신쉬프트레지스터가비어있을경우자동적으로옮겨지고, 이것은 TXDn핀을통하여직렬로송신된다. UCSRnA (Control and Status Register A) 송수신동작을제어하거나송수신상태를저장하는기능을수행한다. RXCn (Receive Complete) 수신버퍼에읽혀지지않은수신문자가들어있으면 1 CPU가이를읽어수신버퍼가비어있는상태 0 이비트가 1로되면수신완료인터럽트요청된다. TXCn (Transmit Complete) 송신시프트레지스터에있는송신데이터가모두송신되고 UDRn 송신버퍼에아직새로운송신데이터가라이트되지않은상태 1 이는송신완료인터럽트요청하고, 이인터럽트처리가시작되면이비트는자동으로 0으로클리어된다.
UCSRnA (Control and Status Register A) UDREn (Data Register Empty) UDRn의송신버퍼가비어있어새로운송신데이터를받을준비가되어있으면 1 이는송신데이터레지스터준비완료인터럽트요청 FEn (Frame Error) UDRn의수신버퍼에현재저장되어있는데이터를수신하는동안프레임에러가발생하였음을나타냄 프레임에러는수신문자의첫번째스톱비트가 0으로검출되면발생한다. UCSRnA 레지스터를라이트하면 0으로클리어된다. DORn (USARTn Data Overrun Error) 수신동작에서오버런에러가발생하였음을나타내는상태플랙 오버런에러 : UDRn의수신버퍼에현재읽지않은수신문자가들어있는상태에서수신시프트레지스터에새로운데이터가문자가수신완료되고다시그다음수신데이터인 3번째문자의스타트비트가검출되면발생. UCSRnA 레지스터를라이트하면 0으로클리어된다. UCSRnA (Control and Status Register A) UPEn (Parity Error) UDRn의수신버퍼에현재저장되어있는데이터를수신하는동안에패리티에러가발생하였음을나타내는상태플랙 패리티에러는 UCSRnC 레지스터에서 UPMn1=1로하여패리티비트를사용하도록설정한경우만발생 UCSRnA 레지스터를라이트하면이비트는무조건 0으로클리어 U2Xn (Double the USARTn Transmission Speed) 비동기모드에서만유효한것으로클럭의분주비를 16 에서 8 로낮추어전송속도를 2 배높이는기능을수행 MPCMn (Multi-Processor Communication Mode) 멀티프로세서통신모드로설정 멀티프로세서통신모드에서는어드레스정보를포함하지않는모든수신데이터는수신부에의하여무시된다. 송신부는이비트에의하여영향을받지않는다.
UCSRnB (Control and Status Register B) 포트의송수신동작을제어하거나, 전송데이터를 9 비트로설정한경우에전송데이터의 9 번째비트값을저장하는기능을수행한다. RXCIEn (RX Complete Interrupt Enable) 수신완료인터럽트를개별적으로허용하는비트 이를 1로설정하고, SREG 레지스터의 I비트가 1이라면, UCSRnA 레지스터의 RXCn비트가 1로되는경우수신완료인터럽트발생 TXCIEn (TX Complete Interrupt Enable) 송신완료인터럽트를개별적으로허용하는비트 이를 1로설정하고, SREG 레지스터의 I비트가 1이라면, UCSRnA 레지스터의 TXCn비트가 1로되는경우송신완료인터럽트발생 UCSRnB (Control and Status Register B) UDRIEn (Data Register Empty Interrupt Enable) 송신데이터준비완료인터럽트개별적으로허용 이를 1로설정하고, SREG 레지스터의 I비트가 1이라면, UCSRnA 레지스터의 UDREn비트가 1로되는경우송신데이터레지스터준비완료인터럽트발생 RXENn (Receiver Enable) 포트의수신부가동작하도록허용한다. RxDn핀이병렬 I/O포트가아니라직렬데이터수신단자로동작하도록설정 에러플랙비트 FEn, DORn, UPEn의동작을유효하도록한다. TXENn (Transmitter Enable) 포트의송신부가동작하도록허용한다. TxDn 핀이병렬 I/O 포트가아니라직렬데이터송신단자로동작하도록설정
UCSRnB (Control and Status Register B) UCSZn2 (Character Size) UCSRnC 레지스터의 UCSZn1~0 비트와함께전송문자의데이터비트수를설정하는데사용 RXB8n (Receive Data Bit 8) 전송문자가 9비트로설정된경우수신된문자의 9번째비트 (MSB) 를저장한다. 이는반드시 UDRn 레지스터보다먼저읽혀야한다. TXB8n (Transmit Data Bit 8) 전송문자가 9비트로설정된경우송신할문자의 9번째비트 (MSB) 를저장한다. 이는반드시 UDRn 레지스터보다먼저라이트되어야한다. UCSRnC (Control and Status Register C) 포트의송수신동작을제어하는기능을수행 UMSELn (Mode Select)
UCSRnC (Control and Status Register C) UPMn1~0 (Parity Mode): 포트에서패리티모드를설정 USBSn (Stop Bit Select) UCSRnC (Control and Status Register C) UCSZn1~0 (Character Size): 전송문자의데이터비트수설정 UCPOLn (Clock Polarity): 동기전송모드의슬레이브동작에서만유효
UBRRnH/L (Baud Rate Register) 포트의송수신속도를설정하는기능, 16비트중 12비트만유효 항상상위비트인 UBRRnH를먼저라이트 클럭의분주비로작용하여직렬포트의전송속도결정 Baud Rate 설정 BAUD 단위 : bps (bits per second) UBRRn 12비트사용하므로 0~4095 범위의값을가짐 f_osc: 시스템오실레이터클럭주파수, 16MHz 동기슬레이브모드에서는 XCKn 단자로입력되는클럭의주파수가그대로 Baud Rate가된다
클럭발생부 0: 일반모드 1: 2 배속모드 송신클럭 ( 내부신호 ) 0: 비동기모드 1: 동기모드 0: 입력으로동작 (DDRE2, DDRD5) 1: 출력으로동작 (DDRE2, DDRD5) 수신클럭 ( 내부신호 ) 동기모드에서 XCKn 클럭의동작타이밍
전송데이터포맷 1 start bit 5~9 data bit 1 parity bit 사용하지않을수도있다 사용한다면, 짝수방식과홀수방식지정가능 1~2 stop bit 전송데이터포맷 전송데이터가 n 개의비트로구성되는경우패리티비트를계산하여전송에러체크 비동기직렬전송에서스톱비트는통신기능에직접적인역할을수행하지는않으며, 다만수신측의 CPU 가데이터수신동작을수행하는데필요한시간여유를주는데목적이있다.
멀티프로세서통신모드 1개의마스터프로세서가여러개의슬레이브프로세서에게특정한어드레스를전송함으로서 1개의슬레이브만을지정하여데이터를전송하는동작모드 마스터송신측에는특별한모드설정이필요없다 여러개의슬레이브수신측은 UCSRnA 레지스터의 MPCMn 비트를 1로지정하여어드레스프레임이수신되기를기다린다