中级会员
 
- 积分
- 273
- 金钱
- 273
- 注册时间
- 2015-3-23
- 在线时间
- 54 小时
|

楼主 |
发表于 2016-1-29 11:57:35
|
显示全部楼层
中断函数如下:
void USART1_IRQHandler(void) //just test
{
//èç1ûóD½óêÕêy¾YμÄÖD¶Ï£¬½óêÕêy¾Y
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
{
if(uart4_i<1032)
{
g_cmdFromUartLow.dat[uart4_i] = USART_ReceiveData(USART1);
uart4_i++;
}
else
{
USART_ReceiveData(USART1);
uart4_i = 0;
}
usart4_rcv_datalen = uart4_i;
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
//èç1û·¢éúòç3ö£¬Ïè¶áSR,Ôù¶áDR¼Ä′æÆ÷£¬¼′¿éÇå3y2»¶ÏèëÖD¶ÏμÄÎêìa
if( (USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)||(USART_GetFlagStatus(USART1,USART_FLAG_FE)==SET)\
||(USART_GetFlagStatus(USART1,USART_FLAG_PE)==SET)||(USART_GetFlagStatus(USART1,USART_FLAG_NE)==SET))
{
USART_GetFlagStatus(USART1,USART_FLAG_ORE); //¶áè¡SR¼Ä′æÆ÷
USART_ReceiveData(USART1); //¶áè¡DR¼Ä′æÆ÷
USART_GetFlagStatus(USART1,USART_FLAG_FE);
USART_ReceiveData(USART1);
USART_GetFlagStatus(USART1,USART_FLAG_PE);
USART_ReceiveData(USART1);
USART_GetFlagStatus(USART1,USART_FLAG_NE);
USART_ReceiveData(USART1);
}
if(uart4_i > len + 8)
{
uart4_i = 0;
}
else if(uart4_i == 1)
{
len = 0;
}
else if(uart4_i == 2) //ÅD¶ÏÖ¡í·
{
if((g_cmdFromUartLow.dat[0] != 0xff)||(g_cmdFromUartLow.dat[1] != 0xff))
uart4_i = 0;
}
else if(uart4_i == 4)
{
if((g_cmdFromUartLow.dat[3] != 0xff)||(g_cmdFromUartLow.dat[2] != 0xff))
uart4_i = 0;
}
else if(uart4_i == 6)
{
if((g_cmdFromUartLow.dat[5] != 0xff)||(g_cmdFromUartLow.dat[4] != 0xff))
uart4_i = 0;
}
else if(uart4_i == 8) //½óêÕÖ¡3¤¶è
{
len = (u16)(g_cmdFromUartLow.dat[6]<<8) + g_cmdFromUartLow.dat[7];
if(len != 1024)
uart4_i = 0;
}
else if(uart4_i == len + 8) //½óêÕíêò»Ö¡êy¾Y
{
uart4_i = 0;
for(uart3_i=0;uart3_i<1024;uart3_i++) //¶Ôÿ¸ö×Ö½ú½øDD±è½Ï
{
temp = (u8)uart3_i;
if(temp != g_cmdFromUartLow.dat[uart3_i+8])
{
err_flag = 1;
}
}
if(err_flag == 1)
{
err_frame = err_frame + 1;
err_flag = 0;
}
dat_frame = dat_frame + 1;
SendByte[1] = (u8) (err_frame >> 56); //½«½óêÕμ½μÄÖ¡êyoí′íÎóÖ¡êyí¨1y′®¿ú·¢Ëí3öè¥
SendByte[2] = (u8) (err_frame >> 48);
SendByte[3] = (u8) (err_frame >> 40);
SendByte[4] = (u8) (err_frame >> 32);
SendByte[5] = (u8) (err_frame >> 24);
SendByte[6] = (u8) (err_frame >> 16);
SendByte[7] = (u8) (err_frame >> 8 );
SendByte[8] = (u8) (err_frame >> 0 );
SendByte[9] = 0xaa;
SendByte[10] = (u8) (dat_frame >> 56);
SendByte[11] = (u8) (dat_frame >> 48);
SendByte[12] = (u8) (dat_frame >> 40);
SendByte[13] = (u8) (dat_frame >> 32);
SendByte[14] = (u8) (dat_frame >> 24);
SendByte[15] = (u8) (dat_frame >> 16);
SendByte[16] = (u8) (dat_frame >> 8 );
SendByte[17] = (u8) (dat_frame >> 0 );
UART1_Send(SendByte,18);
}
}
|
|