|
发表于 2015-9-26 22:10:37
|
显示全部楼层
本帖最后由 kinsno 于 2015-9-26 22:13 编辑
/**
* @brief void TFT_Scan()
* @param None
* @retval None
* @备注: TFT_Scan,主程20ms定时扫描;
按照115200bit->15200byte/s -> 15byte/ms ->
我们定义的队列长度为512, 512/15 = 34ms,近乎一半为20ms;
帧结构 : 0x55 + 帧长(1byte) + COM(1byge) + databuf(n byte) + check + 0xaa
0x55 5 [1 2 3 4 5] 6 7
*******************************************************************
**/
//TFT返回消息扫描 , 迪文屏比较二货的机制,不适合这种高密度的发描,完全是大炮大蚊子;
//非得让我在中断使用傻瓜式方法,漏帧是在所难免的!傻瓜式代码名称为TFT_ISR();
void TFT_scan(void)
{
uint8_t readlen = 0,Data_Temp = 0;
uint16_t StAddr = 0,Key_Temp = 0,QueueCounter = 0;
//1.保留指针
StAddr = Queue_GetCurRead(&tftRevQue);
memset(tftBuff,0,FRAME_BUFF_LEN);
//最小帧长不合格,数据未收全
QueueCounter = Queue_GetCounter(&tftRevQue);
if(QueueCounter < Frame_Len)
return ;
//2. 帧头和帧长
if(Queue_Peek_Mult(&tftRevQue,tftBuff,2,StAddr))
{
if((tftBuff[0] == 0xAA)&&(tftBuff[1] == 0x78))//帧头为AA 78
{
//继续侦测
readlen = Frame_Len;
if(Queue_Peek_Mult(&tftRevQue,tftBuff,readlen,StAddr))
{
if( (tftBuff[4] == 0xcc) && //帧尾正确
(tftBuff[5] == 0x33) &&
(tftBuff[6] == 0xc3) &&
(tftBuff[7] == 0x3c)
)
{
memset(tftBuff,0,sizeof(tftBuff));
Queue_Read_Mult(&tftRevQue,tftBuff,readlen);
Key_Temp = tftBuff[2];
Key_Temp*= 256;
Key_Temp += tftBuff[3];
//抛出事件
SchMsg.post(tTouch,Key_Temp);
}
else
Queue_Read_Single(&tftRevQue,&Data_Temp);//改变读指针!
}
else
Queue_Read_Single(&tftRevQue,&Data_Temp);//改变读指针!
}
else
Queue_Read_Single(&tftRevQue,&Data_Temp);//改变读指针!
}
else
Queue_Read_Single(&tftRevQue,&Data_Temp);//改变读指针!
}
|
|