Я посылаю команду WIFI модулю. Он отвечает ОК. Я хочу убедиться что модуль ответил ОК и затем продолжить.
Параллельно у меня подключен терминал и я вижу что команда уходит и возвращается ОК. А в буфере ответа нет хотя флаг о принятии он поднял.
Вот мой код.
Обработчик прерывания для получения ответа.
Код
void LEUART0_IRQHandler(void)
{
if(LEUART0->STATUS & LEUART_STATUS_RXDATAV)
{
uint8_t chr;
chr = LEUART0->RXDATA;
switch(rx_state)
{
case MODEM_RX :
if (chr=='\r')
{
usartRxBuf[rxBufTail] = '\0';
rxBufTail = 0;
modem_messsage_recieved = 1;
}
else
{
if(rxBufTail < BUF_SIZE) //no overflow
usartRxBuf[rxBufTail++] = chr;
}
break;
}
}
А это посылка и ожидание.
Код
void MODEM_SendTxPacket
{
rxBufTail = 0;
rx_state = MODEM_RX;
//send command
LEUART_SendString("AT\r");
//wait for response
while (!modem_messsage_recieved)
{
//some delay
count++;
if (count > 100)
return 0;
}
modem_messsage_recieved = 0; //here I set a breakpoint
MODEM_CheckMessage(usartRxBuf); //buffer is empty
}
uint8_t MODEM_CheckMessage(unsigned char *buff)
{
while(*buff)
{
if(*buff == 'O' && *(buff+1) == 'K')
{
return 1;
}
buff++;
}
}
я попадаю в точку останова на строчке modem_messsage_recieved = 0;
значит буфер по идее принял ответ. но дебагер показывает мне пустой буффер .