반응형
이번 예제 역시 Radio Transmitter 예제와 함께 하는 예제입니다.
이 소스는 동글에 설치하였습니다.
사용한 제품은 nrf51 dongle로 모델명은 PCA10031입니다
소스는 앞의 Radio Transmitter와 거의 비슷합니다.
main.c
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 | int main(void) { uint32_t err_code = NRF_SUCCESS; clock_initialization(); APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false); 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); err_code = bsp_init(BSP_INIT_LED, APP_TIMER_TICKS(100, APP_TIMER_PRESCALER), NULL); APP_ERROR_CHECK(err_code); // Set radio configuration parameters radio_configure(); NRF_RADIO->PACKETPTR = (uint32_t)&packet; err_code = bsp_indication_text_set(BSP_INDICATE_USER_STATE_OFF, "Wait for first packet\n\r"); APP_ERROR_CHECK(err_code); while (true) { uint32_t received = read_packet(); err_code = bsp_indication_text_set(BSP_INDICATE_RCV_OK, "Packet was received\n\r"); APP_ERROR_CHECK(err_code); printf("The contents of the package is %u\n\r", (unsigned int)received); } } | cs |
Transmitter와 차이점은 Line 32~43까지인데
Line 32~33 : Uart로 뿌리는 string만 달라졌습니다. 'Press Any button'->'Wait for first packet'로
Line 37 : 이 부분이 받은 패킷을 읽어오는 부분입니다.
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 | uint32_t read_packet() { uint32_t result = 0; NRF_RADIO->EVENTS_READY = 0U; // Enable radio and wait for ready NRF_RADIO->TASKS_RXEN = 1U; while (NRF_RADIO->EVENTS_READY == 0U) { // wait } NRF_RADIO->EVENTS_END = 0U; // Start listening and wait for address received event NRF_RADIO->TASKS_START = 1U; // Wait for end of packet or buttons state changed while (NRF_RADIO->EVENTS_END == 0U) { // wait } if (NRF_RADIO->CRCSTATUS == 1U) { result = packet; } NRF_RADIO->EVENTS_DISABLED = 0U; // Disable radio NRF_RADIO->TASKS_DISABLE = 1U; while (NRF_RADIO->EVENTS_DISABLED == 0U) { // wait } return result; | cs |
5~12 : Radio Rx를 enable하고는 packet을 기다립니다.
13~21 : 패킷을 받고,
23~26 : 받은 패킷의 CRC를 검사해 이상이 없으면 result에 넣습니다.
27~34 : Radio Rx를 disable 시키고, 35에서 받은 데이터를 반환합니다.
Line 39~40 : Uart로 뿌려주고, LED를 깜박입니다.
Line 42 : 받은 packet을 uart로 뿌려줍니다.
동작 diagram입니다.
실제 받은 데이터입니다.
아래는 동작영상입니다.
반응형
'Study > nRF51xxx(BLE)' 카테고리의 다른 글
nRF51 DK 예제 9 - PPI (0) | 2015.03.04 |
---|---|
nRF51 DK 예제 8 - Pin change interrupt (0) | 2015.03.03 |
nRF51 DK 예제 6 -Radio Transmitter (0) | 2015.03.03 |
nRF51 DK 예제 5 -GPIOTE (0) | 2015.03.02 |
nRF51 DK 예제4 flashwrite (0) | 2015.03.02 |