/*=====================================================================================================*/ int main( void ) { SystemInit(); GPIO_Config(); #if FLASH_RW_U8 Flash_EraseSector(FLASH_SECTOR_6); Flash_WriteDataU8(FLASH_SECTOR_6, WriteDataU8, 1024); Flash_ReadDataU8(FLASH_SECTOR_6, ReadDataU8, 1024); LED_R = (Cmp_ArrU8(WriteDataU8, ReadDataU8, 1024) == SUCCESS) ? 0 : 1; #endif #if FLASH_RW_U16 Flash_EraseSector(FLASH_SECTOR_6); Flash_WriteDataU16(FLASH_SECTOR_6, WriteDataU16, 512); Flash_ReadDataU16(FLASH_SECTOR_6, ReadDataU16, 512); LED_G = (Cmp_ArrU16(WriteDataU16, ReadDataU16, 512) == SUCCESS) ? 0 : 1; #endif #if FLASH_RW_U32 Flash_EraseSector(FLASH_SECTOR_6); Flash_WriteDataU32(FLASH_SECTOR_6, WriteDataU32, 256); Flash_ReadDataU32(FLASH_SECTOR_6, ReadDataU32, 256); LED_B = (Cmp_ArrU32(WriteDataU32, ReadDataU32, 256) == SUCCESS) ? 0 : 1; #endif Delay_10ms(100); while(1) { LED_R = !LED_R; LED_G = !LED_G; LED_B = !LED_B; Delay_10ms(10); } }
/*=====================================================================================================*/ int main( void ) { SystemInit(); GPIO_Config(); LED_R = 0; if(KEY_WU == 1) { Flash_ErasePage(FLASH_PAGE_ADDR(60)); Delay_10ms(100); } LED_R = 1; while(1) { LED_R = ~LED_R; Delay_10ms(10); if(KEY_BO == 1) { // Write Flash Flash_WritePageU8(FLASH_PAGE_ADDR(60), WriteData, 1024); if(CmpArr_U8(WriteData, ReadData, 1024) == SUCCESS) LED_G = 0; } if(KEY_WU == 1) { // Read Flash Flash_ReadPageU8(FLASH_PAGE_ADDR(60), ReadData, 1024); if(CmpArr_U8(WriteData, ReadData, 1024) == SUCCESS) LED_B = 0; } } }
/*====================================================================================================*/ int main( void ) { uint8_t test = 0x01; GPIO_Config(); SF595_Config(); while(1) { for(test = 0x01; test < 0x80; test = test << 1) { LED_G_Toggle; SF595_SendByte(~test); Delay_10ms(5); } LED_G_Reset; for(test = 0x80; test > 0x01; test = test >> 1) { LED_B_Toggle; SF595_SendByte(~test); Delay_10ms(5); } LED_B_Reset; LED_R_Toggle; if(KEY_BO_Read == 1) SF595_Cmd(ENABLE); if(KEY_WU_Read == 1) SF595_Cmd(DISABLE); } }
/*=====================================================================================================*/ int main( void ) { s16 i = 0; u8 TrData[4][16] = {0}; SystemInit(); System_SetVectorTable(IAP_FLASH_SIZE); GPIO_Config(); RS232_Config(); while(1) { PAO(1) = LED_R; PAO(2) = LED_R; PAO(3) = LED_R; PAO(4) = LED_R; PAO(5) = LED_R; PAO(6) = LED_R; PAO(7) = LED_R; PAO(8) = LED_R; PAO(11) = LED_R; PAO(12) = LED_R; PAO(15) = LED_R; PBO(0) = LED_R; PBO(1) = LED_R; PBO(3) = LED_R; PBO(4) = LED_R; PBO(5) = LED_R; PBO(6) = LED_R; PBO(7) = LED_R; PBO(8) = LED_R; PBO(9) = LED_R; PBO(10) = LED_R; PBO(11) = LED_R; PBO(12) = LED_R; PBO(13) = LED_R; PBO(14) = LED_R; PBO(15) = LED_R; LED_R = ~LED_R; Delay_10ms(10); if(KEY_BO == 1) { LED_G = ~LED_G; Delay_10ms(10); } if(KEY_WU == 1) { LED_B = ~LED_B; Delay_10ms(10); } i++; if(i == 1024) i = -1024; NumToChar(Type_I, 5, TrData[0], i); RS232_Print(USART1, (u8*)"CH1,"); RS232_Print(USART1, TrData[0]); RS232_Print(USART1, (u8*)"\r\n"); } }
uint8_t MPU9250_Init( MPU_InitTypeDef *MPUx ) { uint8_t status = ERROR; uint8_t MPU6500_InitData[MPU6500_InitRegNum][2] = { {0x80, MPU6500_PWR_MGMT_1}, // Reset Device {0x01, MPU6500_PWR_MGMT_1}, // Clock Source {0x30, MPU6500_USER_CTRL}, // Set I2C_MST_EN, I2C_IF_DIS {0x00, MPU6500_PWR_MGMT_2}, // Enable Acc & Gyro {0x07, MPU6500_CONFIG}, // DLPF_CFG[2:0] = 111; {0x18, MPU6500_GYRO_CONFIG}, // +-2000dps {0x08, MPU6500_ACCEL_CONFIG}, // +-4G {0x48, MPU6500_ACCEL_CONFIG_2}, // Set Acc Data Rates {0x10, MPU6500_INT_PIN_CFG}, // Set INT_ANYRD_2CLEAR {0x10, MPU6500_INT_ENABLE}, // {0x4D, MPU6500_I2C_MST_CTRL}, // I2C Speed 400 kHz }; uint8_t AK8963_InitData[AK8963_InitRegNum][2] = { {0x01, AK8963_CNTL2}, // Reset Device {0x06, AK8963_CNTL1}, // Continuous measurement mode 2 }; MPU6500_InitData[5][0] = MPUx->MPU_Gyr_FullScale; // MPU6500_GYRO_CONFIG MPU6500_InitData[4][0] = MPUx->MPU_Gyr_LowPassFilter; // MPU6500_CONFIG MPU6500_InitData[6][0] = MPUx->MPU_Acc_FullScale; // MPU6500_ACCEL_CONFIG MPU6500_InitData[7][0] = MPUx->MPU_Acc_LowPassFilter; // MPU6500_ACCEL_CONFIG_2 AK8963_InitData[1][0] |= MPUx->MPU_Mag_FullScale; for(uint8_t i = 0; i < MPU6500_InitRegNum; i++) { MPU9250_WriteReg(MPU6500_InitData[i][1], MPU6500_InitData[i][0]); Delay_1ms(1); } status = MPU9250_Check(); if(status != SUCCESS) return ERROR; Delay_10ms(1); #ifdef _USE_MAG_AK8963 for(uint8_t i = 0; i < AK8963_InitRegNum; i++) { MPU9250_Mag_WriteReg(AK8963_InitData[i][1], AK8963_InitData[i][0]); Delay_10ms(1); } MPU9250_WriteReg(MPU6500_I2C_SLV0_REG, AK8963_ST1); MPU9250_WriteReg(MPU6500_I2C_SLV0_ADDR, AK8963_I2C_ADDR | 0x80); MPU9250_WriteReg(MPU6500_I2C_SLV0_CTRL, 0x80 | 8); #endif MPU9250_SetSpeed(SPIx_SPEED_HIGH); Delay_10ms(1); return SUCCESS; }
void system_init(void) { LED_Config(); KEY_Config(); RS232_Config(); Motor_Config(); PWM_Capture_Config(); Sensor_Config(); nRF24L01_Config(); #if configSD_BOARD SDIO_Config(); #endif PID_Init(&PID_Yaw); PID_Init(&PID_Roll); PID_Init(&PID_Pitch); PID_Pitch.Kp = +4.0f; PID_Pitch.Ki = 0;//0.002f; PID_Pitch.Kd = +1.5f; PID_Roll.Kp = +4.0f; PID_Roll.Ki = 0;//0.002f; PID_Roll.Kd = 1.5f; PID_Yaw.Kp = +5.0f; PID_Yaw.Ki = +0.0f; PID_Yaw.Kd = +15.0f; Delay_10ms(10); Motor_Control(PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN); #if configFLIGHT_CONTROL_BOARD /* nRF Check */ while ( nRF_Check()== ERROR ); /* Sensor Init */ while(Sensor_Init() == ERROR); #endif Delay_10ms(10); /* Lock */ LED_R = 0; LED_G = 1; LED_B = 1; sys_status = SYSTEM_INITIALIZED; }
/*=====================================================================================================*/ void QCopterFC_Init( void ) { u8 Sta = ERROR; SystemInit(); LED_Config(); KEY_Config(); RS232_Config(); Motor_Config(); Sensor_Config(); nRF24L01_Config(); PID_Init(&PID_Yaw); PID_Init(&PID_Roll); PID_Init(&PID_Pitch); PID_Pitch.Kp = +1.5f; PID_Pitch.Ki = +0.002f; PID_Pitch.Kd = +1.0f; PID_Roll.Kp = +1.5f; PID_Roll.Ki = +0.002f; PID_Roll.Kd = +1.0f; PID_Yaw.Kp = +0.0f; PID_Yaw.Ki = +0.0f; PID_Yaw.Kd = +0.0f; RF_SendData.Packet = 0x00; /* Throttle Config */ if(KEY == KEY_ON) { LED_B = 0; BLDC_CtrlPWM(BLDC_PWM_MAX, BLDC_PWM_MAX, BLDC_PWM_MAX, BLDC_PWM_MAX); } while(KEY == KEY_ON); LED_B = 1; BLDC_CtrlPWM(BLDC_PWM_MIN, BLDC_PWM_MIN, BLDC_PWM_MIN, BLDC_PWM_MIN); /* nRF Check */ while(Sta == ERROR) Sta = nRF_Check(); Delay_10ms(10); /* Sensor Init */ if(Sensor_Init() == SUCCESS) LED_G = 0; Delay_10ms(10); }
/*====================================================================================================*/ int main( void ) { GPIO_Config(); while(1) { LED_3_Set(); LED_1_Reset(); Delay_10ms(8); while(KEY_1_Read()) { LED_1_Toggle(); Delay_10ms(8); } LED_1_Set(); LED_2_Reset(); Delay_10ms(8); while(KEY_2_Read() == 0) { LED_2_Toggle(); Delay_10ms(8); } LED_2_Set(); LED_4_Reset(); Delay_10ms(8); while(KEY_4_Read() == 0) { LED_4_Toggle(); Delay_10ms(8); } LED_4_Set(); LED_3_Reset(); Delay_10ms(8); while(KEY_3_Read() == 0) { LED_3_Toggle(); Delay_10ms(8); } } }
/*=====================================================================================================*/ int main( void ) { GPIO_Config(); W25Q_Config(); Delay_10ms(1); while(W25Q_ReadDeviceID() != W25Q_DEVICE_ID); while(1) { LED_R = !LED_R; LED_G = !LED_G; LED_B = !LED_B; Delay_10ms(5); } }
void applicationInit() { c6dofimu_i2cDriverInit( (T_C6DOFIMU_P)&_MIKROBUS1_GPIO, (T_C6DOFIMU_P)&_MIKROBUS1_I2C, _C6DOFIMU_I2C_ADDR ); Delay_100ms(); /* Initializes */ c6dofimu_writeData( _C6DOFIMU_CTRL1_XL, _C6DOFIMU_CTRL12_CONFIG ); Delay_10ms(); c6dofimu_writeData( _C6DOFIMU_CTRL2_G, _C6DOFIMU_CTRL12_CONFIG ); Delay_10ms(); c6dofimu_writeData( _C6DOFIMU_CTRL3_C, _C6DOFIMU_CTRL3_C_CONFIG ); Delay_10ms(); /* Start write log */ mikrobus_logWrite(" Accel Gyro Temp. °C",_LOG_LINE); mikrobus_logWrite("---------------------------------------------------------", _LOG_LINE); }
/*====================================================================================================*/ int main( void ) { uint8_t i = 0; uint8_t dir = 0; GPIO_Config(); SF138_Config(); while(1) { LED_R_Toggle; LED_G_Toggle; LED_B_Toggle; SF138_WriteData(i); switch(dir) { case 0: i++; if(i == 7) dir = 1; break; case 1: i--; if(i == 0) dir = 0; break; } Delay_10ms(5); while(KEY_BO_Read == 1) SF138_Cmd(ENABLE); while(KEY_WU_Read == 1) SF138_Cmd(DISABLE); } }
/*=====================================================================================================*/ void System_Init( void ) { SystemInit(); LED_Config(); KEY_Config(); RS232_Config(); I2C_Config(); Motor_Config(); nRF24L01_Config(); PID_Init(&PID_Yaw); PID_Init(&PID_Roll); PID_Init(&PID_Pitch); PID_Pitch.Kp = +3.5f; PID_Pitch.Ki = +0.004f; PID_Pitch.Kd = +4.0f; PID_Roll.Kp = +3.5f; PID_Roll.Ki = +0.004f; PID_Roll.Kd = +4.0f; PID_Yaw.Kp = +0.0f; PID_Yaw.Ki = +0.0f; PID_Yaw.Kd = +0.25f; Delay_10ms(2); }
/*=====================================================================================================*/ void System_Init(void) { SystemInit(); LED_Config(); KEY_Config(); RS232_Config(); Motor_Config(); PWM_Capture_Config(); Sensor_Config(); nRF24L01_Config(); PID_Init(&PID_Yaw); PID_Init(&PID_Roll); PID_Init(&PID_Pitch); PID_Pitch.Kp = +1.5f; PID_Pitch.Ki = +0.002f; PID_Pitch.Kd = +1.0f; PID_Roll.Kp = +1.5f; PID_Roll.Ki = +0.002f; PID_Roll.Kd = +1.0f; PID_Yaw.Kp = +0.0f; PID_Yaw.Ki = +0.0f; PID_Yaw.Kd = +0.0f; Delay_10ms(2); }
/*=====================================================================================================*/ int main( void ) { u32 i = PWM_MOTOR_MIN; SystemInit(); GPIO_Config(); PWM_Config(); while(1) { LED_G = ~LED_G; while(KEY_WU == 1) { PWM1 = i; PWM2 = i; PWM3 = i; PWM4 = i; PWM5 = i; PWM6 = i; PWM7 = i; PWM8 = i; PWM9 = i; PWM10 = i; PWM11 = i; i++; if(i>=PWM_MOTOR_MAX) { i = PWM_MOTOR_MIN; LED_R = ~LED_R; } Delay_1us(500); } Delay_10ms(10); } }
/*-----------------------------------------------------------------------------------*/ static void delay(void) { unsigned char i; for(i = 0; i < 1; ++i) { Delay_10ms(1); } }
void NRF_FTLR( void ) // First Tx Last Rx { u8 i = 0; u8 Sta = ERROR; static u8 FSM_STA = 0; switch(FSM_STA) { /************************** FSM Tx **************************************/ case 0: // FSM_Tx // 資料寫入 TX BUF for(i=0; i<32; i++) { TxBuf[i] = RxBuf[i] + i; if(TxBuf[i]>220) TxBuf[i] = 0; } do { Sta = NRF_TxPacket(TxBuf); } while(Sta == NRF_STA_MAX_RT); // FSM_Tx End FSM_STA = 1; break; /************************** FSM Rx **************************************/ case 1: // FSM_Rx NRF_RX_Mode(); Sta = NRF_RxPacket(RxBuf); if(Sta == NRF_STA_RX_DR) { LED_B = !LED_B; } // FSM_Rx End FSM_STA = 2; break; /************************** FSM USART **************************************/ case 2: // FSM_USART Delay_10ms(20); RS232_SendStr((u8*)"\f"); RS232_SendStr((u8*)"***NRF_MODE_FTLR\r\n"); for(i=0; i<32; i++) { RS232_SendStr((u8*)"RxBuf["); RS232_SendNum(Type_D, 2, i); RS232_SendStr((u8*)"] = "); RS232_SendNum(Type_D, 3, TxBuf[i]); RS232_SendStr((u8*)"\r\n"); } RS232_SendStr((u8*)"\r\n"); // FSM_USART End FSM_STA = 0; break; } }
/*=====================================================================================================*/ int main( void ) { SystemInit(); System_SetVectorTable(IAP_FLASH_SIZE); GPIO_Config(); while(1) { LED_B = ~LED_B; Delay_10ms(10); if(KEY_BO == 1) { LED_R = ~LED_R; Delay_10ms(10); } if(KEY_WU == 1) { LED_G = ~LED_G; Delay_10ms(10); } } }
void tts_hal_reset( void ) { #if defined( __GNUC__ ) #else TTS_RST = 0; Delay_10ms(); TTS_RST = 1; Delay_ms( POR_TIME ); #endif }
void system_init(void) { LED_Config(); Serial_Config(Serial_Baudrate); Motor_Config(); PWM_Capture_Config(); //IMU Config Sensor_Config(); nRF24L01_Config(); //SD Config if ((SD_status = SD_Init()) != SD_OK) system.status = SYSTEM_ERROR_SD; PID_Init(&PID_Pitch, 4.0, 0.0, 1.5); PID_Init(&PID_Roll, 4.0, 0.0, 1.5); PID_Init(&PID_Yaw, 5.0, 0.0, 15.0); Delay_10ms(10); Motor_Control(PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN); /* nRF Check */ while (nRF_Check() == ERROR); /* Sensor Init */ while (Sensor_Init() == ERROR); Delay_10ms(10); /* Lock */ SetLED(LED_R, DISABLE); SetLED(LED_G, ENABLE); SetLED(LED_B, ENABLE); //Check if no error if (system.status != SYSTEM_ERROR_SD) system.status = SYSTEM_INITIALIZED; }
void applicationTask() { readData = manometer_getPressure(); Delay_10ms(); mikrobus_logWrite( " Pressure: ", _LOG_TEXT ); IntToStr( readData, textLog ); mikrobus_logWrite( textLog, _LOG_TEXT ); mikrobus_logWrite( " mbar", _LOG_LINE ); readData = manometer_getTemperature(); Delay_10ms(); mikrobus_logWrite( " Temperature: ", _LOG_TEXT ); IntToStr( readData, textLog ); mikrobus_logWrite( textLog, _LOG_TEXT ); mikrobus_logWrite( " °C", _LOG_LINE ); mikrobus_logWrite( "--------------------------", _LOG_LINE ); Delay_1sec(); Delay_1sec(); }
uint8_t MPU6500_Init( MPU_InitTypeDef *MPUx ) { uint8_t status = ERROR; uint8_t MPU6500_InitData[MPU6500_InitRegNum][2] = { {0x80, MPU6500_PWR_MGMT_1}, // Reset Device {0x01, MPU6500_PWR_MGMT_1}, // Clock Source {0x30, MPU6500_USER_CTRL}, // Set I2C_MST_EN, I2C_IF_DIS {0x00, MPU6500_PWR_MGMT_2}, // Enable Acc & Gyro {0x07, MPU6500_CONFIG}, // DLPF_CFG[2:0] = 111; {0x18, MPU6500_GYRO_CONFIG}, // +-2000dps {0x08, MPU6500_ACCEL_CONFIG}, // +-4G {0x48, MPU6500_ACCEL_CONFIG_2}, // Set Acc Data Rates {0x10, MPU6500_INT_PIN_CFG}, // Set INT_ANYRD_2CLEAR {0x10, MPU6500_INT_ENABLE}, // {0x4D, MPU6500_I2C_MST_CTRL}, // I2C Speed 400 kHz }; MPU6500_InitData[5][0] = MPUx->MPU_Gyr_FullScale; // MPU6500_GYRO_CONFIG MPU6500_InitData[4][0] = MPUx->MPU_Gyr_LowPassFilter; // MPU6500_CONFIG MPU6500_InitData[6][0] = MPUx->MPU_Acc_FullScale; // MPU6500_ACCEL_CONFIG MPU6500_InitData[7][0] = MPUx->MPU_Acc_LowPassFilter; // MPU6500_ACCEL_CONFIG_2 for(uint8_t i = 0; i < MPU6500_InitRegNum; i++) { MPU6500_WriteReg(MPU6500_InitData[i][1], MPU6500_InitData[i][0]); Delay_1ms(1); } status = MPU6500_Check(); if(status != SUCCESS) return ERROR; Delay_10ms(1); MPU6500_SetSpeed(SPIx_SPEED_HIGH); Delay_10ms(1); return SUCCESS; }
/*====================================================================================================*/ int main( void ) { uint8_t Count = 0; uint8_t State = 0; GPIO_Config(); SF595_Config(); SF595_Init(); while(1) { nrf_gpio_pin_toggle(LED_1); nrf_gpio_pin_toggle(LED_2); Delay_10ms(10); Count++; switch(State) { case 0: if (Count == 8) { SF595_Shift(0); State = 1; } else { SF595_Shift(0); } break; case 1: if (Count == 16) { SF595_Shift(1); State = 2; } else { SF595_Shift(1); } break; case 2: for(; State>0; State--) { SF595_SendByte(0x00); Delay_100ms(2); SF595_SendByte(0xFF); Delay_100ms(2); } Count = 0; break; } } }
/*=====================================================================================================*/ int main( void ) { GPIO_Config(); PWM_Config(); ADC_Config(); TIM_Config(); while(1) { if(KEY_WU==1){ while(KEY_WU==1); Kp+=1; if(Kp>=20) Kp = 0; Delay_10ms(2); } if(KEY_BO==1){ while(KEY_BO==1); Kd+=0.1; if(Kd>=5) Kd = 0; Delay_10ms(2); } } }
/*====================================================================================================*/ int main( void ) { GPIO_Config(); nrf_gpio_pin_clear(LED_1); nrf_gpio_pin_set(LED_2); nrf_gpio_pin_set(LED_3); nrf_gpio_pin_set(LED_4); Delay_100ms(10); while(1) { while(nrf_gpio_pin_read(KEY_1) == 0) { nrf_gpio_pin_toggle(LED_1); Delay_10ms(8); } while(nrf_gpio_pin_read(KEY_2) == 0) { nrf_gpio_pin_toggle(LED_2); Delay_10ms(8); } while(nrf_gpio_pin_read(KEY_3) == 0) { nrf_gpio_pin_toggle(LED_3); Delay_10ms(8); } while(nrf_gpio_pin_read(KEY_4) == 0) { nrf_gpio_pin_toggle(LED_4); Delay_10ms(8); } nrf_gpio_pin_toggle(LED_1); nrf_gpio_pin_toggle(LED_2); Delay_10ms(8); nrf_gpio_pin_toggle(LED_2); nrf_gpio_pin_toggle(LED_4); Delay_10ms(8); nrf_gpio_pin_toggle(LED_4); nrf_gpio_pin_toggle(LED_3); Delay_10ms(8); nrf_gpio_pin_toggle(LED_3); nrf_gpio_pin_toggle(LED_1); Delay_10ms(8); } }
/*=====================================================================================================*/ int main( void ) { SystemInit(); GPIO_Config(); if(KEY_BO == 1) { IAP_Init(); IAP_Download(); Delay_10ms(10); IAP_JumpToApp(); } else { if(((*(vu32*)(IAP_APP_ADDR)) & 0x2FFE0000 ) == 0x20000000) IAP_JumpToApp(); } while(1) { } }
int main( void ) { uint8_t state = 0; uint32_t i = PWM_MIN; System_Init(); while(1) { i = (state) ? (i - 1) : (i + 1); PWM = i; if(i == PWM_MAX){ state = 1; } if(i == PWM_MIN){ state = 0; Delay_1ms(1000);} LED_R_Toggle(); LED_G_Toggle(); LED_B_Toggle(); Delay_10ms(4); } }
/*=====================================================================================================*/ int main(void) { u8 Sta = ERROR; FSM_Mode FSM_State = FSM_Rx; /* System Init */ System_Init(); test_printf(); /* Throttle Config */ if (KEY == 1) { LED_B = 0; Motor_Control(PWM_MOTOR_MAX, PWM_MOTOR_MAX, PWM_MOTOR_MAX, PWM_MOTOR_MAX); } while (KEY == 1); LED_B = 1; Motor_Control(PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN); /* nRF Check */ while (Sta == ERROR) Sta = nRF_Check(); /* Sensor Init */ if (Sensor_Init() == SUCCESS) LED_G = 0; Delay_10ms(10); /* Systick Config */ if (SysTick_Config(SystemCoreClock / SampleRateFreg)) { // SampleRateFreg = 500 Hz while (1); } /* Wait Correction */ while (SensorMode != Mode_Algorithm); /* Lock */ LED_R = 1; LED_G = 1; LED_B = 1; while (!KEY) { LED_B = ~LED_B; Delay_10ms(1); Transport_Send(TxBuf[0]); printf("Roll%d,Pitch%d,Yaw%d,CH1 %u(%d),CH2 %u(%d),CH3 %u(%d),CH4 %u(%d),CH5 %u()\r\n", (int)AngE.Roll, (int)AngE.Pitch, (int)AngE.Yaw, PWM1_InputCaptureValue, global_rc_roll, PWM2_InputCaptureValue, global_rc_pitch, PWM3_InputCaptureValue, global_rc_thr, PWM4_InputCaptureValue, global_rc_yaw, PWM5_InputCaptureValue); } LED_B = 1; /* Final State Machine */ while (1) { LED_G = ~LED_G; switch (FSM_State) { /************************** FSM Tx ****************************************/ case FSM_Tx: // FSM_Tx nRF_TX_Mode(); do { Sta = nRF_Tx_Data(TxBuf[0]); } while (Sta == MAX_RT); // FSM_Tx End FSM_State = FSM_Rx; break; /************************** FSM Rx ****************************************/ case FSM_Rx: // FSM_Rx nRF_RX_Mode(); Sta = nRF_Rx_Data(RxBuf[0]); if (Sta == RX_DR) { Transport_Recv(RxBuf[0]); } // FSM_Rx End FSM_State = FSM_CTRL; break; /************************** FSM CTRL **************************************/ case FSM_CTRL: // FSM_CTRL CTRL_FlightControl(); // FSM_CTRL End FSM_State = FSM_UART; break; /************************** FSM UART ***************************************/ case FSM_UART: // FSM_USART RS232_VisualScope(USART3, TxBuf[0] + 20, 8); // FSM_USART End FSM_State = FSM_DATA; break; /************************** FSM DATA **************************************/ case FSM_DATA: // FSM_DATA Transport_Send(TxBuf[0]); // FSM_DATA End FSM_State = FSM_Tx; break; } } }
void initRTL8019(void) { unsigned char i, rb; volatile unsigned char *base = (unsigned char *)0x8300; RTL8019setupPorts(); /*#define nic_write writeRTL #define nic_read readRTL*/ /* * Disable NIC interrupts. */ cbi(EIMSK, INT5); /* if(NicReset(base)) return -1;*/ #if 0 /* * Mask all interrupts and clear any interrupt status flag to set the * INT pin back to low. */ nic_write(NIC_PG0_IMR, 0); nic_write(NIC_PG0_ISR, 0xff); /* * During reset the nic loaded its initial configuration from an * external eeprom. On the ethernut board we do not have any * configuration eeprom, but simply tied the eeprom data line to * high level. So we have to clear some bits in the configuration * register. Switch to register page 3. */ nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2 | NIC_CR_PS0 | NIC_CR_PS1); /* * The nic configuration registers are write protected unless both * EEM bits are set to 1. */ nic_write(NIC_PG3_EECR, NIC_EECR_EEM0 | NIC_EECR_EEM1); /* * Disable sleep and power down. */ nic_write(NIC_PG3_CONFIG3, 0); /* * Network media had been set to 10Base2 by the virtual EEPROM and * will be set now to auto detect. This will initiate a link test. * We don't force 10BaseT, because this would disable the link test. */ nic_write(NIC_PG3_CONFIG2, NIC_CONFIG2_BSELB); /* * Reenable write protection of the nic configuration registers * and wait for link test to complete. */ nic_write(NIC_PG3_EECR, 0); /* NutSleep(WAIT500);*/ Delay_10ms(50); /* * Switch to register page 0 and set data configuration register * to byte-wide DMA transfers, normal operation (no loopback), * send command not executed and 8 byte fifo threshold. */ nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2); nic_write(NIC_PG0_DCR, NIC_DCR_LS | NIC_DCR_FT1); /* * Clear remote dma byte count register. */ nic_write(NIC_PG0_RBCR0, 0); nic_write(NIC_PG0_RBCR1, 0); /* * Temporarily set receiver to monitor mode and transmitter to * internal loopback mode. Incoming packets will not be stored * in the nic ring buffer and no data will be send to the network. */ nic_write(NIC_PG0_RCR, NIC_RCR_MON); nic_write(NIC_PG0_TCR, NIC_TCR_LB0); /* * Configure the nic's ring buffer page layout. * NIC_PG0_BNRY: Last page read. * NIC_PG0_PSTART: First page of receiver buffer. * NIC_PG0_PSTOP: Last page of receiver buffer. */ nic_write(NIC_PG0_TPSR, NIC_FIRST_TX_PAGE); nic_write(NIC_PG0_BNRY, NIC_STOP_PAGE - 1); nic_write(NIC_PG0_PSTART, NIC_FIRST_RX_PAGE); nic_write(NIC_PG0_PSTOP, NIC_STOP_PAGE); /* * Once again clear interrupt status register. */ nic_write(NIC_PG0_ISR, 0xff); /* * Switch to register page 1 and copy our MAC address into the nic. * We are still in stop mode. */ nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2 | NIC_CR_PS0); for(i = 0; i < 6; i++) nic_write(NIC_PG1_PAR0 + i, mac[i]); /* * Clear multicast filter bits to disable all packets. */ for(i = 0; i < 8; i++) nic_write(NIC_PG1_MAR0 + i, 0); /* * Set current page pointer to one page after the boundary pointer. */ nic_write(NIC_PG1_CURR, NIC_START_PAGE + TX_PAGES); /* * Switch back to register page 0, remaining in stop mode. */ nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2); /* * Take receiver out of monitor mode and enable it for accepting * broadcasts. */ nic_write(NIC_PG0_RCR, NIC_RCR_AB); /* * Clear all interrupt status flags and enable interrupts. */ nic_write(NIC_PG0_ISR, 0xff); nic_write(NIC_PG0_IMR, NIC_IMR_PRXE | NIC_IMR_PTXE | NIC_IMR_RXEE | NIC_IMR_TXEE | NIC_IMR_OVWE); /* * Fire up the nic by clearing the stop bit and setting the start bit. * To activate the local receive dma we must also take the nic out of * the local loopback mode. */ nic_write(NIC_CR, NIC_CR_STA | NIC_CR_RD2); nic_write(NIC_PG0_TCR, 0); /* NutSleep(WAIT500);*/ Delay_10ms(50); #endif /* 0 */ NicReset(); debug_print(PSTR("Init controller...")); nic_write(NIC_PG0_IMR, 0); nic_write(NIC_PG0_ISR, 0xff); nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2 | NIC_CR_PS0 | NIC_CR_PS1); nic_write(NIC_PG3_EECR, NIC_EECR_EEM0 | NIC_EECR_EEM1); nic_write(NIC_PG3_CONFIG3, 0); nic_write(NIC_PG3_CONFIG2, NIC_CONFIG2_BSELB); nic_write(NIC_PG3_EECR, 0); /* Delay(50000);*/ Delay_10ms(200); nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2); nic_write(NIC_PG0_DCR, NIC_DCR_LS | NIC_DCR_FT1); nic_write(NIC_PG0_RBCR0, 0); nic_write(NIC_PG0_RBCR1, 0); nic_write(NIC_PG0_RCR, NIC_RCR_MON); nic_write(NIC_PG0_TCR, NIC_TCR_LB0); nic_write(NIC_PG0_TPSR, NIC_FIRST_TX_PAGE); nic_write(NIC_PG0_BNRY, NIC_STOP_PAGE - 1); nic_write(NIC_PG0_PSTART, NIC_FIRST_RX_PAGE); nic_write(NIC_PG0_PSTOP, NIC_STOP_PAGE); nic_write(NIC_PG0_ISR, 0xff); nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2 | NIC_CR_PS0); for(i = 0; i < 6; i++) nic_write(NIC_PG1_PAR0 + i, mac[i]); for(i = 0; i < 8; i++) nic_write(NIC_PG1_MAR0 + i, 0); nic_write(NIC_PG1_CURR, NIC_START_PAGE + TX_PAGES); nic_write(NIC_CR, NIC_CR_STP | NIC_CR_RD2); nic_write(NIC_PG0_RCR, NIC_RCR_AB); nic_write(NIC_PG0_ISR, 0xff); nic_write(NIC_PG0_IMR, 0); nic_write(NIC_CR, NIC_CR_STA | NIC_CR_RD2); nic_write(NIC_PG0_TCR, 0); /* Delay(1000000)*/ Delay_10ms(200); nic_write(NIC_CR, NIC_CR_STA | NIC_CR_RD2 | NIC_CR_PS0 | NIC_CR_PS1); rb = nic_read(NIC_PG3_CONFIG0); debug_print8(rb); switch(rb & 0xC0) { case 0x00: debug_print(PSTR("RTL8019AS ")); if(rb & 0x08) debug_print(PSTR("jumper mode: ")); if(rb & 0x20) debug_print(PSTR("AUI ")); if(rb & 0x10) debug_print(PSTR("PNP ")); break; case 0xC0: debug_print(PSTR("RTL8019 ")); if(rb & 0x08) debug_print(PSTR("jumper mode: ")); break; default: debug_print(PSTR("Unknown chip ")); debug_print8(rb); break; } if(rb & 0x04) debug_print(PSTR("BNC\x07 ")); if(rb & 0x03) debug_print(PSTR("Failed\x07 ")); /* rb = nic_read(NIC_PG3_CONFIG1); debug_print8(rb);*/ /* NutPrintFormat(0, "IRQ%u ", (rb >> 4) & 7);*/ /* debug_print("IRQ "); debug_print8((rb >> 4) & 7);*/ rb = nic_read(NIC_PG3_CONFIG2); debug_print8(rb); switch(rb & 0xC0) { case 0x00: debug_print(PSTR("Auto ")); break; case 0x40: debug_print(PSTR("10BaseT ")); break; case 0x80: debug_print(PSTR("10Base5 ")); break; case 0xC0: debug_print(PSTR("10Base2 ")); break; } return; /* HARD_RESET_RTL8019();*/ // do soft reset writeRTL( ISR, readRTL(ISR) ) ; Delay_10ms(5); writeRTL(CR,0x21); // stop the NIC, abort DMA, page 0 Delay_1ms(2); // make sure nothing is coming in or going out writeRTL(DCR, DCR_INIT); // 0x58 writeRTL(RBCR0,0x00); writeRTL(RBCR1,0x00); writeRTL(RCR,0x04); writeRTL(TPSR, TXSTART_INIT); writeRTL(TCR,0x02); writeRTL(PSTART, RXSTART_INIT); writeRTL(BNRY, RXSTART_INIT); writeRTL(PSTOP, RXSTOP_INIT); writeRTL(CR, 0x61); Delay_1ms(2); writeRTL(CURR, RXSTART_INIT); writeRTL(PAR0+0, MYMAC_0); writeRTL(PAR0+1, MYMAC_1); writeRTL(PAR0+2, MYMAC_2); writeRTL(PAR0+3, MYMAC_3); writeRTL(PAR0+4, MYMAC_4); writeRTL(PAR0+5, MYMAC_5); writeRTL(CR,0x21); writeRTL(DCR, DCR_INIT); writeRTL(CR,0x22); writeRTL(ISR,0xFF); writeRTL(IMR, IMR_INIT); writeRTL(TCR, TCR_INIT); writeRTL(CR, 0x22); // start the NIC }
/*=====================================================================================================*/ int main( void ) { u8 Sta = ERROR; FSM_Mode FSM_State = FSM_Rx; /* System Init */ System_Init(); /* Throttle Config */ if(KEY == 1) { LED_B = 0; Motor_Control(PWM_MOTOR_MAX, PWM_MOTOR_MAX, PWM_MOTOR_MAX, PWM_MOTOR_MAX); } while(KEY == 1); LED_B = 1; Motor_Control(PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN, PWM_MOTOR_MIN); /* nRF Check */ while(Sta == ERROR) Sta = nRF_Check(); /* Sensor Init */ if(Sensor_Init() == SUCCESS) LED_G = 0; Delay_10ms(10); /* Systick Config */ if(SysTick_Config(420000)) { // 168MHz / 420000 = 400Hz = 2.5ms while(1); } /* Wait Correction */ while(SensorMode != Mode_Algorithm); /* Lock */ LED_R = 1; LED_G = 1; LED_B = 1; while(!KEY) { LED_B = ~LED_B; Delay_10ms(1); Transport_Send(TxBuf[0]); RS232_VisualScope(USART3, TxBuf[0]+2, 8); } LED_B = 1; /* Final State Machine */ while(1) { LED_G = ~LED_G; switch(FSM_State) { /************************** FSM Tx ****************************************/ case FSM_Tx: // FSM_Tx nRF_TX_Mode(); do { Sta = nRF_Tx_Data(TxBuf[0]); } while(Sta == MAX_RT); // FSM_Tx End FSM_State = FSM_Rx; break; /************************** FSM Rx ****************************************/ case FSM_Rx: // FSM_Rx nRF_RX_Mode(); Sta = nRF_Rx_Data(RxBuf[0]); if(Sta == RX_DR) { Transport_Recv(RxBuf[0]); } // FSM_Rx End FSM_State = FSM_CTRL; break; /************************** FSM CTRL **************************************/ case FSM_CTRL: // FSM_CTRL CTRL_FlightControl(); // FSM_CTRL End FSM_State = FSM_UART; break; /************************** FSM UART ***************************************/ case FSM_UART: // FSM_USART RS232_VisualScope(USART3, TxBuf[0]+2, 8); // FSM_USART End FSM_State = FSM_DATA; break; /************************** FSM DATA **************************************/ case FSM_DATA: // FSM_DATA Transport_Send(TxBuf[0]); // FSM_DATA End FSM_State = FSM_Tx; break; } } }
/*====================================================================================================*/ void ILI9341_Init( void ) { // Reset LCD_RST_L; Delay_100ms(1); LCD_RST_H; Delay_10ms(5); LCD_WriteCmd(0xCB); LCD_WriteData(0x39); LCD_WriteData(0x2C); LCD_WriteData(0x00); LCD_WriteData(0x34); LCD_WriteData(0x02); LCD_WriteCmd(0xCF); LCD_WriteData(0x00); LCD_WriteData(0XC1); LCD_WriteData(0X30); LCD_WriteCmd(0xE8); LCD_WriteData(0x85); LCD_WriteData(0x00); LCD_WriteData(0x78); LCD_WriteCmd(0xEA); LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteCmd(0xED); LCD_WriteData(0x64); LCD_WriteData(0x03); LCD_WriteData(0X12); LCD_WriteData(0X81); LCD_WriteCmd(0xF7); LCD_WriteData(0x20); LCD_WriteCmd(0xC0); // Power control LCD_WriteData(0x23); // VRH[5:0] LCD_WriteCmd(0xC1); // Power control LCD_WriteData(0x10); // SAP[2:0];BT[3:0] LCD_WriteCmd(0xC5); // VCM control LCD_WriteData(0x3e); // 對比度調節 LCD_WriteData(0x28); LCD_WriteCmd(0xC7); // VCM control2 LCD_WriteData(0x86); // -- LCD_WriteCmd(0x36); // Memory Access Control #ifdef H_VIEW LCD_WriteData(0x48); // 豎屏 #else LCD_WriteData(0xE8); // 橫屏 #endif LCD_WriteCmd(0x3A); LCD_WriteData(0x55); LCD_WriteCmd(0xB1); LCD_WriteData(0x00); LCD_WriteData(0x18); LCD_WriteCmd(0xB6); // Display Function Control LCD_WriteData(0x08); LCD_WriteData(0x82); LCD_WriteData(0x27); LCD_WriteCmd(0xF2); // 3Gamma Function Disable LCD_WriteData(0x00); LCD_WriteCmd(0x26); // Gamma curve selected LCD_WriteData(0x01); LCD_WriteCmd(0xE0); // Set Gamma LCD_WriteData(0x0F); LCD_WriteData(0x31); LCD_WriteData(0x2B); LCD_WriteData(0x0C); LCD_WriteData(0x0E); LCD_WriteData(0x08); LCD_WriteData(0x4E); LCD_WriteData(0xF1); LCD_WriteData(0x37); LCD_WriteData(0x07); LCD_WriteData(0x10); LCD_WriteData(0x03); LCD_WriteData(0x0E); LCD_WriteData(0x09); LCD_WriteData(0x00); LCD_WriteCmd(0XE1); // Set Gamma LCD_WriteData(0x00); LCD_WriteData(0x0E); LCD_WriteData(0x14); LCD_WriteData(0x03); LCD_WriteData(0x11); LCD_WriteData(0x07); LCD_WriteData(0x31); LCD_WriteData(0xC1); LCD_WriteData(0x48); LCD_WriteData(0x08); LCD_WriteData(0x0F); LCD_WriteData(0x0C); LCD_WriteData(0x31); LCD_WriteData(0x36); LCD_WriteData(0x0F); LCD_WriteCmd(0x11); // Exit Sleep Delay_10ms(12); LCD_WriteCmd(0x29); // Display on LCD_WriteCmd(0x2C); LCD_Clear(BLACK); LCD_SetBackLight(BLIGHT_DEFAULT); }