unsigned char* read(void)
{
	askAboutSending();
	unsigned char *readBuffer = NULL;
	int statusRxFifoFilling = 0;
	int howManyRead = 0;

	statusRxFifoFilling = USIC_GetRxFIFOFillingLevel(UART001_0_USIC_CH);

	if(((UART001_GetFlagStatus(&UART001_Handle0,UART001_FIFO_STD_RECV_BUF_FLAG)) == UART001_SET))
	{

		statusRxFifoFilling = USIC_GetRxFIFOFillingLevel(UART001_0_USIC_CH);

		if(statusRxFifoFilling != 0)
		{
			readBuffer = (unsigned char *)malloc((sizeof(unsigned char)*statusRxFifoFilling) + 1);

			howManyRead =  UART001_ReadDataBytes(&UART001_Handle0, readBuffer, statusRxFifoFilling);

			readBuffer[statusRxFifoFilling] = '\0';
		}

		UART001_ClearFlag(&UART001_Handle0,UART001_FIFO_STD_RECV_BUF_FLAG);

		while(!USIC_ubIsRxFIFOempty(UART001_0_USIC_CH))
		{
			USIC_FlushRxFIFO(UART001_0_USIC_CH);
		}
	}

	stopAskingAboutSending();

	return readBuffer;
}
Exemplo n.º 2
0
void read(void)
{
	emptyReadData();
	if(((UART001_GetFlagStatus(&UART001_Handle0,UART001_FIFO_STD_RECV_BUF_FLAG)) == UART001_SET))
	{

		IO004_TogglePin(IO004_Handle1);

		statusRxFifoFilling = USIC_GetRxFIFOFillingLevel(UART001_0_USIC_CH);
		howManyRead =  UART001_ReadDataBytes(&UART001_Handle0, readData, statusRxFifoFilling);

		if(strcmp(readData, "LSM9DS1") == 0)
		{
			chosenSensor = 1;
		}
		else if(strcmp(readData, "TEMP_SENSOR") == 0)
		{
			chosenSensor = 2;
		}

		UART001_ClearFlag(&UART001_Handle0,UART001_FIFO_STD_RECV_BUF_FLAG);

		while(!USIC_ubIsRxFIFOempty(UART001_0_USIC_CH))
		{
			USIC_FlushRxFIFO(UART001_0_USIC_CH);
		}

		copyData();
		stopAskingAboutSending();
	}
}
void DaisyChain(void)
{
	uint8_t i=0;
	status_t status=0;
	uint32_t data=0;
	
	static enum MotorState LastmotorState = Stopped;

	if ( motorState == StartUp )
	{
		CharCNT = 0;
		USIC_FlushRxFIFO(UART001_Handle0.UartRegs);
	}

	if ( (LastmotorState == StartUp) && (motorState != Running) )//(motorState == Running)StartUp
	{
		CCU40_CC42->TCCLR |= 0x02;	//定时器清零
		//Start slicesCCU4定时器运行
		CCU40_CC42->TCSET |= 0x01UL;
		
		CharCNT++;
		if ( CharCNT >= 13 )	//能收到连续的13字节完整包
		{
			CharCNT = 0;
			LastmotorState = motorState;
			CCU40_CC42->TCCLR |= 3UL;	//定时器停止运行
			USIC_FlushRxFIFO(UART001_Handle0.UartRegs);///added
		}
		else
		{
			return;
		}
	}
	else
		LastmotorState = motorState;


	//	if (DaisyTimeOut)
	//		StopMotor();

	if(USIC_GetRxFIFOFillingLevel(UART001_Handle0.UartRegs) >= DAISY_BUFFER_SIZE)
	{
		CCU40_CC42->TCCLR |= 3UL;	//定时器停止运行

		//Read data from UART buffer
		UART001_ReadDataBytes(&UART001_Handle0,FifoRecBuffer,DAISY_BUFFER_SIZE);
		//Assumption that communication is lost --> emtpy Receive Buffer
		if (FifoRecBuffer[DAISY_BUFFER_SIZE-1] != DAISY_STOP_BYTE)
		{
			//IO004_TogglePin(IO004_Handle1);
			USIC_FlushRxFIFO(UART001_Handle0.UartRegs);
			return;
		}

		uint8_t cmd = FifoRecBuffer[0];
		uint16_t params =  (FifoRecBuffer[1] << 8 | FifoRecBuffer[2]);

		switch (cmd)
		{
			case START_MOTOR:
				StartMotor();
				break;
			case STOP_MOTOR:
				StopMotor();
				break;
			case SET_REF_CURRENT:
				SetReferenceCurrent(params);
				break;
		}

		for(i=DAISY_MESSAGE_LENGTH; i<DAISY_BUFFER_SIZE-1; i++)
			FifoTransBuffer[i-DAISY_MESSAGE_LENGTH]=FifoRecBuffer[i];

		//Status-Code
		FifoTransBuffer[i-DAISY_MESSAGE_LENGTH]=status;
		i++;
		//Data
		FifoTransBuffer[i-DAISY_MESSAGE_LENGTH]=(uint8_t)(data >> 8);
		i++;
		FifoTransBuffer[i-DAISY_MESSAGE_LENGTH]=(uint8_t)data;
		i++;
		FifoTransBuffer[i-DAISY_MESSAGE_LENGTH]=DAISY_STOP_BYTE;
		DaisyTimeOut = 0;
		DaisyCount++;

		UART001_WriteDataBytes(&UART001_Handle0, FifoTransBuffer, DAISY_BUFFER_SIZE);
	}
Exemplo n.º 4
0
void Initialize()
{

	NVIC002_DisableIRQ(&ESC_UART_RX_NVIC_Handle);

	//Stop Monitoring-Timer
	PWMSP001_Stop(&Monitoring_Timer);

    // initialize device
	MPU9150_Setup();

	delay(1000);   //Delay 4000?

    // initilize controller polynomials
	b_roll[0]=P_roll-I_roll*T-P_roll*N_roll*T+N_roll*I_roll*T*T+D_roll*N_roll;
	b_roll[1]=I_roll*T-2*P_roll+P_roll*N_roll*T-2*D_roll*N_roll;
	b_roll[2]=P_roll+D_roll*N_roll;
	a_roll[0]=1-N_roll*T;
	a_roll[1]=N_roll*T-2;

	b_pitch[0]=P_pitch-I_pitch*T-P_pitch*N_pitch*T+N_pitch*I_pitch*T*T+D_pitch*N_pitch;
	b_pitch[1]=I_pitch*T-2*P_pitch+P_pitch*N_pitch*T-2*D_pitch*N_pitch;
	b_pitch[2]=P_pitch+D_pitch*N_pitch;
	a_pitch[0]=1-N_pitch*T;
	a_pitch[1]=N_pitch*T-2;

	WatchRC_Init(); //Initialize RC watchdog



	#ifdef UART_SC_IF

	uint32_t data=0;

	uint8_t trans = MCI_DAISY_INIT_BYTE;
	uint8_t rec = 0;

	UART001_WriteDataBytes(&ESC_UART_Handle, &trans, 1);

	while (rec != 111)
		while(!UART001_ReadDataBytes(&ESC_UART_Handle, &rec, 1));

	// if init-Byte has been received empty IO buffer
	while(UART001_ReadDataBytes(&ESC_UART_Handle, &rec, 1));

	//Motor 1
	DaisyTransmit[0]=MOTOR_START;
	data=0;
	DaisyTransmit[1]=(uint8_t)(data>>8);
	DaisyTransmit[2]=(uint8_t)data;

	//Motor 2
	DaisyTransmit[3]=MOTOR_START;
	data=0;
	DaisyTransmit[4]=(uint8_t)(data>>8);
	DaisyTransmit[5]=(uint8_t) data;

	//Motor 3
	DaisyTransmit[6]=MOTOR_START;
	data=0;
	DaisyTransmit[7]=(uint8_t)(data>>8);
	DaisyTransmit[8]=(uint8_t) data;

	//Motor 4
	DaisyTransmit[9]=MOTOR_START;
	data=0;
	DaisyTransmit[10]=(uint8_t)(data>>8);
	DaisyTransmit[11]=(uint8_t) data;

	UART001_WriteDataBytes(&ESC_UART_Handle, DaisyTransmit, 12);

	#endif

	PWMSP001_Start(&AttControl_Timer);
}