본문 바로가기
임베디드.일렉트로닉스

Dialog 사. DA1458x DSPS 코드 구조 이해.

by i.got.it 2015. 9. 13.

 

 

 

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.

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5