Hi,
Thanks for the valuable docs. I will try with VLPS mode for uart data capture. Between is this approach OK for capturing data via UART after wake up.
Correct me if I am doing something wrong.
#include <mqx.h>
#include <bsp.h>
#include <fio.h>
#include <lwevent.h>
/* Task IDs */
#define HELLO_TASK 5
#define UART_TASK 6
/* LW Event Definitions */
LWEVENT_STRUCT lwevent;
extern void hello_task(uint32_t);
void uart_task(uint32_t);
MQX_FILE_PTR uart;
//char data[5];
const TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
/* Task Index, Function, Stack, Priority, Name, Attributes, Param, Time Slice */
{ HELLO_TASK, hello_task, 1500, 8, "hello", MQX_AUTO_START_TASK, 0, 0 },
{UART_TASK,uart_task,1500,8,"uart",MQX_AUTO_START_TASK,0,0},
{ 0 }
};
#define UART_EVENT 0x01
/* Function name:uart_task
* Description :to receive data through UART
*/
char data[5];
char *data_ptr=data;
int received;
void uart_task(uint32_t initial_data)
{ // variable to store received character
UART_MemMapPtr sci_ptr = _bsp_get_serial_base_address (2);
while(1)
{
if(_lwevent_wait_ticks(&lwevent,UART_EVENT,TRUE,0) == MQX_OK) // wait for UART event to be set when core wakes up from LLS
{
// for(int k=0;k<3;k++)
// {
// fgets(received,sizeof(received),uart);
*data_ptr = sci_ptr->D; // D regsiter has data
data_ptr++;
if(strlen(data)==4)
{
if(strncmp(data,"spo2",4)==0)
_io_set_handle(IO_STDOUT,uart);
printf("%s",data);
data_ptr-=4;
memset(data,0x00,sizeof(data));
}
// printf("\n%c",data[received++]);
_lwevent_clear(&lwevent,UART_EVENT);
}
}
}
/* Function name:uart_isr
* Description :isr to enable uart event mask for data parsing
*/
void uart_isr()
{
char received; // variable to store received character
UART_MemMapPtr sci_ptr = _bsp_get_serial_base_address (2);
received = sci_ptr->S1; // Read status register to clear off the interrupt flag
received = sci_ptr->D; // D regsiter has data
_lwevent_set (&lwevent, UART_EVENT);
}
void hello_task ( uint32_t initial_data )
{
(void)initial_data; /* disable 'unused variable' warning */
printf("Hello World\n");
/*Create event for task synchronization*/
if (_lwevent_create(&lwevent,0) != MQX_OK)
{
printf("\n event creation failed");
}
for(int k=0;k<100000;k++);
uart=fopen("ittyc:",NULL); //(const char*)(IO_SERIAL_NON_BLOCKING|IO_SERIAL_RAW_IO)
if(uart ==NULL)
printf("\n uart opening failed");
_int_install_isr(INT_UART2_RX_TX, (INT_ISR_FPTR)uart_isr, uart);
_bsp_int_init(INT_UART2_RX_TX,2,0,TRUE);
for(int k=0;k<10000;k++);
_task_block();
}