DSPS 코드 구조. | |
bletouart_buffer 에서 데이터를 꺼내는(pull) 부분. 함수 : app_uart_pull() (파일:app_sps_scheduler.c) 에 의하며, 이 함수가 호출되는 곳은 함수 uart_tx_callback() (파일:app_sps_scheduler.c) 에서 호출된다.uart_tx_callback() 은 uart tx isr 혹은 application when its not running 에서 호출되는 것임.
uarttoble_buffer 에 데이터를 push 하는 부분. 함수 : app_uart_push() (파일:app_sps_scheduler.c) 에 의하며, 이 함수가 호출되는 곳은 함수 uart_rx_callback() (파일:app_sps_scheduler.c) 에서 호출된다. uart_rx_callback() 는 uart rx isr에서 호출되는 함수임.
bletouart_buffer 에 데이터를 push 하는 부분. 함수 : app_ble_push() (파일: app_sps_scheduler.c) 에 의하며, 이 함수가 호출되는 곳은 함수 gattc_write_cmd_ind_handler() (파일 : sps_server_task.c ) 에서 호출된다.
uarttoble_buffer 에서 데이터를 꺼내어(pull) 처리하는 부분. 파일 : app_sps_scheduler.c 의 함수 void app_ble_pull (void) 에서 이뤄지고 있다. 이 함수내에서는 bletouart_buffer 에 데이터가 있는지 점검하여 있다면 처리되고 없다면 처리없이 리턴한다. 데이터가 있을 때 처리되는 사항은 데이터의 BLE 전송이다. 한편, app_ble_pull (void) 이 호출되는 곳은 파일 : app_sleep.h의 app_asynch_proc(void) 함수내에서 호출된다.
| |
|
1. bletouart_buffer 에서 데이터 읽기(pull) 처리(uart_tx 출력) | |
아래 코드가 bletouart_buffer 에서 데이터를 꺼내서 uart_tx로 해당데이터를 출력하는 부분이다.
uart_tx_callback 함수내부의 처리단계. 단계1. 붉박 부분 실행되면 bletouart_buffer 에 데이터가 있는 경우 해당 사이즈와 데이터의 버퍼 주소(tx_write_pointer)를 받아둔다. 단계2. 데이터 사이즈가 0보다 크다면 uart_tx로 데이터를 출력하는 부분이 녹박이다. 함수인자로단계1에서 확보한 tx_write_pointer 와 바이트 수량을 전달하고 있다. 이 함수에서는 이 수량만큼의 데이터를 UART_TX 핀으로 출력하게된다.
uart_tx_callback 함수가 호출되는곳이 어디냐? 즉, 이 함수가 호출되면 ble로부터 데이터가 수신된 경우 해당데이터를 읽어오고 읽은 데이터를 활용가능하게 된다. 그럼 uart_tx_callback 은 언제 어디서 호출되는가? 기본적으로 uart tx isr 에서 호출되는것외에 함수 : app_ble_push()내에서도 호출되고 있음을 숙지하자. 이 함수는 bletouart_buffer 에 ble로부터 수신된 데이터를 밀어넣는 기능의 함수이다. 이 상태에서는 당연히 출력할 데이터가 있는 상태인것은 확실하다. 이 시점에 uart_tx_callback 이 호출되므로 bletouart버퍼에 있는 데이터를 꺼내는 처리가 이뤄지게된다. 한편, app_ble_push() 가 호출되고 있는 곳은 ble 로 데이터 수신 이벤트 처리핸들러 내에서 호출된다. 결론적으로, 아래 순서로 데이터 흐름이 이뤄진다.
ble 데이터 수신 이벤트 핸들러 -> app_ble_push()호출되어 b2u_buffer 에 데이터 저장 및 uart_tx_callback 호출 -> uart_tx_callback 내에서 b2ubuffer 데이터 꺼내서 활용 (본 코드예에서는 활용처는 uart tx 로 출력함.)
| |
|
2. uarttoble_buffer 에 데이터 기록(push)처리. | |
수행되는 시점 : DSPS 에서의 BLE측으로 데이터 전송하기 위한 버퍼인 u2b_buffer 에 데이터 기록처리는 UART RX 로 데이터가 들어왔을때 이뤄지게 되어있다. uart rx isr 에서만 유일하게 호출되는 함수인 uart_rx_callback 내에 app_uart_push() 함수가 u2b_buffer 에 데이터 기록하는 처리를 수행한다. 아래 해당 코드 부분이다. 붉박으로 표시된 app_uart_push 가 u2b_buffer 에 데이터를 기록하는 함수다. 2개의 함수가 보이는데 처음것이 실제 정상적인 데이터이며, 두번째것은 uart timeout 에 의하여 uart_rx_callback이 실행될때 수행되는 것이다. 타임아웃 이벤트에서도 정상적인 데이터가 있는 상태이며, 이를 확보하는 것임.
| |
|
///423.
'임베디드.일렉트로닉스' 카테고리의 다른 글
Dialog 사. DA1458x 외부 SPI 플래시 메모리. (0) | 2015.09.21 |
---|---|
ALTIUM(알티움)팁. 마우스 크로스 헤어 보이게 하기. (0) | 2015.09.16 |
Dialog 사. DA1458x DSPS device 측 룹백구현. (0) | 2015.09.07 |
Dialog 사. DA14580 외부SPI메모리로 부팅하는 법. (0) | 2015.09.07 |
Dialog 사. DA14580 외부 핀 인터럽트, wakeup 시키기. (0) | 2015.09.07 |
댓글