AVR - Chapter 6 황 지 연
데이터는 LSB부터 MSB 순으로 데이터 전송 시리얼(Serial) 통신이란? Serial 통신은 하나의 신호 선을 이용해서 데이터를 비트 단위로 보내는 방식 8비트 비 동기식 통신 콘트롤러 (UART : Universal Asynchronous Receiver Transmitter) 데이터는 LSB부터 MSB 순으로 데이터 전송
Serial interface 통신 규격 Serial interface 통신 규격 RS-232C, RS-422, RS-423, RS-485… < RS-232C의 예>
시리얼(Serial) 통신 Serial 통신 이점 Serial 통신 전송 방식 속도 적은 수의 통신 라인 사용과 먼 거리 전송 Simplex 단방향 전송 방식 - 라디오 half duplex 반이중 전송 방식(서로 다른 시간 양방향 전송 방식) - 무전기 (full) duplex 전이중 전송 방식(동시 양방향 전송 방식) - 8051 속도 bps(bits per second) : 1초당 전송되는 비트의 수 baud rate : 1초당 전송되는 변조된 신호의 수 * 8051에서는 하나의 비트가 하나의 신호이므로 같은 의미
시리얼(Serial) 종류 Specification RS232C RS423 RS422 RS485 동작 모드 Single-Ended Differential 최대 Driver / Receiver 수 1 Driver 1 Receiver 1 Driver 10 Receivers 1 Driver 32 Receivers 32 Drivers 32 Receivers 최대 통달거리 약 15 m 약 1.2 km 최고 통신속도 20 Kb/s 100 Kb/s 10 Mb/s 지원 전송방식 Full Duplex Half Duplex 최대 출력전압 ±25V ±6V -0.25V to +6V -7V to +12V 최대 입력전압 ±15V ±12V -7V to +7V
RS-232C TXD - Transmit Data RXD - Receive Data RTS - Ready To Send 직렬통신 데이터가 나오는 신호선 RXD - Receive Data 직렬통신 데이터를 입력받는 신호선 RTS - Ready To Send DTE장치가 DCE장치에게 준비가 됐음을 나타내는 신호선 CTS - Clear To Send DCE장치가 DTE장치에게 준비가 됐음을 나타내는 신호선 DTR - Data Terminal Ready 터미널이 모뎀에게 자신이 송수신 가능한 상태임을 알리는 신호선 DSR - Data Set Ready 모뎀이 터미널에게 자신이 송수신 가능한 상태임을 알려주는 신호선 DCD - Data Carrier Detect 모뎀이 상대편 모뎀과 전화선등을 통해서 접속이 완료되었을 때 상대편 모뎀이 캐리어신호를 보내오며 이신호를 검출하였음을 컴퓨터 또는 터미널에 알려주는 신호선 RI - Ring Indicator 상대편 모뎀이 통신을 하기위해서 먼저 전화를 걸어오면 전화 벨이 울리게 된다. 이때 이신호를 모뎀이 인식하여 컴퓨터 또는 터미널에 알려주는 신호선이다.
RS-232C
시리얼 포트 보우 레이트 U2X = 0 으로 하였을 때의 보우 레이트 계산식, 아래와 같이 계산하면 UBRR 에 세팅 해야 하는 값이 나옴 코딩은 아래와 같이 하면 편리하다 (UBRR 값이 255 보다 크게 나올경우는 주의)
시리얼 보우 레이트
시리얼 보우 레이트
시리얼 보우 레이트
시리얼 보우 레이트
시리얼 포워더 만들기
시리얼 포워더 만들기 #pragma interrupt_handler uart0_rx_isr:19 void uart0_rx_isr(void) { //uart has received a character in UDR UDR0 = UDR0; } //컴파일 후 ATmega128에 포팅한다.
시리얼 포워더 만들기
시리얼 포워더 만들기
시리얼 포워더 만들기
시리얼 포워더 만들기 키보드를 눌러도 아무런 반응이 없다.
시리얼 포워더 만들기 Open Com Port를 눌른다.
시리얼 포워더 만들기
Printf 사용하기 void main(){ init_devices(); printf("Serial Forwarder v0.1\r\n"); while(1){ ; } }
시리얼 프로그래밍 USRnA(USARTn Control & Status Register A) BIT 7 : RXCn(USART Receive Complete) RXCn(USARTn Receive Complete) 비트는 수신버퍼에 읽혀지지 않은 수신 문자가 들어있으면 "1"로 셋 되고 CPU가 이를 읽어서 수신 버퍼가 비어있는 상태라면 "0" 으로 클리어 되었음을 나타내는 상태 플래그이다. RXCn 비트는 수신 완료 인터럽트를 발생시킬 때 사용한다. BIT 6 : RXCn(USARTn Transmit Complete) TXCn(USARTn Transmit Complete) 비트는 송신 시 포트 레지스터에 있는 송신 데이터가 모두 송신되고 UDRn의 송신 버퍼에 아직 새로운 송신 데이터가 라이트 되지 않은 상태 이면"1"로 셋 되는 상태를 지시 하는 플래그이다. TXCn 비트는 송신 완료 인터럽트를 발생 시킬 때 사용된다
시리얼 프로그래밍 BIT 5 : UDREn(USARTn Data Register Empty) UDREn(USARTn Data Register Empty)비트는 UDRn의 송신 버퍼에 새로운 송신 데이터를 받을 준비가 되어 있으면 "1"로 셋 되는 상태 플래그이다 UDREn 비트는 UDARTn Data Register Empty 인터럽트를 발생할 때 사용한다. BIT 4 : FEn(Frame Error) FEn(USARTn Frame Error)비트는 UDRn의 수신 버퍼에 현재 저장 되어있는 데이터를 수신 하는 동안 프레임 에러가 발생 하였음을 나타내는 상태 플래그로, 프레임에러는 수신 문자의 첫 번째 스톱비트가"0"으로 검출 되면 발생(1로 셋 되고)하고 UCSRAn 레지스터를 라이트하면 이 비트는 "0"으로 클리어된다 BIT 3 : DORn*Data OverRun DORn(USARTn Data Overrun Error) 비트는 수신 동작에서 오버런 에러가 발생하였음을 나타내는 상태 플래그로 OverRun Error는 UDRn의 수신 버퍼에 현재 읽지 않은 수신 문자가 들어있는 상태에서, 수신 시 포트레지스터에 새로운 문자가 수신 완료되면, 다시 그 다음 수신 데이터인 3번째 문자의 스타트비트가 검출되면 발생한다. UCSRnA 레지스터를 라이트 하면 이 비트는 "0"으로 클리어된다.
시리얼 프로그래밍 BIT 2 : PEn(Parity Error) PEn(Parity Error)비트는 UDR의 수신 버퍼에 현재 저장 되어 있는 데이터를 수신 하는 동안 패리티에러가 발생 하였음을 나타내는 상태플래그로 패리티에러는 UCSRnC 레지스터의UPMn1 비트를"1" 설정하여 패리티 비트를 사용하도록 설정 한 경우에만 발생할 수 있다. UCSRnA 레지스터를 라이트 하면 이 비트는"0"으로 클리어된다 BIT 1 : UCXn(Double the USARTn Transmission Speed) U2Xn(Double the USART Transmisson Speed) 비트는 비동기모드에서만 사용가능 한 것으로서 클록의 n 분주비를 16에서 8로 1/2만큼 낮추어 전송 속도를2배 높이는 기능을 한다 BIT 0 : MPCMn(USART Multi-Processor Communication Mode) 비트는 USARTn을 멀티프로세서 통신 모드로 설정하고 멀티프로세서통신 어드레스정보를 포함 하지 않는 모든 수신 데이터는 수신부에 의하여 무시 된다.
시리얼 프로그래밍 USRnC(USARTTn Control & Status Register C) BIT 7 BIT 6 에약 BIT 6 UMSELn(USARTn Mode Select) UMSELn(USARTn Mode Select) 비트는 "1"이면USARTn 모듈을 동기 전송 모드로 설정 하고 "0"이면 비동기 전송 모드로 설정한다 BIT5,4 UPMn1, 0(Parity Mode) 이 비트를 "1"로 설정 하면 패리티를 발생 시키고 검사를 할 수 있고 송신기는 자동적으로 각 프레임의 송신 데이터에 페리티 비트를 더하여 송신한다. 수신기는 UPM0 비트와 수신된 데이터를 비교한다. 만약에 오류가 발생하면UCSRnA 레지스터의 PE 플래그가"1"로셋된다 UPMn 비트설정표 -------------------------------------------- UPMn1 UPMn0 Parity모드 ------------------------------------------- 0 0 Disable 0 1 예약 1 0 Enabled Even Panrity 1 1 Enabled Odd Parity
시리얼 프로그래밍 BIT 3 : USBSn(Stop Bit Select) USBSn(Stop Bit Select) 비트가 "0“ 이면 USARTn 모듈에서 데이터 포맷을 구성하는 스톱 비트를 1개로 설정하고 "1"이면 스톱 비트를 2개로 설정한다. --------------- USBSn StopBIt 0 1-bit 1 2-bit BIT 2,1 : UCSZn1,0(Character Size) - 데이터비트수를설정 ------------------------------------------------------------ UPMn1 UPMn0 UCSZn0 Parity모드 -------------------------------------------------------------------- 0 0 0 5-bit 0 0 1 6-bit 0 1 0 7-bit 0 1 1 8-bit 1 0 0 에약 1 0 1 에약 1 1 0 에약 1 1 1 9-bit
시리얼 프로그래밍 BIT 0 : UCPOLn ------------------------- USBSn TxDn의출력StopBIt 0 XCKn 상승 XCKn 하강 1 XCKn 하강 XCKn 상승
시리얼 프로그래밍 UBRR0H = 0x00; UBRnH/L(USARTTn Baud Rate Register) 레지스터는 16비트 중에서 12비트만 사용하여 USARTTn 모듈의 송·수신 속도를 설정하는 기능을 한다. BIT 15~23 : 에약비트 BIT 11~0 : UBRRn11~0(USARTn Baud Rate Register) 2비트를 이용하여 USARTn의 보율(baud rate)을 결정 하는데 UBRRnH의 4비트와 UBRRnL의8비트가조합을이루고있다
시리얼 프로그래밍 USRnB(USARTTn Control & Status Register B) BIT 7 : RXCIEn(RX Complete Interrupt enable) EXCIEn(USARTn RX Complete Interrupt Enable) 비트는 수신 완료 인터럽트를 개별적으로 enable하고 "1"로 설정하고 SREG 레지스터의 비트가"1"이고 UCSRnA 레지스터의 RXCn 비트가"1"로 설정 되어 있으면 수신 완료 인터럽트가 발생한다 BIT 6 : TXCIEn(TX Complete Interrupt Enable) TXCIEn(USARTn TX Complete Interrupt Enable)비트는 수신완료 인터럽트를 개별적으로 enable(1)로 설정하고 SREG 레지스터의 비트가 "1"이고 UCSRnA와 UCSRnA레지트터의 TXCn 비트가"1"로설정 되어 있으면 송신 완료 인터럽트가 발생한다
시리얼 프로그래밍 BIT 5 : UDRIEn(USARTn Data Register Empty Interrupt Enable) 비트 USARTn Data Register Empty 인터럽트를 개별적으로 enable하는 비트로 "1"로 설정하고 SREG 레지스터의 비트가 "1"이고 UCSRnA 레지스터의 UDREn 비트가 "1"로 되면 USARTn Data Register Empty 인터럽트가발생된다 BIT 4 : RXENn(Receiver Enable) RXEN(Receiver Enable) 비트는USARTn 모듈의 수신부가 동작하도록 enable하는 것 으로RXDn 핀이 병렬 I/O 포트가 아니라 직렬 데이터 수신단자로 동작 하도록 설정한다. BIT 3 : TXENn(Transmitter Enable) TXENn(Transmitter Enable) 비트는 USARTn 모듈의 송신부가 동작하도록 enable 하는 것으로 TXDn핀이 병렬 I/O 포트가 아니라 직렬 데이터 송신단자로 동작하도록 설정한다. BIT 2 : UCSZn2(Character Size) UCSZn2(USARTn Character Size)비트는 UCSRnC레지스터의 UCSZn1~0비트와 함께 전송 문자의 데이터비트수를설정하는데사용된다
시리얼 프로그래밍 BIT 1 : RXB8n(Transmit data Bit 8) RXB8n(Receive Data Bit 8)은 수신 문자가 9비트로 설정 된경우에 수신된 문자의 9번째 비트(MSB)를 저장한다 BIT 0 : TXB8n(Transmit data BIt 8) 송신문자가 8비트로 설정 된 경우에 송신된 문자의9번째 비트(MSB)를 저장한다
시리얼 프로그래밍 #pragma interrupt_handler uart0_rx_isr:19 void uart0_rx_isr(void) { //uart has received a character in UDR cmd=UDR0; //시리얼 통신에서 받은 데이터(UART Data Register)를 cmd변수에 저장 }