ATXMEGA 시리즈 USART의 BSEL 및 BSCALE를 쉽게 계산하는 방법

2747 단어 AVRXMEGAATXMEGAUSART
일본어에 관한 자료가 매우 적은 ATXMEGA 시리즈의 USART.
USART는 ATMEGA의 USART(UART) 사용 방법과 대체로 같지만, ATMEGA 시리즈와 달리 BSCALE(Baud Rate Scale factor)의 시계 척도 조정 기능이 있다.BSCALE와 BSEL(Baud Rate bits)을 결합하면 어떤 시스템 시계든 임의의 전송 속도를 설정할 수 있습니다.
그러나 BSCALE의 계산 방법은 데이터 테이블을 봐도 정확하지 않다.avr-gcc 라이브러리에서도 USART를 쉽게 사용할 수 있는 함수와 매크로를 찾을 수 없습니다.
응용 노트를 찾아보면 excel의 보트율 계산 매크로가 있다니!
AVR1307: Using the XMEGA USART ( pdf , 소스 코드와 excel 파일 등의 zip )
이 zip에서이런 서류가 있어요.Excel 파일을 열어 CPU Clock 및 User Baurate를 지정하면 BSCALE, BSEL, CLK2X의 지정해야 할 값과 오류율을 한눈에 볼 수 있습니다.

녹색 칸은 작은 오류의 통신을 할 수 있음을 보여 줍니다.
예를 들어, 시스템 클록 1MHz의 경우 19.2kbps로 USART를 사용하려는 경우
- BSCALE: -1
- BSEL: 11
- CLK2X: 1
위 그림에서 볼 수 있듯이 '% 1' 을 선택하면 오류율이 0.16%입니다.
USART 초기화의 소스 코드는 다음과 같습니다.
main.c
#define F_CPU 1000000UL

・・・ 省略 ・・・

void initUsart()
{
    // USARTCO, 19.2kbps, -0.16%
    // BSCALE:-1, BSEL:11, CLK2X: 1

    // Set BSCALE and BSEL
    USARTC0_BAUDCTRLA = 11;
    USARTC0_BAUDCTRLB = USART_BSCALE3_bm | USART_BSCALE2_bm | USART_BSCALE1_bm | USART_BSCALE0_bm;

    // Enable RX,TX and CLK2X
    USARTC0_CTRLB = USART_RXEN_bm | USART_TXEN_bm | USART_CLK2X_bm;

    // Async, 8bits, non parity-bits, 1stop-bit
    USARTC0_CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_CHSIZE_8BIT_gc | USART_PMODE_DISABLED_gc;
}

좋은 웹페이지 즐겨찾기