コード例 #1
0
ファイル: r_cg_serial_user.c プロジェクト: shenzihao6/myqudx
/***********************************************************************************************************************
* Function Name: r_uart0_interrupt_receive
* Description  : This function is INTSR0 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
__interrupt static void r_uart0_interrupt_receive(void)
{
 uint8_t com_data;
    uint8_t err_type;
    static uint8_t _data_len = 0,_data_cnt = 0;
    err_type = (uint8_t)(SSR01 & 0x0007U);
    SIR01 = (uint16_t)err_type;
    com_data = RXD0;
    		if(RxState==0&&com_data==0xAA)
		{
			RxState=1;
			RxBuffer[0]=com_data;
		}
		else if(RxState==1&&com_data==0xAF)
		{
			RxState=2;
			RxBuffer[1]=com_data;
		}
		else if(RxState==2&&com_data>0&&com_data<0XF1)
		{
			RxState=3;
			RxBuffer[2]=com_data;
		}
		else if(RxState==3&&com_data<50)
		{
			RxState = 4;
			RxBuffer[3]=com_data;
			_data_len = com_data;
			_data_cnt = 0;
		}
		else if(RxState==4&&_data_len>0)
		{
			_data_len--;
			RxBuffer[4+_data_cnt++]=com_data;
			if(_data_len==0)
				RxState = 5;
		}
		else if(RxState==5)
		{
			RxState = 0;
			RxBuffer[4+_data_cnt]=com_data;
			Data_Receive_Anl(RxBuffer,_data_cnt+5);
		}
		else
			RxState = 0;
/*  
    if (g_uart0_rx_length > g_uart0_rx_count)
    {
        *gp_uart0_rx_address = rx_data;
        gp_uart0_rx_address++;
        g_uart0_rx_count++;

        if (g_uart0_rx_length == g_uart0_rx_count)
        {
            r_uart0_callback_receiveend();
        }
    }
*/
}
コード例 #2
0
void Nrf_Check_Event(void)
{
	u8 sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS);
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<RX_DR))
	{	
		u8 rx_len = NRF_Read_Reg(R_RX_PL_WID);
		if(rx_len<33)
		{
			NRF_Read_Buf(RD_RX_PLOAD,NRF24L01_RXDATA,rx_len);// read receive payload from RX_FIFO buffer
			LED2_ON
			Data_Receive_Anl(NRF24L01_RXDATA,rx_len);
			
			Nrf_Erro = 0;
		}
		else
		{
			NRF_Write_Reg(FLUSH_RX,0xff);//Çå¿Õ»º³åÇø
		}
	}
	else
	{
		Nrf_Erro ++;
		if(Nrf_Erro>2000)	//³¬¹ý1sδ½ÓÊÕnrfÊý¾Ý £¬ÉÏËø
		{
			Nrf_Erro = 0;
			Rc_C.ARMED = 0;
		}
	}
	
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<TX_DS))
	{
		//LED1_ONOFF();
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<MAX_RT))
	{
		if(sta & 0x01)	//TX FIFO FULL
		{
			NRF_Write_Reg(FLUSH_TX,0xff);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	NRF_Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, sta);
}
コード例 #3
0
ファイル: transfer_app.c プロジェクト: trigrass2/MircoFlyV0.7
void NRF24_Check_Event(void)
{
	rt_uint8_t buff[34];
	rt_uint8_t sta = SPI_Read(NRF_READ_REG + NRFRegSTATUS);

	//rt_kprintf("sta=0x%x\n",sta);
	if(sta & (0x01 << 6))
	{
		rt_uint8_t rx_len = SPI_Read(R_RX_PL_WID);
		if(rx_len<33)
		{
			SPI_Read_Buf(RD_RX_PLOAD,buff,rx_len);// read receive payload from RX_FIFO buffer
			rt_kprintf("Data_Receive:");
			for(rt_uint8_t i=0;i<32;i++)
			{
				rt_kprintf("%c",buff[i]);
			}
			rt_kprintf("\n");
			//LED1_ONOFF();
			Data_Receive_Anl(buff,rx_len);
		}
		else 
		{
			SPI_RW_Reg(FLUSH_RX,0xff);//Çå¿Õ»º³åÇø
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<5))
	{
		//LED1_ONOFF();
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<4))
	{
		if(sta & 0x01)	//TX FIFO FULL
		{
			SPI_RW_Reg(FLUSH_TX,0xff);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	SPI_RW_Reg(RF_WRITE_REG + NRFRegSTATUS, sta);
}
コード例 #4
0
ファイル: CtlFourAxis.c プロジェクト: zcatao/FourAxis
__interrupt void Dat_SendReceive()
{

	temp_buf = UCA0RXBUF;  //读BUF不可清除IFG 要主动清除0
	if(temp_buf == 0xaa)  //判断帧头  PID设置帧
	{
		Pid_Rx_Flag = 1;
	}
	if(Pid_Rx_Flag)
	{
		if(Pid_Rx_Count == 3)  //第四个数据是数据的长度
		{
			Dat_num = temp_buf;
		}
		DatRx[Pid_Rx_Count++] = temp_buf;
		if(Pid_Rx_Count == Dat_num + 4 + 1) //接受了四位帧头 Len位数据 1位Sum
		{
			Data_Receive_Anl(DatRx,Pid_Rx_Count);  //发送数据以及数据总长度
			Pid_Rx_Count = 0;
			Pid_Rx_Flag = 0;
		}
	}


	if(temp_buf == 0xcc)  //控制帧
	{
		Ctl_Rx_Flag = 1;
		TA1CCTL1 &=~ CCIE;
//		Uart_Work_Flag = 1;      //告诉单片串口仍旧正常工作并且能接收到控制帧,收到上位机的控制信息
	}
	if(Ctl_Rx_Flag)
	{
		DatRx[Ctl_Rx_Count++] = temp_buf;
		if(Ctl_Rx_Count == 14)
		{
			TA1CCTL1 |= CCIE;
			Data_Receive_Ctl(DatRx,14);
			Sta_Ctl_Flag = DatRx[13];
			Ctl_Rx_Count = 0;
			Ctl_Rx_Flag = 0;
		}
	}
	UCA0IFG &=~ UCRXIFG;  //清除BUF

}
コード例 #5
0
ファイル: Data_Transfer.c プロジェクト: guruebaran/fly0513
void Nrf_Check_Event(void)
{
	u8 sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS);
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<RX_DR))
	{
		u8 rx_len = NRF_Read_Reg(R_RX_PL_WID);
		if(rx_len<33)
		{
			NRF_Read_Buf(RD_RX_PLOAD,NRF24L01_RXDATA,rx_len);// read receive payload from RX_FIFO buffer
			//LED1_ONOFF();
			Data_Receive_Anl(NRF24L01_RXDATA,rx_len);
		}
		else 
		{
			NRF_Write_Reg(FLUSH_RX,0xff);//Çå¿Õ»º³åÇø
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<TX_DS))
	{
		Ledx_ONOFF(1);
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<MAX_RT))
	{
		if(1)//sta & 0x01)	//TX FIFO FULL
		{
			NRF_Write_Reg(FLUSH_TX,0);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	NRF_Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, sta);
}
コード例 #6
0
ファイル: Usart2.c プロジェクト: YANGXINZHE/1.5FLY
void Uart2_IRQ(void)
{
	if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)//??!????if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)???
    {
        USART_ReceiveData(USART2);
    }
		
	//发送中断
	if((USART2->SR & (1<<7))&&(USART2->CR1 & USART_CR1_TXEIE))//if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET)
	{
		USART2->DR = TxBuffer[TxCounter++]; //写DR清除中断标志          
		if(TxCounter == count)
		{
			USART2->CR1 &= ~USART_CR1_TXEIE;		//关闭TXE中断
			//USART_ITConfig(USART1,USART_IT_TXE,DISABLE);
		}
	}
	//接收中断 (接收寄存器非空) 
	if(USART2->SR & (1<<5))//if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    
	{
		u8 com_data = USART2->DR;
		static u8 _data_len = 0,_data_cnt = 0;
        /*AAAF 03 14   0426  05E1  05F0  0616  0102  0304  0000  0000  0000  0000  9B 
	     AA AF 03 14 04 26 05 E1 05 F0 06 16 01 02 03 04 00 00 00 00 00 00 00 00 9B 
	*/
		if(RxState==0&&com_data==0xAA)
		{
			RxState=1;
			RxBuffer[0]=com_data;
		}
		else if(RxState==1&&com_data==0xAF)
		{
			RxState=2;
			RxBuffer[1]=com_data;
		}
		else if(RxState==2&&com_data>0&&com_data<0XF1)
		{
			RxState=3;
			RxBuffer[2]=com_data;
		}
		else if(RxState==3&&com_data<50)
		{
			RxState = 4;
			RxBuffer[3]=com_data;
			_data_len = com_data;
			_data_cnt = 0;
		}
		else if(RxState==4&&_data_len>0)
		{
			_data_len--;
			RxBuffer[4+_data_cnt++]=com_data;
			if(_data_len==0)
				RxState = 5;
		}
		else if(RxState==5)
		{
			RxState = 0;
			RxBuffer[4+_data_cnt]=com_data;
			Data_Receive_Anl(RxBuffer,_data_cnt+5);
		}
		else
			RxState = 0;
	}
}
コード例 #7
0
ファイル: main.c プロジェクト: Eacaen/Quadrotor
 int main(void)
 {		
	u16 sta , i=0;
	int t = 200;
	delay_init();	    	 //延时函数初始化	
	LED_Init();
	LED0 = 0;delay_ms(200); LED0 = 1;
	LED1 = 0;delay_ms(200); LED1 = 1;
	LED2 = 0;delay_ms(200); LED2 = 1;
	LED3 = 0;delay_ms(200); LED3 = 1;
	 
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(9600);	 	//串口初始化为9600
	 
	EXTIX_Init( );
 	NRF24L01_Init();    	//初始化NRF24L01 
	
	NRF24L01_RX_Mode();		
 	while(NRF24L01_Check() == 1)//检查NRF24L01是否在位.	
	{
			LED3=!LED3;				printf("NRF ERROR!!\r\n");

			delay_ms(100 );
	}
	printf("NRF okk!!\r\n");
	sta=NRF24L01_Read_Reg(STATUS);  //读取状态寄存器的值    	 
	NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,sta); //清除TX_DS或MAX_RT中断标志
	NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器
	
	
	TIM2_PWM_Init(999,9);  //PWM OUT
	TIM3_Int_Init(0xffff,71);  //做计时器用

	IIC_Init();	 
	InitMPU6050();
	Init_HMC5883();
	suanfa_GetOrigin(); //初始欧拉角 
	

	
	TIM4_Int_Init(49,7199);	  		//PID调速中断 放在最后初始化,防止打断角度校准
	LOCK = 1;
	UN_LOCK = 0;
	
	while(1){
		
		
		if(LOCK)
		{
			
			lock();
			LED0 = 0;delay_ms(500);LED0 = 1;
			Power = 0;
			Target_x = 0;
			Target_y = 0;
				
		}
		
		if(UN_LOCK)
		{
			suanfa();
			printf("%.2lf  %.2lf  %.2lf\r\n",EA.Roll,EA.Pitch,EA.Yaw);	
// 			TIM_Cmd(TIM4, ENABLE);
			Data_Receive_Anl();
		}
		
// 		printf("--p\r\n");
			 
			
					}
}