cancel
Showing results for 
Search instead for 
Did you mean: 

WICED Smart Bluetooth

Anonymous
Not applicable

When uart receives bytes, it does go entering to interrupt call back often.

I should send uart packet several times (2 ~ 8), then uart can receive.

Byte size is regardless.

Can anybody have same experiences?

int Uart_Init(BLE_PROFILE_PUART_CFG *puart_cfg, BLECM_FUNC_WITH_PARAM puart_rx_callback)

{

puart_selectUartPads(puart_cfg->rxpin, puart_cfg->txpin, 0x00, 0x00);


// Initialize the peripheral uart driver

puart_init();

// Since we are not configuring CTS and RTS here, turn off

// hardware flow control. If HW flow control is used, then

// puart_flowOff should not be invoked.

puart_flowOff();

//BEGIN - puart interrupt

// The following lines enable interrupt when one (or more) bytes

// are received over the peripheral uart interface. This is optional.

// In the absense of this, the app is expected to poll the peripheral

// uart to pull out received bytes.

// clear interrupt

P_UART_INT_CLEAR(P_UART_ISR_RX_AFF_MASK);

// set watermark to 1 byte - will interrupt on every byte received.

P_UART_WATER_MARK_RX_LEVEL (1);

// enable UART interrupt in the Main Interrupt Controller and RX Almost Full in the UART

// Interrupt Controller

P_UART_INT_ENABLE |= P_UART_ISR_RX_AFF_MASK;

// Set callback function to app callback function.

puart_rxCb = application_puart_interrupt_callback;

// Enable the CPU level interrupt

puart_enableInterrupt();

/* END - puart interrupt */

}

void application_puart_interrupt_callback(void* unused)

{

   // There can be at most 16 bytes in the HW FIFO.

   char readbytes[16];

   UINT8 number_of_bytes_read = 0;

   while(puart_rxFifoNotEmpty() && puart_read(&readbytes[number_of_bytes_read]))

   {

   readBuffer[number_of_bytes_read] = readbytes[number_of_bytes_read];

   number_of_bytes_read++;

   ble_trace1("uart rx data is %d", (UINT8*)readBuffer[number_of_bytes_read]);

   }

  P_UART_INT_CLEAR(P_UART_ISR_RX_AFF_MASK);

P_UART_INT_ENABLE |= P_UART_ISR_RX_AFF_MASK;

}

0 Likes
1 Solution
Anonymous
Not applicable

I overwrite ws_upgrade_uart_init() and ws_upgrade_uart_interrupt_callback, then  the problem disappeared.

I'm not sure the root cause still.

Diff has no issue before and after.

If I can get the root cause, I'll share

View solution in original post

0 Likes
3 Replies
Anonymous
Not applicable

Have you seen this thread?

Re: puart_write() crashing on BCM20736?

Maybe it helps.

0 Likes
Anonymous
Not applicable

I should change the fist script.

it does  does NOT go entering to interrupt call back often.

0 Likes
Anonymous
Not applicable

I overwrite ws_upgrade_uart_init() and ws_upgrade_uart_interrupt_callback, then  the problem disappeared.

I'm not sure the root cause still.

Diff has no issue before and after.

If I can get the root cause, I'll share

View solution in original post

0 Likes