void USART1_IRQHandler(void)
{
uint16_t tmp_uart_data;
uint8_t tmp_rb8;
uint8_t tmp_rcve_data;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到数据
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
// Receive Data register not empty interrupt
tmp_uart_data = USART_ReceiveData( USART1 );
GPIOA->ODR ^= GPIO_Pin_5;//led flicker
if( tmp_uart_data & 0x0100 )
tmp_rb8 = 1;
else
tmp_rb8 = 0;
tmp_rcve_data = (uint8_t)( tmp_uart_data & 0x00ff );
RDM_rcve_control(tmp_rb8,tmp_rcve_data);
}
if(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_TC);
}
}
void RDM_rcve_control(uint8_t rb8,uint8_t usart_rcve_data)
{
switch( rdm_rcve_proceed )
{ // Bag Head Judge
case RDM_RECEIVE_CHECK_SYNC:
if(rb8 == 0) rdm_rcve_proceed = RDM_RECEIVE_START_CODE;//下一步:检测第一个数据
break;
case RDM_RECEIVE_START_CODE://检测第一个数据
rdm_rcve_proceed = RDM_RECEIVE_CHECK_SYNC;
if(rb8 == 1)
{
if(usart_rcve_data == 0x00)//dim data receive
{
rdm_rcve_proceed = DIM_RECEIVE_SLOT_DATA;//下一步:接收dmx回路数据
|