#define RECEIVE_MAX 2040
typedef struct
{
uint8_t receiveFinsh;
uint16_t len;
char rxBuff[RECEIVE_MAX];
}usartReceiveDataType;
__IO uint8_t receiveTimeStart = FALSE;
__IO uint32_t receiveTimecnt = 0;
extern usartReceiveDataType receiveData;//这个不用管 是WIFI ERH公用的
//串口过来数据就直接放入!仅此而已!
void L506_usart_receive_byte( uint8_t ch)
{
receiveTimeStart = TRUE;
receiveTimecnt =0;
//putchar(ch);
receiveData.rxBuff[receiveData.len++] = ch;
if ( receiveData.len > RECEIVE_MAX)
{
log(WARN,"recv too length\n");
memset(&receiveData , 0x00 ,sizeof(usartReceiveDataType));
}
}
//配合上面串口接收使用 给串口减轻压力 类似于人造了空闲中断
//receiveTimecnt 只有有数据过来receiveTimecnt暴力为0 一旦空闲就会receiveTimecnt++ >= 2
void L506_usart_timer_isr(void)
{
if( receiveTimeStart)
{
if( receiveTimecnt++ >= 2 )
{
receiveTimeStart = FALSE;
receiveTimecnt =0;
xSemaphoreGiveFromISR( xUsartNetSemaphore, &xHigherPriorityTaskWoken );
portEND_SWITCHING_ISR(xHigherPriorityTaskWoken );//这里就是相等于空闲中断!一整数据OK!不是全局变量是信号!
}
}
}
void L506_init(void)
{
printf("\r\n\r\n\r\n%s\r\n\r\n\r\n",__FUNCTION__);
L506Port = serial.open("serial2");
if( L506Port == NULL)
{
beep.write(BEEP_ALARM);
return ;
}
pin_ops.pin_mode(GSM_POWER_PIN , PIN_MODE_OUTPUT);
pin_ops.pin_write(GSM_POWER_PIN ,PIN_LOW);
serial.init(L506Port , 115200 ,L506_usart_receive_byte);
timer.creat(1 , TRUE , L506_usart_timer_isr);
}