본문 바로가기
Study/nRF51xxx(BLE)

nRF51 DK 예제 19 -UART(Loop back test)

by Answer Choi 2015. 3. 16.
반응형




이번예제는 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

인기글