int main (void) { uint8_t data = 0; uint32_t len = 0; //SystemClockUpdate(); SystemCoreClockUpdate(); init_i2c(); uart2_init(115200, CHANNEL_A); // Control de flujo: NINGUNO DACInit(); uart2_sendString((uint8_t*)"\r\nModulador PSK\r\n"); while (1) { len = uart2_receive(&data, 1, FALSE); if (len > 0) { uart2_send(&data, 1); procesarBytes(data); } Timer0_Wait(50); } }
//////////////////////////////////////////////////////////////////////////////////////// //初始化串口控制器 void usmart_init(u8 sysclk,u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; #if USMART_ENTIM2_SCAN==1 Timer2_Init(1000,(u32)sysclk*100-1);//分频,时钟为10K ,100ms中断一次 #endif #ifdef USEING_USMART #if USEING_USMART==1 uart_init(bound); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断 #endif #if USEING_USMART==2 uart2_init(bound); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断 #endif #endif usmart_dev.sptype=1; //十六进制显示参数 }
/*================================================================================== * 函 数 名: Set_System * 参 数: None * 功能描述: 初始化系统 * 返 回 值: None * 备 注: * 作 者: gaodb * 创建时间: 2012.10 ==================================================================================*/ void Set_System(void) { rcc_init(); peri_clk_init(); NVIC_Configuration(); pins_init(); systick_init(); timer2_init(); timer4_init(); RAY12_ADC_Init(); LCD_Config(); DispInit(); uart1_init(BAUD_RATE_57600); uart2_init(BAUD_RATE_57600); dac1_init(); sys_variable_init(); }
//Function To Initialize all The Devices void init_devices() { cli(); //Clears the global interrupts port_init(); //Initializes all the ports uart2_init(); //Initailize UART1 for serial communiaction sei(); //Enables the global interrupts }
int main() { delay_init(72); uart1_init(); //串口1 uart2_init(); RCC_Configuration(); GPIO_Configuration(); GPIO_ResetBits(GPIOB, GPIO_Pin_5); //PB=0,LED亮 delay_ms(500); GPIO_SetBits(GPIOB, GPIO_Pin_5); while(1) { delay_ms(1000); printf("State %c\r\n", lock); //串口输出调试 TIME_AREA(); printf("Time :%c%c : %c%c : %c%c%c%c%c \r\n",time[0],time[1],time[2],time[3],time[4],time[5],time[6],time[7],time[8]); //串口输出调试 JWD_AREA(JD); //经度转换 printf("Longitude :%f %c\r\n", D_D,JD_a); //串口输出调试jd JWD_AREA(WD); //纬度转换 printf("Latitude :%f %c\r\n", D_D,WD_a); //串口输出调试wd // printf("卫星 :%s颗\r\n", use_sat); //串口输出调试 // printf("卫星 :%s颗\r\n", total_sat); //串口输出调试 // printf("高度 :%sm\r\n", haiba); //串口输出调试 // printf("海拔 :%sm\r\n", high); //串口输出调试 // printf("速度 :%s节\r\n", speed2); //串口输出调试 // printf("方位 :%s度\r\n", angle); //串口输出调试 } }
ER GPSRec_Open(UART_BAUDRATE BaudRate) { if (bGPSRecOpened) return E_SYS; #if (RECEIVE_FROM_UART2) if (uart2_open() == E_OK) #else if (uart_open() == E_OK) #endif { debug_msg("\r\nUART2: Open success\r\n"); #if (RECEIVE_FROM_UART2) uart2_init(BaudRate, UART_LEN_L8_S1, UART_PARITY_NONE); #else uart_init(BaudRate, UART_LEN_L8_S1, UART_PARITY_NONE); #endif } else { debug_err(("UART2: open fail!\r\n")); return E_SYS; } debug_msg("Start GPS receive task\r\n"); sta_tsk(GPSRECEIVE_ID,0); loc_cpu(); bGPSRecOpened = TRUE; unl_cpu(); return E_OK; }
int main(void) { uint16_t i; FRESULT rc; map_io(); init_port(); InitRTCC(); uart2_init(); xdev_out(uart2_put); xdev_in(uart2_get); dbg_printf("$" PROJECT_NAME "\n"); dbg_printf("$" __DATE__ " " __TIME__ "\n"); rc = f_mount(&fatfs, "", 1); dbg_printf("$FF,f_mount,%s\n", get_rc(rc)); OpenTimer1(T1_PS_1_256 & T1_GATE_OFF & T1_SOURCE_INT & T1_IDLE_CON & T1_ON & T1_SYNC_EXT_OFF, 0xFFFF); ConfigIntTimer1(T1_INT_ON & T1_INT_PRIOR_1); OpenCapture1(IC_IDLE_STOP & IC_TIMER1_SRC & IC_INT_1CAPTURE & IC_EVERY_RISE_EDGE, IC_CASCADE_DISABLE & IC_TRIGGER_ENABLE & IC_UNTRIGGER_TIMER & IC_SYNC_TRIG_IN_DISABLE); ConfigIntCapture1(IC_INT_ON & IC_INT_PRIOR_5); _IC1IF = 0; while (1) { while (_RTCSYNC == 0); while (_RTCSYNC == 1); if (gps_pr > 0) { _T1IE = 0; float f = (float) TMR1 / gps_pr; _T1IE = 1; xprintf("%u\n", (uint16_t) (f * 1000)); } if (ngpslines > 0) { ngpslines--; if (xgets(gps_line, 128)) { xprintf("$GPS%s\n", gps_line); } } } while (0) { while (_RTCSYNC == 0); while (_RTCSYNC == 1); if (gps_pr > 0) { _T1IE = 0; float f = (float) TMR1 / gps_pr; _T1IE = 1; xprintf("%u\n", (uint16_t) (f * 1000)); } } return (EXIT_SUCCESS); }
void uart_init( void ) { #ifdef USE_UART1 uart1_init(); #endif #ifdef USE_UART2 uart2_init(); #endif #ifdef USE_UART3 uart3_init(); #endif }
void init() { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); //LED端口初始化 TIM3_Int_Init(719,4999); //主中断0.03 uart_init(9600); //串口初始化为115200,读上位机数据 uart2_init(9600); //读陀螺仪数据 uart3_init(9600); ENCODE_Init(); //编码器初始化 queue_init(&rx_queue); basketballbot.Control_ID = Global; }
//Function to initialize all the devices void init_devices() { cli(); //Clears the global interrupt port_init(); //Initializes all the ports left_position_encoder_interrupt_init(); right_position_encoder_interrupt_init(); timer4_init(); adc_init(); timer5_init(); store_init(); uart2_init(); TIMSK4 = 0x01; sei(); // Enables the global interrupt }
//---------------------------------------------------------- void init(void) { DDRB = BV(PB0); DDRD = BV(PD1) | BV(PD3) | BV(PD4); uart0_init(); // PC uart1_init(); // internal uart2_init(); // external (via extBus) adc_init(); timer_init(); TB_Callback_setBaud = uart1_set_baud; TB_Init((void*) 0x10); // addr in eeprom with settings pp_init(); sei(); }
void uart_init( void ) { #ifdef USE_UART0 uart0_init(); #endif #ifdef USE_UART1 uart1_init(); #endif //TODO: add uart2 and greater #ifdef USE_UART2 uart2_init(); #endif #ifdef USE_UART3 uart3_init(); #endif }
void wifi_init(u32 band){ // init usart2 PA2,PA3 uart2_init(band); printf("Test1\r\n"); esp_write("AT+GMR\r\n"); while(available() != 0){ printf("%c",read()); } printf("\r\n"); esp_write("AT+CWLAP\r\n"); delay_ms(5000); printf("\r\n"); while(available() != 0){ printf("%c",read()); } printf("\r\n"); }
/** * Initialisation of the display driver * */ void disp_init(void) { int i; uart2_init(); for (i = 0; i < 0x10000; i++) ; /* Reset display state machine */ disp_putc('\r'); /* Clear display */ disp_putc(0x1B); /* Wait a short time */ for (i = 0; i < 0x10000; i++) ; }
void ddk_init(void) { // 1. first, bring buffer enable into well defined state buffer_init(); buf1_enable(); buf2_enable(); buf3_disable(); buf4_disable(); buf5_disable(); buf6_disable(); buf7_disable(); buf8_disable(); // 2. visuals led_init(); led1_clr(); led2_clr(); led3_clr(); led4_clr(); // 3. comms uart0_init(115200, 0); uart1_init(115200, 0); #ifdef WITH_UART2 uart2_init(115200, 0); // temporarily disabled and used as i/o #endif #ifdef WITH_UART3 uart3_init(115200, 0); // temporarily disabled and used as i/o #endif // 4. enable certain buffers if necessary // 5. init misc i/o io_init(); // 6. start fpga io_fpga_enable(); //io_fpga_disable(); // enable systick interrupt. (1msec) SysTick_Config(SystemCoreClock/1000 - 1); /* Generate interrupt each 1 ms */ SYSTICK_Cmd(DISABLE); }
int main(void){ sys_init(); //配置系统时钟72M(包括clock, PLL and Flash configuration) delay_init();//初始化延时 uart1_init(72,9600); uart2_init(36,9600);//时钟为最高时钟的一半 // uart3_init(36,9600);//时钟为最高时钟的一半 led_init(); car_init(); jtag_set(2);//禁止JTAG,释放PB3,PA15 Steering_Init(); uart_printf("ok\r\n"); hwbz_init(); power_init(); while(1){ cmd_handle(); }; return 0; }
void init_devices (void) { cli(); //Clears the global interrupts //for motion port_init(); //for LCD port_init(); adc_init(); //for Xbee uart0_init(); //Initailize UART0 for serial communiaction uart2_init(); //Initailize UART1 for serial communiaction sei(); //Enables the global interrupts }
ER GPSRec_Open(UART_BAUDRATE BaudRate) { if (bGPSRecOpened) return E_SYS; #if (RECEIVE_FROM_UART2) if (uart2_open() == E_OK) #else if (uart_open() == E_OK) #endif { debug_msg("\r\nUART2: Open success\r\n"); #if (RECEIVE_FROM_UART2) uart2_init(BaudRate, UART_LEN_L8_S1, UART_PARITY_NONE); #else uart_init(BaudRate, UART_LEN_L8_S1, UART_PARITY_NONE); #endif } else { debug_err(("UART2: open fail!\r\n")); return E_SYS; } debug_msg("Start GPS receive task\r\n"); //#NT#2011/1/14#philex Lin-begin // init/toggle GPS Data buffer index, // GPS log buffer is double buffering mechanism. GPSRec_DataBufInit(); //#NT#2011/1/14#philex Lin-end sta_tsk(GPSRECEIVE_ID); loc_cpu(); bGPSRecOpened = TRUE; unl_cpu(); return E_OK; }
void main() { unsigned short val = 0; unsigned int show_data = 0; //unsigned short last_data = 0; uart2_init(); init_led(); init_motor(); init_steering(); init_speed(); show_byte(0); //led_vcc_on(); while(1) { // show_byte(0x12,1); if((uart_data >= '0') && (uart_data <= 'z')) { //last_data = val; val = uart_data; } //show_data = (cmd_func << 8) | (val & 0xff); show_data = ((left_dis << 8)&0xff00) | (right_dis & 0xff); //show_data = (left_diff << 8) | (right_diff & 0xff); show_byte(show_data); if(sg_flag == 1) { sg_flag = 0; delay1ms_show(1000 * 3,show_data); if(sg_flag == 0) { //maybe call up() twice in 3s stop_sg(); } } //uart2_send('a'); //uart2_send('b'); //uart2_send('c'); } }
//------------------------------------------------------------------------------- //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up cli(); //disable all interrupts port_init(); uart2_init(); adc_init(); timer1_init(); timer5_init(); lcd_set_4bit(); lcd_init(); spi_init(); // below for lines are important for Encoder init left_position_encoder_interrupt_init(); right_position_encoder_interrupt_init(); EICRB = 0x0A; //pin change int edge 4:7 EIMSK = 0x30; sei(); //re-enable interrupts //all peripherals are now initialized }
void lib_low_level_init() { sytem_clock_init(); #ifdef _GPIO_H_ gpio_init(); #endif #ifdef _UART_H_ uart_init(); #endif #ifdef _UART2_H_ uart2_init(9600); #endif #ifdef _TIMER_H_ timer_init(); #endif #ifdef _PWM_H_ //pwm_init(); #endif #ifdef _I2C_H_ //i2c_0_init(); #endif #ifdef _SPI_H_ //spi_init(); #endif #ifdef _ADC_H_ //adc_init(); #endif }
int main(void) { u16 times=0,i=0; NORMALTIME cur_time; //设置RTC的时间用 //Flash_Write(0x08041000,(u8 *)IndCalib,sizeof(IndCalib)); Flash_Read(0x08041000,(u8 *)IndCalib,sizeof(IndCalib)); delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart1_init(115200); //上位机通信模块 uart2_init(9600); //风速传感器模块 A2 A3 要转为232 //uart3_init(19200); //SD卡模块 (兼职风向-因为3有重映射功能) uart4_init(9600); //称重模块 uart5_init(9600); //AD模块 LED_Init(); //LED端口初始化 KEY_Init(); //初始化与按键连接的硬件接口 SD_init(); OPEN_SD_POWER; CLOSE_SD_POWER; OPEN_SD_POWER; CLOSE_SD_POWER; OPEN_SD_POWER; cur_time.tm_year = 2016; //2016-1900 cur_time.tm_mon = 5; cur_time.tm_mday = 29; cur_time.tm_hour = 23; cur_time.tm_min = 56; cur_time.tm_sec = 2; RTC_Init(cur_time);// while(DS18B20_Init())//初始化DS18B20,兼检测18B20 { printf("DS18B20 Check Failed!"); printf("Please Check! "); } printf("DS18B20 Ready! "); while(1) { if(IS_BUT_DN) { BEEP = 0; } else { BEEP = 1; g_PaOffset= -g_Pa; g_IndValOffset[0]= -Volt2Distance(0,g_IndVal[0]); g_IndValOffset[1]= -Volt2Distance(1,g_IndVal[1]); g_IndValOffset[2]= -Volt2Distance(2,g_IndVal[2]); g_IndValOffset[3]= -Volt2Distance(3,g_IndVal[3]); } if(times%60==0) { windSpeedDirFlag++; sendWindSpeedCmd(); //串口2 带232 //printf("3\r\n"); if(5 == windSpeedDirFlag) { windSpeedDirFlag = 0; } //printf("4\r\n"); //风速的反应慢 一秒钟最多发一次指令 不然传感器要疯掉 if(0 == windSpeedDirFlag) { uart3_init(19200); //SD卡模块 (兼职风向-因为3有重映射功能) g_uart3_used_for_SD = 1; // 日期 时间 位移1, 2, 3, 4 |拉力| 温度 |SD|风速|风向 sprintf(CmdStr,"#01,%02d-%02d-%02d,%02d:%02d:%02d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%1d,%04d,%04d!\r\n", cur_time.tm_year,cur_time.tm_mon,cur_time.tm_mday, cur_time.tm_hour,cur_time.tm_min,cur_time.tm_sec, dateSendtoPC[0],dateSendtoPC[1],dateSendtoPC[2],dateSendtoPC[3], dateSendtoPC[4], dateSendtoPC[6],dateSendtoPC[7],dateSendtoPC[8],dateSendtoPC[9], g_Temper,lastSDerr,g_WindSpeed,g_WindDir); //printf("7\r\n"); lastSDerr = write_string_to_files(CmdStr); } else { //printf("8\r\n"); uart3_init2(9600); //SD卡的usart3 重映射到 PB10 和PB11口 来读风向 g_uart3_used_for_SD = 0; send_byte_to_usart3(0x02);//初始化完后第一个字节会发不成功 sendWindDirCmd();//串口3 } //printf("11\r\n"); cur_time = Time_GetTime(); } if(times%10==0) { //sendWeightLoad1Cmd(); //称重标定代码 //printf("12\r\n"); switch(PC_Wcmd) { case 0x30: //printf("13\r\n"); BEEP = 1; sendWeightZeroCmd(); BEEP = 0; PC_Wcmd = 0; break; case 0x40: //printf("14\r\n"); BEEP = 1; sendWeightLoad1Cmd(); PC_Wcmd = 0; BEEP = 0; break; case 0x41: //printf("15\r\n"); BEEP = 1; sendWeightLoad2Cmd(g_weightCalib[0],g_weightCalib[1]); PC_Wcmd = 0; BEEP = 0; break; default: //printf("16\r\n"); //sendWeightLoad2Cmd(0x27,0x10); sendWeightCmd(); //串口4 break; } BLED3=1; sendADCmd(); //串口5 BLED3=0; dateSendtoPC[0] = g_IndVal[0]; dateSendtoPC[1] = g_IndVal[1]; dateSendtoPC[2] = g_IndVal[2]; dateSendtoPC[3] = g_IndVal[3]; dateSendtoPC[4] = g_PaOffset + g_Pa; dateSendtoPC[6] = g_IndValOffset[0] + Volt2Distance(0,g_IndVal[0]); dateSendtoPC[7] = g_IndValOffset[1] + Volt2Distance(1,g_IndVal[1]); dateSendtoPC[8] = g_IndValOffset[2] + Volt2Distance(2,g_IndVal[2]); dateSendtoPC[9] = g_IndValOffset[3] + Volt2Distance(3,g_IndVal[3]); } switch(PC_cmd) { case 1: BLED2 = 1; // 日期 时间 位移1, 2, 3, 4 |拉力| 温度 |SD|风速|风向 sprintf(CmdStr,"#01,%02d-%02d-%02d,%02d:%02d:%02d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%04d,%d,%04d,%04d!\r\n", cur_time.tm_year,cur_time.tm_mon,cur_time.tm_mday, cur_time.tm_hour,cur_time.tm_min,cur_time.tm_sec, dateSendtoPC[0],dateSendtoPC[1],dateSendtoPC[2],dateSendtoPC[3], dateSendtoPC[4], dateSendtoPC[6],dateSendtoPC[7],dateSendtoPC[8],dateSendtoPC[9], g_Temper,lastSDerr,g_WindSpeed,g_WindDir); send_string_to_usart1(CmdStr); BLED2 = 0; PC_cmd = 0; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: BEEP = 1; sprintf(CmdStr,"#%02x",PC_cmd); for(i=0;i<21;i++) { sprintf(CmdStr,"%s,%+05d",CmdStr,IndCalib[PC_cmd-0x10][i]); } sprintf(CmdStr,"%s!\r\n",CmdStr); send_string_to_usart1(CmdStr); PC_cmd = 0; BEEP = 0; break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: sprintf(CmdStr,"#%02x",PC_cmd-0x10); for(i=0;i<21;i++) { sprintf(CmdStr,"%s,%+05d",CmdStr,IndCalib[PC_cmd-0x20][i]); } sprintf(CmdStr,"%s!\r\n",CmdStr); send_string_to_usart1(CmdStr); PC_cmd = 0; break; } times++; delay_ms(10); } }
void mcu_init(void) { mcu_arch_init(); #ifdef PERIPHERALS_AUTO_INIT sys_time_init(); #ifdef USE_LED led_init(); #endif /* for now this means using spektrum */ #if defined RADIO_CONTROL & defined RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT & defined RADIO_CONTROL_BIND_IMPL_FUNC RADIO_CONTROL_BIND_IMPL_FUNC(); #endif #ifdef USE_UART0 uart0_init(); #endif #ifdef USE_UART1 uart1_init(); #endif #ifdef USE_UART2 uart2_init(); #endif #ifdef USE_UART3 uart3_init(); #endif #ifdef USE_UART4 uart4_init(); #endif #ifdef USE_UART5 uart5_init(); #endif #ifdef USE_I2C0 i2c0_init(); #endif #ifdef USE_I2C1 i2c1_init(); #endif #ifdef USE_I2C2 i2c2_init(); #endif #ifdef USE_ADC adc_init(); #endif #ifdef USE_USB_SERIAL VCOM_init(); #endif #if USE_SPI #if SPI_MASTER #if USE_SPI0 spi0_init(); #endif #if USE_SPI1 spi1_init(); #endif #if USE_SPI2 spi2_init(); #endif #if USE_SPI3 spi3_init(); #endif spi_init_slaves(); #endif // SPI_MASTER #if SPI_SLAVE #if USE_SPI0_SLAVE spi0_slave_init(); #endif #if USE_SPI1_SLAVE spi1_slave_init(); #endif #if USE_SPI2_SLAVE spi2_slave_init(); #endif #if USE_SPI3_SLAVE spi3_slave_init(); #endif #endif // SPI_SLAVE #endif // USE_SPI #ifdef USE_DAC dac_init(); #endif #else INFO("PERIPHERALS_AUTO_INIT not enabled! Peripherals (including sys_time) need explicit initialization.") #endif /* PERIPHERALS_AUTO_INIT */ }
void app_task_gsm (void *p_arg) { unsigned char rec_str[AT_CMD_LENGTH], err_code; unsigned int relay_timer=0, var_int_data = 0; #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr = 0; #endif (void)p_arg; my_icar.mg323.server_ip_port = (unsigned char *)dest_server; my_icar.mg323.power_on = false; my_icar.mg323.gprs_count = 0 ; my_icar.mg323.gprs_ready = false; my_icar.mg323.tcp_online = false; my_icar.mg323.ask_online = false; my_icar.mg323.try_online_cnt = 1; my_icar.mg323.try_online_time = 0; my_icar.mg323.apn_index = NULL; my_icar.mg323.roam = false; my_icar.mg323.cgatt= false; my_icar.mg323.rx_empty = true ; my_icar.mg323.at_timer = OSTime ; my_icar.mg323.ring_count = 0 ; my_icar.mg323.dial_timer=0 ; my_icar.mg323.need_dial = false ; my_icar.mg323.voice_confirm = true ; memset(my_icar.mg323.ip_local, 0x0, IP_LEN); uart2_init( ); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //1,需增加,长时间不能连线,复位GSM模块 //2,Uart2 无反馈时,超时,重置状态 online ... while ( 1 ) { if ( my_icar.mg323.ask_power ) {//ask power on the GSM module if ( !my_icar.mg323.power_on ) { err_code = gsm_power_on() ; if ( err_code == 0 ) { my_icar.mg323.power_on = true; my_icar.mg323.at_timer = OSTime ; //check gprs network also if ( !my_icar.mg323.gprs_ready ) { err_code = gsm_check_gprs( ); if ( err_code == 0 ) { my_icar.mg323.gprs_ready = true; } else { //error, maybe no gprs network or APN error prompt("Reg gprs failure:%d will try later.\r\n",err_code); my_icar.mg323.gprs_ready = false; my_icar.mg323.tcp_online = false ; //save to BK reg save_2g_err(0, GPRS_SETTING); } } } else { //error, maybe no GSM network prompt("GSM power on failure:%d will try later.\r\n",err_code); save_2g_err(0, GSM_HW); gsm_pwr_off( ); } } } else { ;//TBD: power off to save power } if ( my_icar.mg323.power_on ) {//below action need power on //should receive feedback < 10 seconds, because we enquire every sec. if ((OSTime > my_icar.mg323.at_timer) && \ (OSTime - my_icar.mg323.at_timer > 10*AT_TIMEOUT) ) { //GSM module no respond, reset it prompt("\r\nGSM Module no respond, will be reset...%s\tline: %d\r\n",\ __FILE__, __LINE__); save_2g_err(1, NO_RESPOND); gsm_pwr_off( ); } //Check need online or not? if ( my_icar.mg323.ask_online ) { if ( my_icar.mg323.gprs_ready ) { //reset counter my_icar.mg323.gprs_count = 0 ; if ( !my_icar.mg323.tcp_online ) { //no online //try_online <= 4 when normally if ( my_icar.mg323.try_online_cnt%9 == 0 ) {//Try close first prompt("will re-init GSM again... try_online: %d\r\n",my_icar.mg323.try_online_cnt); my_icar.mg323.gprs_count = 0 ; my_icar.mg323.gprs_ready = false; my_icar.mg323.tcp_online = false ; my_icar.mg323.power_on = false; } if ( OSTime - my_icar.mg323.try_online_time > 3*OS_TICKS_PER_SEC ) { my_icar.mg323.try_online_time = OSTime ; //send online command putstring(COM2,"AT^SISO=0\r\n"); //will be return ^SISW: 0,1,1xxx //confirm this return in later c2s_data.check_timer = OSTime ;//Prevent check when offline my_icar.need_sn = true ;//need upload SN my_icar.mg323.try_online_cnt++; prompt("Try %d to online...\r\n",my_icar.mg323.try_online_cnt); } if ( my_icar.mg323.try_online_cnt > MAX_ONLINE_TRY ) {//failure prompt("Try %d to online, still failure, \ reboot GSM module.\r\n",my_icar.mg323.try_online_cnt); //will be auto power on because ask_power is true //need to double check this logic gsm_pwr_off( ); OSTimeDlyHMSM(0, 0, 0, 500); } } } else { //GPRS network no ready putstring(COM2, "AT+CGREG?\r\n"); my_icar.mg323.gprs_count++; //wait... timeout => restart if ( my_icar.mg323.gprs_count > 60 ) {//about 60s save_2g_err(0,NO_GPRS_NET); gsm_pwr_off( ); prompt("Find GPRS network timeout! check %s: %d\r\n",\ __FILE__, __LINE__); //will be auto power on because ask_power is true OSTimeDlyHMSM(0, 0, 1, 0); } } }//end of if ( my_icar.mg323.ask_online )
int main(void) { u8 mybuff[10]; /* HT1621 端口配置 */ HT1621_GPIO_Config (); /* 通用定时器 TIMx,x[2,3,4,5] 定时配置 */ TIMx_Configuration(); /* 配置通用定时器 TIMx,x[2,3,4,5]的中断优先级 */ TIMx_NVIC_Configuration(); /* 通用定时器 TIMx,x[2,3,4,5] 重新开时钟,开始计时 */ macTIM_APBxClock_FUN (macTIM_CLK, ENABLE); HT1621_BL(OFF); //显示背光 HT1621_LED(OFF); //按键背光 Ht1621_clrbuf(); //显示初始化 Ht1621_cls(); //清屏 delay_ms(50); device_state_init(); uart2_init(); #if 0 Ht1621_on_disp(8); //T14 清洗故障 Ht1621_on_disp(9); //T13 光氢故障 Ht1621_on_disp(10); //T12 电机故障 Ht1621_on_disp(11); //T11 静电故障 Ht1621_on_disp(12); //T10 运行故障 Ht1621Display(); //PM2.5位置显示 #endif time_tick_cnt = TICKS_PER_SECOND; time_tick_cnt1 = TICKS_PER_SECOND1; while(1) { Key_Scan(); //按键扫描 onoff_Scan(); //按键开关 cmd_uart_check(); if(time_tick_cnt> TICKS_PER_SECOND ) { for(u8 kk=0;kk<5;kk++) { if(house_id >= 5) house_id = 1; else house_id++; Ht1621Tab3[4]=house_id; //房间号 switch(house_id) { case 1: mybuff[0] = device_work_data.para_type.house1_pm2_5>>8; mybuff[1] = device_work_data.para_type.house1_pm2_5&0xff; mybuff[2] = device_work_data.para_type.house1_co2>>8; mybuff[3] = device_work_data.para_type.house1_co2&0xff; break; case 2: mybuff[0] = device_work_data.para_type.house2_pm2_5>>8; mybuff[1] = device_work_data.para_type.house2_pm2_5&0xff; mybuff[2] = device_work_data.para_type.house2_co2>>8; mybuff[3] = device_work_data.para_type.house2_co2&0xff; break; case 3: mybuff[0] = device_work_data.para_type.house3_pm2_5>>8; mybuff[1] = device_work_data.para_type.house3_pm2_5&0xff; mybuff[2] = device_work_data.para_type.house3_co2>>8; mybuff[3] = device_work_data.para_type.house3_co2&0xff; break; case 4: mybuff[0] = device_work_data.para_type.house4_pm2_5>>8; mybuff[1] = device_work_data.para_type.house4_pm2_5&0xff; mybuff[2] = device_work_data.para_type.house4_co2>>8; mybuff[3] = device_work_data.para_type.house4_co2&0xff; break; case 5: mybuff[0] = device_work_data.para_type.house5_pm2_5>>8; mybuff[1] = device_work_data.para_type.house5_pm2_5&0xff; mybuff[2] = device_work_data.para_type.house5_co2>>8; mybuff[3] = device_work_data.para_type.house5_co2&0xff; break; default: break; } if(mybuff[0]==0&&mybuff[1]==0&&mybuff[2]==0&&mybuff[3]==0) { continue; } else { u16 tmp; tmp = (u16)mybuff[0]<<8; tmp += (u16)mybuff[1]; Ht1621Tab3[0]= tmp/1000; //PM2.5 高位 Ht1621Tab3[1]= tmp%1000/100; //PM2.5 Ht1621Tab3[2]= tmp%1000%100/10; //PM2.5 Ht1621Tab3[3]= tmp%1000%100%10; //PM2.5 低位 tmp = (u16)mybuff[2]<<8; tmp += (u16)mybuff[3]; Ht1621Tab3[10]= tmp/1000; //PM2.5 高位 Ht1621Tab3[9]= tmp%1000/100; //PM2.5 Ht1621Tab3[8]= tmp%1000%100/10; //PM2.5 Ht1621Tab3[7]= tmp%1000%100%10; //PM2.5 低位 break; } } time_tick_cnt = 0; } } }
int main(int argc, char** argv) { int i,r; int rbuf[20]; int data; int format; processor_init(); uart1_init(); uart2_init(); TRISDbits.TRISD0 = 0; TRISBbits.TRISB12 = 0; TRISBbits.TRISB11 = 0; TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 1; TRISBbits.TRISB2 = 1; ADPCFGbits.PCFG0 = 1; ADPCFGbits.PCFG1 = 1; ADPCFGbits.PCFG2 = 1; ledstatus = 0; cb = buffer_init(); while(1) { if ( buffer_full(cb) ) /* Signal buffer overflow */ PORTDbits.RD0 = 1; if ( !buffer_empty(cb) ) { int data; /* Get a 'char' from the buffer */ buffer_read(cb, &data); if ( data & 0x0100 ) { format = (~PORTB) & 0x3; /* Print the last sentence and begin reading the new one */ PORTBbits.RB12 = 1; //transmit_raw_buffer(rbuf, r); process_seatalk_string(rbuf, r, format); PORTBbits.RB12 = 0; r = 0; rbuf[r++] = data; } else { /* Accumulate data into the buffer */ //printf("rx: %x\n",data); rbuf[r++] = data; } } } return (EXIT_SUCCESS); }
/*! * Board specific initialization. */ static void __init mx6_evk_init(void) { u32 i; mxc_iomux_v3_setup_multiple_pads(mx6sl_brd_pads, ARRAY_SIZE(mx6sl_brd_pads)); elan_ts_init(); gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; imx6q_add_imx_snvs_rtc(); imx6q_add_imx_i2c(0, &mx6_evk_i2c0_data); imx6q_add_imx_i2c(1, &mx6_evk_i2c1_data); i2c_register_board_info(0, mxc_i2c0_board_info, ARRAY_SIZE(mxc_i2c0_board_info)); /* setting sii902x address when hdmi enabled */ if (hdmi_enabled) { for (i = 0; i < ARRAY_SIZE(mxc_i2c1_board_info); i++) { if (!strcmp(mxc_i2c1_board_info[i].type, "sii902x")) { mxc_i2c1_board_info[i].addr = 0x39; break; } } } i2c_register_board_info(1, mxc_i2c1_board_info, ARRAY_SIZE(mxc_i2c1_board_info)); /* only camera on I2C3, that's why we can do so */ if (csi_enabled == 1) { mxc_register_device(&csi_v4l2_devices, NULL); imx6q_add_imx_i2c(2, &mx6_evk_i2c2_data); i2c_register_board_info(2, mxc_i2c2_board_info, ARRAY_SIZE(mxc_i2c2_board_info)); } /* SPI */ imx6q_add_ecspi(0, &mx6_evk_spi_data); spi_device_init(); mx6sl_evk_init_pfuze100(0); imx6q_add_anatop_thermal_imx(1, &mx6sl_anatop_thermal_data); mx6_evk_init_uart(); /* get enet tx reference clk from FEC_REF_CLK pad. * GPR1[14] = 0, GPR1[18:17] = 00 */ mxc_iomux_set_gpr_register(1, 14, 1, 0); mxc_iomux_set_gpr_register(1, 17, 2, 0); imx6_init_fec(fec_data); platform_device_register(&evk_vmmc_reg_devices); imx6q_add_sdhci_usdhc_imx(1, &mx6_evk_sd2_data); imx6q_add_sdhci_usdhc_imx(0, &mx6_evk_sd1_data); imx6q_add_sdhci_usdhc_imx(2, &mx6_evk_sd3_data); mx6_evk_init_usb(); imx6q_add_otp(); imx6q_add_mxc_pwm(0); imx6q_add_mxc_pwm_backlight(0, &mx6_evk_pwm_backlight_data); if (hdmi_enabled) { imx6dl_add_imx_elcdif(&hdmi_fb_data[0]); } else { imx6dl_add_imx_elcdif(&wvga_fb_data[0]); gpio_request(MX6_BRD_LCD_PWR_EN, "elcdif-power-on"); gpio_direction_output(MX6_BRD_LCD_PWR_EN, 1); mxc_register_device(&lcd_wvga_device, NULL); } imx6dl_add_imx_pxp(); imx6dl_add_imx_pxp_client(); mxc_register_device(&max17135_sensor_device, NULL); setup_spdc(); if (csi_enabled) { imx6sl_add_fsl_csi(); } else { if (!spdc_sel) imx6dl_add_imx_epdc(&epdc_data); else imx6sl_add_imx_spdc(&spdc_data); } imx6q_add_dvfs_core(&mx6sl_evk_dvfscore_data); imx6q_init_audio(); /* uart2 for bluetooth */ #ifdef SXSDMAN_BLUETOOTH_ENABLE if (uart4_enabled) uart4_init(); #else if (uart2_enabled) uart2_init(); #endif mxc_register_device(&mxc_bt_rfkill, &mxc_bt_rfkill_data); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata); imx6sl_add_imx_keypad(&mx6sl_evk_map_data); imx6q_add_busfreq(); imx6sl_add_dcp(); imx6sl_add_rngb(); imx6sl_add_imx_pxp_v4l2(); mxc_spdif_data.spdif_core_clk = clk_get_sys("mxc_spdif.0", NULL); clk_put(mxc_spdif_data.spdif_core_clk); imx6q_add_spdif(&mxc_spdif_data); imx6q_add_spdif_dai(); imx6q_add_spdif_audio_device(); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); /* Register charger chips */ platform_device_register(&evk_max8903_charger_1); pm_power_off = mx6_snvs_poweroff; imx6q_add_pm_imx(0, &mx6sl_evk_pm_data); if (imx_ion_data.heaps[0].size) platform_device_register_resndata(NULL, "ion-mxc", 0, NULL, 0, \ &imx_ion_data, sizeof(imx_ion_data) + sizeof(struct ion_platform_heap)); }
int main() { /* receive enable aktivieren, data deaktivieren */ DDRD = (1 << PD4) | (1 << PD5) | (1 << PD6) | (1 << PD7); PORTD = (1 << PD6); /* Ziffernfeld-pins (PA0-PA7) als Eingang schalten */ DDRA = 0; PORTA = 0xFF; /* LEDs und Summer als Ausgang schalten */ DDRB = (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4); /* Selbst-Test: Alle LEDs hintereinander für 250 ms aktivieren, ebenso den Summer */ PORTB = 0; _delay_ms(250); PORTB = (1 << PB0); _delay_ms(250); PORTB = (1 << PB1); _delay_ms(250); PORTB = (1 << PB2); _delay_ms(250); PORTB = (1 << PB3); _delay_ms(250); PORTB = (1 << PB4); _delay_ms(250); PORTB = 0; memset((void*)ibuffer, '\0', sizeof(ibuffer)); uart2_init(); uart2_puts("Initializing RS485\r\n"); uart1_init(); uart2_puts("Waiting for LCD...\r\n"); lcd_init(LCD_DISP_ON); uart2_puts("initialized LCD\r\n"); lcd_clrscr(); lcd_puts("pinpad ready\nself-test ok"); uart2_puts("done. now accepting cmds\r\n"); /* Timer aufsetzen: nach 1 ms soll der Interrupt ausgelöst werden. */ /* 8 bit counter (TIMER0) */ /* normal mode */ TCCR0A = 0; /* CLK/64 */ TCCR0B = (1 << CS01) | (1 << CS00); /* timer ticks: 250 */ TCNT0 = 5; TIMSK0 = (1 << TOIE0); TIFR0 = (1 << TOV0); sei(); int c; char keypress_buffer[COMMAND_BUFFER_SIZE + 2] = "^PAD c $\r\n"; char bufcopy[COMMAND_BUFFER_SIZE]; for (;;) { /* Handle commands received on the UART */ if (ibuffer[sizeof(ibuffer)-2] == '$') { strncpy(bufcopy, (const char *)ibuffer, sizeof(bufcopy)); /* change the end of packet marker in memory so that the next * packet will be accepted by the RX interrupt handler */ ibuffer[sizeof(ibuffer)-2] = '\0'; handle_command(bufcopy); } uint8_t sample = (PINA | (1 << 3)); bool button_debounced = true; for (c = 0; c < sizeof(lookup_table) / sizeof(struct lookup_entry); c++) { if (sample != lookup_table[c].state || lookup_table[c].debounce != DEBOUNCE_MS) { button_debounced = false; continue; } keypress_buffer[5] = lookup_table[c].key; uart_puts(keypress_buffer); lookup_table[c].debounce = DEBOUNCE_MS+1; } if (button_debounced) { _delay_ms(80); } } }
/*! * Board specific initialization. */ static void __init mx6_evk_init(void) { u32 i; mxc_iomux_v3_setup_multiple_pads(mx6sl_brd_pads, ARRAY_SIZE(mx6sl_brd_pads)); #ifdef CONFIG_MX6_INTER_LDO_BYPASS gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; #else gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; pu_reg_id = mx6sl_evk_dvfscore_data.pu_id; mx6_cpu_regulator_init(); #endif imx6q_add_imx_snvs_rtc(); imx6q_add_imx_i2c(0, &mx6_evk_i2c0_data); imx6q_add_imx_i2c(1, &mx6_evk_i2c1_data); /* setting sii902x address when hdmi enabled */ switch (display_panel_mode) { case PANEL_MODE_EINK: for (i = 0; i < ARRAY_SIZE(mxc_i2c0_board_info); i++) if (!strcmp(mxc_i2c0_board_info[i].type, "max17135")) mxc_i2c0_board_info[i].addr = 0x48; for (i = 0; i < ARRAY_SIZE(mxc_i2c0_board_info); i++) if (!strcmp(mxc_i2c0_board_info[i].type, "elan-touch")) mxc_i2c0_board_info[i].addr = 0x10; elan_ts_init(); mxc_register_device(&max17135_sensor_device, NULL); setup_spdc(); if (!spdc_sel) imx6dl_add_imx_epdc(&epdc_data); else imx6sl_add_imx_spdc(&spdc_data); break; case PANEL_MODE_HDMI: for (i = 0; i < ARRAY_SIZE(mxc_i2c1_board_info); i++) if (!strcmp(mxc_i2c1_board_info[i].type, "sii902x")) mxc_i2c1_board_info[i].addr = 0x39; #ifdef CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF//[ imx6dl_add_imx_elcdif(&hdmi_fb_data[0]); #endif //]CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF mxc_spdif_data.spdif_core_clk = clk_get_sys("mxc_spdif.0", NULL); clk_put(mxc_spdif_data.spdif_core_clk); imx6q_add_spdif(&mxc_spdif_data); imx6q_add_spdif_dai(); imx6q_add_spdif_audio_device(); break; case PANEL_MODE_LCD: #ifdef CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF//[ imx6dl_add_imx_elcdif(&wvga_fb_data[0]); #endif //]CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF gpio_request(MX6_BRD_LCD_PWR_EN, "elcdif-power-on"); gpio_direction_output(MX6_BRD_LCD_PWR_EN, 1); mxc_register_device(&lcd_wvga_device, NULL); break; default: pr_err("Error display_panel_mode\n"); } i2c_register_board_info(0, mxc_i2c0_board_info, ARRAY_SIZE(mxc_i2c0_board_info)); i2c_register_board_info(1, mxc_i2c1_board_info, ARRAY_SIZE(mxc_i2c1_board_info)); /* only camera on I2C2, that's why we can do so */ if (csi_enabled == 1) { mxc_register_device(&csi_v4l2_devices, NULL); imx6q_add_imx_i2c(2, &mx6_evk_i2c2_data); i2c_register_board_info(2, mxc_i2c2_board_info, ARRAY_SIZE(mxc_i2c2_board_info)); } /* SPI */ imx6q_add_ecspi(0, &mx6_evk_spi_data); spi_device_init(); mx6sl_evk_init_pfuze100(0); imx6q_add_anatop_thermal_imx(1, &mx6sl_anatop_thermal_data); mx6_evk_init_uart(); /* get enet tx reference clk from FEC_REF_CLK pad. * GPR1[14] = 0, GPR1[18:17] = 00 */ mxc_iomux_set_gpr_register(1, 14, 1, 0); mxc_iomux_set_gpr_register(1, 17, 2, 0); imx6_init_fec(fec_data); platform_device_register(&evk_vmmc_reg_devices); imx6q_add_sdhci_usdhc_imx(1, &mx6_evk_sd2_data); imx6q_add_sdhci_usdhc_imx(0, &mx6_evk_sd1_data); imx6q_add_sdhci_usdhc_imx(2, &mx6_evk_sd3_data); mx6_evk_init_usb(); imx6q_add_otp(); imx6q_add_mxc_pwm(0); imx6q_add_mxc_pwm_backlight(0, &mx6_evk_pwm_backlight_data); #ifdef CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF//[ imx6dl_add_imx_elcdif(&wvga_fb_data[0]); #endif //] CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF gpio_request(MX6_BRD_LCD_PWR_EN, "elcdif-power-on"); gpio_direction_output(MX6_BRD_LCD_PWR_EN, 1); mxc_register_device(&lcd_wvga_device, NULL); imx6dl_add_imx_pxp(); imx6dl_add_imx_pxp_client(); if (csi_enabled) { imx6sl_add_fsl_csi(); } imx6q_add_dvfs_core(&mx6sl_evk_dvfscore_data); imx6q_init_audio(); /* uart2 for bluetooth */ if (uart2_enabled) uart2_init(); //mxc_register_device(&mxc_bt_rfkill, &mxc_bt_rfkill_data); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata); imx6sl_add_device_buttons(); imx6sl_add_imx_keypad(&mx6sl_evk_map_data); imx6q_add_busfreq(); imx6sl_add_dcp(); imx6sl_add_rngb(); imx6sl_add_imx_pxp_v4l2(); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); /* Register charger chips */ platform_device_register(&evk_max8903_charger_1); pm_power_off = mx6_snvs_poweroff; }
int main (void) { /* variables for the UART0 (USB connection) */ unsigned int c = 0, c2 = 0, c3 = 0; // Variable for reading UARTS char buffer[MAX_MSG_SIZE]; char buffer2[MAX_MSG_SIZE]; char buffer3[MAX_MSG_SIZE]; int idx = 0, idx2 = -1, idx3 = -1; int len2 = 0; int len3 = 0; char meas_buffer[TX_BUFF_SIZE]; int txi = 0; int txtop=0; unsigned int i = 0; char *ptr; unsigned char hli_mutex = 0; unsigned int gps = 0; unsigned int imu = 0; signed int ratio = 0; uint16_t xacc = 0; uint8_t xacca[2]; char s[64]; char rmc[256]; awake_flag = 0; #ifdef RF_TEST_IDX uint8_t gps_rf_test_idx = 0; uint8_t imu_rf_test_idx = 0; #endif /* set outputs */ PORTL = 0xff; // Turn off LEDS DDRL = (1<<LED1) | (1<<LED2) | (1<<LED3) | (1<<LED4); // Set pins for LED as output pwm_init(); spiInit(); /* initialize UARTS */ uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); // USB connection uart2_init( UART_BAUD_SELECT(UART2_BAUD_RATE,F_CPU) ); // APC220 radio uart3_init( UART_BAUD_SELECT(UART3_BAUD_RATE,F_CPU) ); // UP-501 GPS /* Interrupt stuff for ADIS */ PCICR |= 1<<PCIE2; // Enable interrupt PORTK PCMSK2 |= (1<<PCINT23); // interrupt in PCINT23 /* now enable interrupt, since UART library is interrupt controlled */ sei(); spiTransferWord(0xBE80); // ADSI software reset _delay_ms(500); /* Set GPS to a faster baud and update UART speed */ //uart3_puts("$PMTK251,115200*1F"); uart3_puts("$PMTK251,57600*2C\r\n"); //uart3_puts("$PMTK251,38400*27"); //uart3_puts("$PMTK251,0*28"); _delay_ms(500); // uart3_init( UART_BAUD_SELECT(115200,F_CPU) ); uart3_init( UART_BAUD_SELECT(57600,F_CPU) ); //uart3_init( UART_BAUD_SELECT(38400,F_CPU) ); /* 115200 seems to be a little bit unstable, at least testing via radio*/ adis_reset_factory(); adis_set_sample_rate(); while (1) { /* Read each UART serially and check each of them for data, if there is handle it */ c = uart_getc(); c2 = uart2_getc(); c3 = uart3_getc(); // Stop motors when connection is lost if (awake_flag > AWAKE_THRESHOLD) { pwm_set_duty(RC1, 0 ); pwm_set_duty(RC2, 0 ); }; if(tx_counter >= TX_READY) { //empty buffer for (txi = 0; txi < txtop; txi++) { uart2_putc(meas_buffer[txi]); // Sending buffered data to RF } txtop = 0; #ifdef AUTO_SHUTDOWN_ENABLE awake_flag++; #endif PORTL ^= (1<<LED2); tx_counter -= TX_READY; } if (adis_ready_counter >= ADIS_READY) { adis_decode_burst_read_pack(&adis_data_decoded); adis_reduce_decoded_burst(); // Reduce data ammount #ifdef LOG_ENABLE hli_send(package(sizeof(adis8_t), 0x14, 0x0D, &adis_data_decoded), sizeof(adis8_t)); // Log to SD card #endif #ifdef RF_TEST_IDX memcpy(&adis_data_decoded_reduced.zgyro[0],&imu_rf_test_idx,1); if (imu_rf_test_idx == 255) imu_rf_test_idx = 1; else imu_rf_test_idx++; memcpy(&meas_buffer[txtop], (char *)package(sizeof(adis8_reduced_t), 0x14, 0x0F, &adis_data_decoded_reduced),sizeof(adis8_reduced_t)+6); #endif #ifndef RF_TEST_IDX memcpy(&meas_buffer[txtop], (char *)package(sizeof(adis8_reduced_t), 0x14, 0x0E, &adis_data_decoded_reduced),sizeof(adis8_reduced_t)+6); #endif txtop=txtop+sizeof(adis8_reduced_t)+6; adis_ready_counter -= ADIS_READY; PORTL ^= (1<<LED4); } /* Reading from radio */ if ( c2 & UART_NO_DATA ) {} else // Data available { //if data is $, set a flag, read next byte, set that value as the length, read while incrementing index until length reached, parse //uart_putc(c2); if (idx2 == 0) { // We should buffer a packet len2 = c2+5; // Set length } if ( (idx2 < len2) && (idx2 >= 0)) { // We are buffering buffer2[idx2] = c2; idx2++; if (idx2 == len2) { // We now have a full packet if (parse(&rfmsg, buffer2)) { PORTL ^= (1<<LED1); process(&rfmsg); } idx2 = -1; // Set flag in new packet mode #ifdef DEBUG //puts_msg(&rfmsg); #endif } } if (c2 == '$') { // We have a possible message comming // PORTL ^= (1<<LED4); idx2 = 0; // Set "flag" } } /* Reading from GPS */ if ( c3 & UART_NO_DATA ) {} else // Data available { /* Transmitting NMEA GPS sentences to the HLI */ if (c3 == '$') { // We have a possible message comming //PORTL ^= (1<<LED3); len3 = 0; // Set "flag" } if (len3 >= 0) { // We are buffering buffer3[len3] = c3; len3++; if (c3 == '\n') { // We now have a full packet if(buffer3[4] != 'S') { // Disable GSV and GSA messages #ifdef LOG_ENABLE hli_send(package(len3, 0x1E, 0x06, buffer3), len3); // Log to SD card #endif if (rmc_cut(buffer3,rmc)) { // Invalid RMC data } else { #ifdef RF_TEST_IDX memcpy(&rmc[0],&gps_rf_test_idx,1); if (gps_rf_test_idx == 255) gps_rf_test_idx = 1; else gps_rf_test_idx++; memcpy(&meas_buffer[txtop], (char *)package(rmc_idx, 30, 31, rmc),rmc_idx+6); #endif #ifndef RF_TEST_IDX memcpy(&meas_buffer[txtop], (char *)package(rmc_idx, 30, 6, rmc),rmc_idx+6); #endif txtop=txtop+rmc_idx+6; PORTL ^= (1<<LED3); } len3 = -1; // Set flag in new packet mode } } } } } return 1; }