串口模型-TOUCH框架直接使用案例

#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);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值