이번예제는 UART Loop back test입니다.
main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | int main(void) { LEDS_CONFIGURE(LEDS_MASK); LEDS_OFF(LEDS_MASK); uint32_t err_code; const app_uart_comm_params_t comm_params = { RX_PIN_NUMBER, TX_PIN_NUMBER, RTS_PIN_NUMBER, CTS_PIN_NUMBER, APP_UART_FLOW_CONTROL_ENABLED, false, UART_BAUDRATE_BAUDRATE_Baud38400 }; APP_UART_FIFO_INIT(&comm_params, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, uart_error_handle, APP_IRQ_PRIORITY_LOW, err_code); APP_ERROR_CHECK(err_code); #ifndef ENABLE_LOOPBACK_TEST printf("\n\rStart: \n\r"); while (true) { uint8_t cr; while(app_uart_get(&cr) != NRF_SUCCESS); while(app_uart_put(cr) != NRF_SUCCESS); if (cr == 'q' || cr == 'Q') { printf(" \n\rExit!\n\r"); while (true) { // Do nothing. } } } #else while (true) { uart_loopback_test(); } #endif } | cs |
Line 3~4 : LED를 설정한 후 모두 OFF합니다.
Line 5~24 : UART FIFO로 초기화합니다.
Line 27~44 : ENABLE_LOOPBACK_TEST 가 define되어 있지 않으면 실행됩니다.
Line 47~50 : ENABLE_LOOPBACK_TEST 가 define되어있으면 실행됩니다.(기본적으로 define)
Line 27~44 부터 보겠습니다. 테스트를 위해 ENABLE_LOOPBACK_TEST를 주석처리하세요.
Line 32 : 터미널에서 입력한 문자(열)를 cr에 저장합니다.
Line 33 : cr을 uart를 통해 뿌려줍니다.
Line 35~43 : 'q'나 'Q'를 입력하게 되면 Loopback test가 끝나게 되며, 다시 키를 입력하면,
테스트를 다시 진행할 수 있습니다.
Line 47~55 :먼저 테스트를 하기위해서는 하드웨어적으로 uart tx와 uart rx가 short되어 있어야 합니다.
Line 49 : Loop test를 시작합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | static void uart_loopback_test() { uint8_t * tx_data = (uint8_t *)("\n\rLOOPBACK_TEST\n\r"); uint8_t rx_data; for (uint32_t i = 0; i < MAX_TEST_DATA_BYTES; i++) { uint32_t err_code; while(app_uart_put(tx_data[i]) != NRF_SUCCESS); nrf_delay_ms(10); err_code = app_uart_get(&rx_data); if ((rx_data != tx_data[i]) || (err_code != NRF_SUCCESS)) { show_error(); } } return; } | cs |
이번엔 반대로 board에서 uart로 보내고, uart tx와 uart rx가 short되어있어, 보내는데로,
바로 받는 걸 보여줍니다.
Line 3 : tx data입니다. 미리 text를 써 놓았습니다.
Line 4: rx data, 받은 데이터입니다.
Line 6~18 : 자동으로 한글자씩 board에서 보내고, loop되어 받은걸 비교하는 부분입니다.
Line 8~9 : 한글자를 보냅니다.
Line 11~12 : 10ms후에 uart_rx를 읽어 rx_data에 저장합니다.
Line 14~17 : 보낸문자와 받은문자를 비교해서 다르면 error를 표시합니다.
근데 실제 테스트시 UART로 보내지도 않고 바로 error가 뜨네요.;;
'Study > nRF51xxx(BLE)' 카테고리의 다른 글
DFU (Device Firmware Update) (0) | 2015.03.18 |
---|---|
nRF51 DK 예제 20 -LPCOMP(Low Power Comparator) (0) | 2015.03.17 |
nRF51 DK 예제 18 -WDT(Watch Dog Timer) (0) | 2015.03.16 |
nRF51 DK 예제 17 -SIMPLE TIMER (0) | 2015.03.13 |
nRF51 DK 예제 16 -TIMER (0) | 2015.03.13 |