2013-01-11 54 views
3

我有一個SAM4s Xplained並希望使用UART1,但無法找到示例或幫助。我嘗試了我自己的,但它不起作用。愛特梅爾SAM4S Xplained UART

這是到目前爲止我的代碼:

conf_uart.h

#include "asf.h" //uart.h etc. included here 
#include <sam4s_xplained.h> 

#define UART_SERIAL_BAUDRATE  9600 
#define UART_SERIAL_CHANNEL_MODE UART_MR_CHMODE_AUTOMATIC //UART_MR_CHMODE_NORMAL 
#define UART_SERIAL_MCK   240000000UL //CHIP_FREQ_CPU_MAX (tired both!) 
#define UART_SERIAL_MODE   UART_MR_PAR_NO 

void uart_custom_init(void); 

conf_uart.c

#include "conf_uart.h" 

uint8_t received_byte; 

void uart_custom_init(void) { 
    sysclk_init(); 

    const sam_uart_opt_t uart_console_settings = { 
     UART_SERIAL_BAUDRATE, 
     UART_SERIAL_CHANNEL_MODE, 
     UART_SERIAL_MCK, 
     UART_SERIAL_MODE 
    }; 

    uart_init(UART1,&uart_console_settings);  //Init UART1 

    uart_enable_rx(UART1);      //Enable RX (receiving) 
    uart_enable_tx(UART1);      //Enable TX (transmitting) 
    uart_enable(UART1);      //Enable UART1 

    uart_enable_interrupt(UART1,UART_IER_RXRDY); //Interrupt reading ready 
    NVIC_EnableIRQ(UART1_IRQn); 

} 

void UART1_Handler() { 
    uint32_t dw_status = uart_get_status(UART1); 

    if(dw_status & UART_SR_RXRDY) { 
     uint8_t received_byte; 
     uart_read(UART1, &received_byte); 
     uart_write(UART1, received_byte); 
    } 
} 

我嘗試不同的東西。例如,我激活了自動迴應,但我沒有收到我的電腦上的任何東西,並且我沒有收到我的SAM4上的任何東西。

+0

我解決了它,請參閱 http://www.at91.com/forum/viewtopic.php/f,29/t,21332/sid,6c5bc3ec666c266be7d6794344d0639d/ –

回答

6

這是我工作的代碼: 離線

conf_uart.h

#include "asf.h" //uart.h etc. included here 

#define UART_SERIAL_BAUDRATE  9600 
#define UART_SERIAL_CHANNEL_MODE UART_MR_CHMODE_NORMAL 
#define UART_SERIAL_MODE   UART_MR_PAR_NO 

/* =============== UART1 =============== */ //(UART0 is defined but not UART1) 
#define PINS_UART1   (PIO_PB2A_URXD1 | PIO_PB3A_UTXD1) 
#define PINS_UART1_FLAGS (PIO_PERIPH_A | PIO_DEFAULT) 
#define PINS_UART1_MASK  (PIO_PB2A_URXD1 | PIO_PB3A_UTXD1) 
#define PINS_UART1_PIO  PIOB 
#define PINS_UART1_ID  ID_PIOB 
#define PINS_UART1_TYPE  PIO_PERIPH_A 
#define PINS_UART1_ATTR  PIO_DEFAULT 

void uart_custom_init(void); 
void sendViaUart(uint8_t data); 

conf_uart.cpp

#include "conf_uart.h" 

void uart_custom_init(void) { 
    sysclk_init(); 

    // set the pins to use the uart peripheral 
    pio_configure(PINS_UART1_PIO, PINS_UART1_TYPE, PINS_UART1_MASK, PINS_UART1_ATTR); 

    //enable the uart peripherial clock 
    pmc_enable_periph_clk(ID_UART1); 

    const sam_uart_opt_t uart1_settings = 
     { sysclk_get_cpu_hz(), UART_SERIAL_BAUDRATE, UART_SERIAL_MODE }; 

    uart_init(UART1,&uart1_settings);  //Init UART1 and enable Rx and Tx 

    uart_enable_interrupt(UART1,UART_IER_RXRDY); //Interrupt reading ready 
    NVIC_EnableIRQ(UART1_IRQn); 

} 

void sendViaUart(uint8_t data) { 
    while (!(UART1->UART_SR & UART_SR_TXRDY)); 
    uart_write(UART1, data); 
} 

void UART1_Handler() { 
    uint32_t dw_status = uart_get_status(UART1); 

    if(dw_status & UART_SR_RXRDY) { 
     uint8_t received_byte; 
     uart_read(UART1, &received_byte); 
     sendViaUart(received_byte); 
    } 
} 

問候 利奧

  • 關閉 -
+0

+1非常有幫助的,當我找不到任何例子UART初始化,或者[在線](http://asf.atmel.com/docs/3.11.0/sam3x/html/group__sam__drivers__uart__group.html)或AtmelStudio。 –

0

您可能也喜歡這個頁面: 它包含SAM4S uart的設置和很多其他的例子。 ASF Source Code Document它使用USART0,我知道你想使用USART1。但仍然是一個很好的參考。

希望這有助於

+0

剛剛來到這裏,值得注意的是在這種情況下'UART'不是**'USART' *。 SAM4S有2個UART外設和2個USART外設。它們有略微不同的API,並且被路由到不同的引腳。 –

1

的問題是,在這款主板SAM4S的UART解釋Pro未映射到PB2A和PB3A。 UART被映射到PB2A和PA22A。我花了很長時間才弄明白這一點,因爲它在文檔中是錯誤的。

相關問題