This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Data after callback ?

Dear Members,

How can i keep the data no being cut ?

before using call back function ,

after using call back function :

function :

call back from main :

 case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
					   //nrf_libuarte_async_tx(&libuarte, text2, text_size2);
				    //nrf_libuarte_async_tx(&libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length);
				    GPS_CallBack();

Call back and process function :

void	GPS_CallBack(void)
{
	
	GPS.LastTime=nrf_systick_val_get();
	
	

	if(GPS.rxIndex < sizeof(GPS.rxBuffer)-2)
	{
		GPS.rxBuffer[GPS.rxIndex] = GPS.rxTmp;
		GPS.rxIndex++;
		memcpy((void *)line_buffer_GPS, GPS.rxBuffer, GPS.rxIndex); 
	}
   nrf_libuarte_async_rx_free(&libuarte1, (uint8_t *)&GPS.rxTmp, 1);
	

}
//##################################################################################################################
void	GPS_Process(void)
{

	nrf_libuarte_async_tx(&libuarte, (uint8_t*)line_buffer_GPS, sizeof(line_buffer_GPS));
}	

What do I miss here ? a size of data ?

Thanks

I call GPS_process in main(void) :

while (true)
    {
			 
			 GPS_Process();
			 nrf_delay_ms(5000);
	}		 

Parents Reply Children
  • it's data in the buffer, it's cut when I use GPS_Callback() function ? and buffer is gone when I use GPS_process

  • Code 

     case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
    					   //nrf_libuarte_async_tx(&libuarte, text2, text_size2);
    				    nrf_libuarte_async_tx(&libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length);
    				    
    				    //GPS_CallBack();

    output :

    code :

    case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
    					   //nrf_libuarte_async_tx(&libuarte, text2, text_size2);
    				    //nrf_libuarte_async_tx(&libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length);
    				    
    				    GPS_CallBack();
    				    
    
    typedef struct 
    {
    	uint8_t		rxBuffer[1024];
    	uint16_t	rxIndex;
    	uint8_t		rxTmp;	
    	uint32_t	LastTime;	
    	
    	GPGGA_t		GPGGA;
    	
    }GPS_t;				    
    				    
    void	GPS_CallBack(void)
    {
    	
    	
    	GPS.LastTime=nrf_systick_val_get();
    	
    	
    	
    	
    	if(GPS.rxIndex < sizeof(GPS.rxBuffer)-2)
    	{
    	
    		GPS.rxBuffer[GPS.rxIndex] = GPS.rxTmp; 
    		GPS.rxIndex++;
    		memcpy((void *)line_buffer_GPS, GPS.rxBuffer, GPS.rxIndex); 
    	}
       nrf_libuarte_async_rx_free(&libuarte1, (uint8_t *)&GPS.rxTmp, 1);
    	 
    	
    	//DEBUG display on terminal :
    	
    	nrf_libuarte_async_tx(&libuarte, GPS.rxBuffer, sizeof(GPS.rxBuffer));

    Output :

  • Yes I had init systick

    int main(void)
    {
        bsp_board_init(BSP_INIT_LEDS);
        
        ret_code_t ret = nrf_drv_clock_init();
        APP_ERROR_CHECK(ret);
      
        nrf_drv_clock_lfclk_request(NULL);
    
        //ret_code_t err_code = NRF_LOG_INIT(app_timer_cnt_get);
    	  ret_code_t err_code = NRF_LOG_INIT(NULL);
        APP_ERROR_CHECK(err_code);
    	
    	  /* Init systick driver */
        nrf_drv_systick_init();

  • Is it related with interrupt priority ?

    I need to put GPS UART higher priority ?

    Thanks

     nrf_libuarte_async_config_t nrf_libuarte_async_config = {
                .tx_pin     = TX_PIN_NUMBER,
                .rx_pin     = RX_PIN_NUMBER,
                .baudrate   = NRF_UARTE_BAUDRATE_115200,
                .parity     = NRF_UARTE_PARITY_EXCLUDED,
                .hwfc       = NRF_UARTE_HWFC_DISABLED,
                .timeout_us = 1000,
                .int_prio   = APP_IRQ_PRIORITY_LOW
        };
    		
    		nrf_libuarte_async_config_t nrf_libuarte_async_config1 = {
                .tx_pin     = SER_APP_TX_PIN,
                .rx_pin     = SER_APP_RX_PIN,
                .baudrate   = NRF_UARTE_BAUDRATE_9600,
                .parity     = NRF_UARTE_PARITY_EXCLUDED,
                .hwfc       = NRF_UARTE_HWFC_DISABLED,
                .timeout_us = 1000,
                .int_prio   = APP_IRQ_PRIORITY_LOW
        };

  • Hi Jorgen, any clues ? let me know any other inputs you need ?

    Is my call back function taking too much time ? thanks

Related