初级会员

- 积分
- 92
- 金钱
- 92
- 注册时间
- 2017-9-25
- 在线时间
- 17 小时
|

楼主 |
发表于 2018-5-21 16:48:56
|
显示全部楼层
这是原子《FreeRTOS实验4-1 FreeRTOS中断测试实验》中usart.c的部分代码。搞不明白,为啥既有中断处理函数,又有中断回调函数。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)//èç1ûêÇ′®¿ú1
{
if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
{
if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
{
if(aRxBuffer[0]!=0x0a)
USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
else
USART_RX_STA|=0x8000; //½óêÕíê3éáË
}
else //»1ûêÕμ½0X0D
{
if(aRxBuffer[0]==0x0d)
USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=aRxBuffer[0] ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))
USART_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
}
}
}
}
}
//′®¿ú1ÖD¶Ï·tÎñ3ìDò
void USART1_IRQHandler(void)
{
u32 timeout=0;
u32 maxDelay=0x1FFFF;
HAL_UART_IRQHandler(&UART1_Handler); //μ÷óÃHAL¿aÖD¶Ï′|àí1«óÃoˉêy
timeout=0;
while (HAL_UART_GetState(&UART1_Handler) != HAL_UART_STATE_READY)//μè′y¾íD÷
{
timeout++;////3¬ê±′|àí
if(timeout>maxDelay) break;
}
timeout=0;
while(HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)//ò»′Î′|àííê3éÖ®oó£¬ÖØD¿aÆôÖD¶Ï2¢éèÖÃRxXferCountÎa1
{
timeout++; //3¬ê±′|àí
if(timeout>maxDelay) break;
}
}
#endif
/*ÏÂÃæ′úÂëÎòÃÇÖ±½ó°ÑÖD¶Ï¿ØÖÆÂß¼-D′ÔúÖD¶Ï·tÎñoˉêyÄú2¿¡£*/
/*
//′®¿ú1ÖD¶Ï·tÎñ3ìDò
void USART1_IRQHandler(void)
{
u8 Res;
if((__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_RXNE)!=RESET)) //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
{
HAL_UART_Receive(&UART1_Handler,&Res,1,1000);
if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
{
if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
else USART_RX_STA|=0x8000; //½óêÕíê3éáË
}
else //»1ûêÕμ½0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
}
}
}
}
HAL_UART_IRQHandler(&UART1_Handler);
}
#endif
*/
|
|