/******************************************************************** **dryloop通讯模块文件 ********************************************************************/ #include "type.h" #include "config.h" #include "lcd_task.h" #include "i2c_drv.h" #include "delay.h" #include "eeprom.h" #include "dryloop.h" #include "fpga.h" #if USE_DRY_LOOP #include "os_task.h" extern S_ATSC_PARA atsc_para; extern uint32 update_flag; extern uint8 off_rf; BOOL dryloop_version_flag = FALSE; extern S_DRYLOOP dryloop_status; #if USE_DRYLOOP_I2C==0 //串口模式 static void dryloop_uart_init_send_buf(uint8 cmd); static uint8 dryloop_sendbuf[DRYLOOP_UART_BUF_MAX_LEN]; extern uint8 get_check_sum(void * p, uint32 len); extern uint32 uart_com_init(uint32 com_num,uint32 baud,UART_PARITY verify,uint32 int_sw); extern void uart_send_string(uint32 port,const uint8 *pbuf,uint32 len); void dryloop_uart_send_cmd(DRYLOOP_CMD_TYPE cmd,void *pdata) { pS_DRYLOOP_UART_PROTOCOL puart_send = (pS_DRYLOOP_UART_PROTOCOL)dryloop_sendbuf; uint32 len = 0; dryloop_uart_init_send_buf((uint8)cmd); switch(cmd) { case DRYLOOP_CMD_SET_TS: case DRYLOOP_CMD_SET_RF: case DRYLOOP_CMD_SET_SYS:case DRYLOOP_CMD_SET_FWD: puart_send->data_len = 1; puart_send->other[0] = *(uint8*)pdata; break; case DRYLOOP_CMD_GET_VER: case DRYLOOP_CMD_GET_RF: case DRYLOOP_CMD_GET_POWER: case DRYLOOP_CMD_GET_AMP: puart_send->data_len = 0; break; default: return; } GET_UART_LEN_BY_DATA_LEN(puart_send->data_len,len); puart_send->other[puart_send->data_len] = get_check_sum((uint8*)puart_send,len-2); puart_send->other[puart_send->data_len+1] = DRYLOOP_UART_COMM_HEAD; if(len) { uart_send_string(DRYLOOP_UART_NUM,(uint8*)puart_send,len); } dryloop_printf("%s:Send cmd:%d\n",__FUNCTION__,cmd); } void dryloop_uart_get_version(void) { static uint32 tick_bak = 0; if(check_delay_over(&tick_bak,DRYLOOO_CHECK_VERSION)==FALSE) return; dryloop_uart_send_cmd(DRYLOOP_CMD_GET_VER,NULL); } //由于串口的慢速性,每次只能发1条命令,本处只负责发 static uint32 dryloop_uart_get_status(void) { static uint32 tick_bak = 0; static S_DRYLOOP_GET_STATUS dryloop_get_status ={FALSE,0,}; //判断条件: 1.100ms执行一次,2.当前tick内,没有执行send操作; if(check_delay_over(&tick_bak,DRYLOOO_CHECK_CYCLE)==FALSE) return 0; if(dryloop_get_status.rf_need_get) { dryloop_get_status.rf_need_get = FALSE; dryloop_get_status.rf_get_tick = get_sys_tick(); dryloop_uart_send_cmd(DRYLOOP_CMD_GET_RF,NULL); return 1; } if(dryloop_get_status.power_need_get) { dryloop_get_status.power_need_get = FALSE; dryloop_get_status.power_get_tick = get_sys_tick(); dryloop_uart_send_cmd(DRYLOOP_CMD_GET_POWER,NULL); return 1; } if(dryloop_get_status.amp_need_get) { dryloop_get_status.amp_need_get = FALSE; dryloop_get_status.amp_get_tick = get_sys_tick(); dryloop_uart_send_cmd(DRYLOOP_CMD_GET_AMP,NULL); return 1; } //到此处,说明全部读取完, 检查延时,重新读取 if(dryloop_get_status.rf_get_tick+DRYLOOP_GET_CHECK_CYCLE*2header = DRYLOOP_UART_COMM_HEAD; puart_send->data_len = 0; puart_send->cmd = cmd&DRYLOOP_UART_PROTOCOL_ANS_CMD; } uint32 dryloop_proc_protocol(uint8* pbuf) { uint32 len = 0; pS_DRYLOOP_UART_PROTOCOL puart_ptc = (pS_DRYLOOP_UART_PROTOCOL)pbuf; uint8 cmd = 0; uint8 rf_mute = 0,power = 0; uint8 amp = 0; if(pbuf==NULL) return 0; if(0==(puart_ptc->cmd &(DRYLOOP_UART_PROTOCOL_ANS_OK|DRYLOOP_UART_PROTOCOL_ANS_ERR))) //非应答命令 { } else //应答命令 { //需判断错误与正常状态字 cmd = puart_ptc->cmd&DRYLOOP_UART_PROTOCOL_ANS_CMD; switch(cmd) { case 0x01: //设置TS状态 dryloop_printf("%s:set TS ans ok!\n",__FUNCTION__); break; case 0x02: //设置RF状态 dryloop_printf("%s:set RF ans ok!\n",__FUNCTION__); break; case 0x03: //设置SYS状态 dryloop_printf("%s:set SYS LED ans ok!\n",__FUNCTION__); break; case 0x04: //查询版本号 if( ((puart_ptc->other[0]) == 0) || ((puart_ptc->other[2]) == 0) || ((puart_ptc->other[3]) == 0) ) { dryloop_version_flag = FALSE; dryloop_printf("%d\n",puart_ptc->other[0]); } else { atsc_para.rg_para.dryloop[0] = puart_ptc->other[0]; //版本号 if(atsc_para.rg_para.dryloop[0]==0x02) atsc_para.rg_para.dryloop[0]=10; atsc_para.rg_para.dryloop[1] = puart_ptc->other[1]; //年 atsc_para.rg_para.dryloop[2] = puart_ptc->other[2]; //月 atsc_para.rg_para.dryloop[3] = puart_ptc->other[3]; //日 返回的均为十进制模式 dryloop_printf("%d\n",puart_ptc->other[0]); dryloop_printf("%d\n",puart_ptc->other[1]); dryloop_printf("%d\n",puart_ptc->other[2]); dryloop_printf("%d\n",puart_ptc->other[3]); dryloop_version_flag = TRUE; init_version_info(); //暂时直接调用 } break; case 0x10: //查询RF开关状态 rf_mute = puart_ptc->other[0]; dryloop_printf("TEST rf_mute %d\n", rf_mute ); if(rf_mute>=2) //0 1 { dryloop_status.rf=INVALID_DATA; break; } dryloop_status.rf=rf_mute; #if USE_NEW_DIO_MODE if(atsc_para.ad3_para.rc_cmd==0) //IO { if(atsc_para.ad3_para.mptv) {//MPTV -> tx on/off 功放射频开关 if(atsc_para.mptv.tx_crm_is_dio){ atsc_para.mptv.dio_tx = rf_mute; //dryloop_amp_on(rf_mute); //由send_status发送 } } else {//LPTV ->本地激励器视频开关 if(rf_mute==1) //OFF->ON { if(rf_mute!=atsc_para.rf_para.rf) { dryloop_printf("%s:GET TX:%d!\n",__FUNCTION__,rf_mute); dryloop_amp_on(TRUE); //show_wait_info_with_sec(atsc_para.wj_para.rf_dly); atsc_para.rf_para.rf = 1; off_rf = 0; fpga_set_rf_output(atsc_para.rf_para.rf); } else { break; } } else if(rf_mute==0) //ON->OFF { if(rf_mute!=atsc_para.rf_para.rf) { atsc_para.rf_para.rf = 0; setbit(off_rf,_PIN_DRYLOOP); fpga_set_rf_output(0); //show_wait_info_with_sec(atsc_para.wj_para.rf_dly); dryloop_amp_on(FALSE); dryloop_printf("%s:GET TX:%d!\n",__FUNCTION__,rf_mute); } else { break; } } c256_bytewrite(EEPROM_RF_ADDR,atsc_para.rf_para.rf); } } else { dryloop_status.rf=INVALID_DATA; } #else if(atsc_para.wh_para.func==0) //TX模式 { if(atsc_para.ad3_para.rc_cmd==0) //IO { if((atsc_para.rf_para.tx==0)&&(rf_mute==1)) //OFF->ON { dryloop_printf("%s:GET TX:%d!\n",__FUNCTION__,rf_mute); dryloop_amp_on(TRUE); show_wait_info_with_sec(atsc_para.wj_para.rf_dly); if(atsc_para.wj_para.rf_dly>2) { delay_ms(2000); } else { delay_ms(1000*atsc_para.wj_para.rf_dly); } atsc_para.rf_para.rf = 1; off_rf = 0; fpga_set_rf_output(atsc_para.rf_para.rf); } else if((atsc_para.rf_para.tx==1)&&(rf_mute==0)) //ON->OFF { atsc_para.rf_para.rf = 0; setbit(off_rf,_PIN_DRYLOOP); fpga_set_rf_output(0); show_wait_info_with_sec(atsc_para.wj_para.rf_dly); if(atsc_para.wj_para.rf_dly>2) { delay_ms(2000); } else { delay_ms(1000*atsc_para.wj_para.rf_dly); } dryloop_amp_on(FALSE); dryloop_printf("%s:GET TX:%d!\n",__FUNCTION__,rf_mute); } atsc_para.rf_para.tx = rf_mute; c256_bytewrite(EEPROM_RF_ADDR,atsc_para.rf_para.rf); c256_bytewrite(EEPROM_RF_TX,atsc_para.rf_para.tx); } } else //EX模式 相比于TX 没有rf_dly { if(atsc_para.ad3_para.rc_cmd==0) //IO { if((atsc_para.rf_para.tx==0)&&(rf_mute==1)) //OFF->ON { dryloop_printf("%s:GET TX:%d!\n",__FUNCTION__,rf_mute); dryloop_amp_on(TRUE); atsc_para.rf_para.rf = 1; off_rf = 0; fpga_set_rf_output(atsc_para.rf_para.rf); } else if((atsc_para.rf_para.tx==1)&&(rf_mute==0)) //ON->OFF { atsc_para.rf_para.rf = 0; setbit(off_rf,_PIN_DRYLOOP); fpga_set_rf_output(0); dryloop_amp_on(FALSE); dryloop_printf("%s:GET TX:%d!\n",__FUNCTION__,rf_mute); } atsc_para.rf_para.tx = rf_mute; c256_bytewrite(EEPROM_RF_ADDR,atsc_para.rf_para.rf); c256_bytewrite(EEPROM_RF_TX,atsc_para.rf_para.tx); } } #endif break; case 0x11: //查询功率按键状态 power = puart_ptc->other[0]; dryloop_printf("TEST power %d\n", power ); if(atsc_para.ad3_para.rc_cmd) //不是IO模式,不能修改功率 break; #if USE_NEW_DIO_MODE //新的DIO逻辑,若功放处于REMOTE状态,且TX_CRM为IO模式,会返回1,否则返回0 if((atsc_para.mptv.tx_crm_is_dio!=1)&&(atsc_para.ad3_para.mptv)) //必须是在MPTV模式下,LPTV不考虑DIO模式 { break; } #endif if(power == 0) //dryloop代码处理功率按键时存在错误,此处power==1应为power_down power==0应为power_up { dryloop_printf("%s:GET POWER UP!\n",__FUNCTION__); dryloop_status.power = 1; if(atsc_para.wj_para.p_c) { if((atsc_para.rf_para.poweratsc_para.rf_para.power)) { atsc_para.rf_para.power++; atsc_para.rf_para.db++; e2rom_save_power(&atsc_para.rf_para); fpga_save_power(&atsc_para.we_para,&atsc_para.rf_para); if(atsc_para.rf_para.agc) //由OFF->ON时发送 判断有效标志 { fpga_save_agc_vol(); } #if USE_NEW_DIO_MODE atsc_para.mptv.power_diff++; #endif } } else { if((atsc_para.rf_para.poweratsc_para.rf_para.power)) { atsc_para.rf_para.power++; atsc_para.rf_para.db++; e2rom_save_power(&atsc_para.rf_para); fpga_save_power(&atsc_para.we_para,&atsc_para.rf_para); if(atsc_para.rf_para.agc) //由OFF->ON时发送 判断有效标志 { fpga_save_agc_vol(); } #if USE_NEW_DIO_MODE atsc_para.mptv.power_diff++; #endif } } } else if(power == 1) { dryloop_printf("%s:GET POWER DOWN!\n",__FUNCTION__); dryloop_status.power = 0; if((atsc_para.rf_para.power>0)&&(atsc_para.rf_para.db>0)) { atsc_para.rf_para.power--; atsc_para.rf_para.db--; e2rom_save_power(&atsc_para.rf_para); fpga_save_power(&atsc_para.we_para,&atsc_para.rf_para); if(atsc_para.rf_para.agc) //由OFF->ON时发送 判断有效标志 { fpga_save_agc_vol(); } #if USE_NEW_DIO_MODE atsc_para.mptv.power_diff--; #endif } } else { dryloop_status.power = INVALID_DATA; } break; case 0x12: //查询AMP按键状态' //ATSC5000 COR 恒为1 amp = puart_ptc->other[0]; dryloop_printf("TEST amp %d\n", amp ); if(amp<2) { dryloop_status.amp=amp; if(atsc_para.wh_para.func==0) //TX模式 { dryloop_printf("%s:GET AMP %d!\n",__FUNCTION__,amp); atsc_para.log_para.amp=amp; } } else { atsc_para.log_para.amp=1; dryloop_status.amp=INVALID_DATA; } break; default: //未知命令 break; } } return len; } //检查对应串口中是否有待处理报文 void dryloop_uart_buf_check(uint8* pbuf,uint32 len) { uint8 *pputbuf; pputbuf = dryloop_uart_protocol_valid(pbuf,len); if(pputbuf!=NULL) //假设每次只收到一个有效报文 { dryloop_proc_protocol(pputbuf); } } void dryloop_amp_on(BOOL flag) { int i; BOOL rf = flag; for(i=0; i<8; i++) //间隔发三次,确保成功亮灯 { dryloop_uart_send_cmd(DRYLOOP_CMD_SET_RF,&rf); delay_ms(35); } } #endif /***************************************************************************** 函 数 名 : dryloop_check 功能描述 : 周期性的读取dryloop的按键状态 输入参数 : void 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年9月19日 作 者 : 郭金涛 修改内容 : 新生成函数 *****************************************************************************/ void dryloop_check(void) { #if USA_ATSC_5X uint8 power_down = 0,power_up=0; uint8 amp = 0; uint8 cor_bak; #endif uint8 rf_mute; //判断条件: 1.100ms执行一次,2.当前tick内,没有执行send操作; #if AW_ATSC_5X rf_mute = dryloop_read(0); //读取RF //show_cycle_tick(tick_bak); //0:off 1:on 2:异常 3:未连接 dryloop_status.rf=rf_mute; if(rf_mute<2) { if(atsc_para.ad3_para.rc_cmd==0) //IO { if((rf_mute==1)&&(rf_mute!=atsc_para.rf_para.rf)) //OFF->ON { dryloop_write(DRYLOOP_I2C_RF_LED,1); //show_wait_info_with_sec(atsc_para.wj_para.rf_dly); atsc_para.rf_para.rf = 1; fpga_set_rf_output(atsc_para.rf_para.rf); off_rf = 0 ; } else if((rf_mute==0) && (rf_mute!=atsc_para.rf_para.rf)) //ON->OFF { atsc_para.rf_para.rf = 0; fpga_set_rf_output(0); //show_wait_info_with_sec(atsc_para.wj_para.rf_dly); dryloop_write(DRYLOOP_I2C_RF_LED,0); atsc_para.latch_para.rf = 1; setbit(off_rf,_PIN_DRYLOOP); } c256_bytewrite(EEPROM_RF_ADDR,atsc_para.rf_para.rf); } } #else rf_mute = dryloop_read(0); //读取RF power_up = dryloop_read(1); //读取power_down power_down = dryloop_read(2); //读取power_up amp = dryloop_read(7); //DPDsel OR amp if(rf_mute<=2) { dryloop_status.rf=rf_mute; if(rf_mute<2) { if(atsc_para.wh_para.func==0) //TX模式 { if(atsc_para.ad3_para.rc_cmd==0) //IO 能通过dryloop改TX和RF { if((atsc_para.rf_para.tx==0)&&(rf_mute==1)) //OFF->ON { dryloop_write(DRYLOOP_I2C_RF_LED,1); show_wait_info_with_sec(atsc_para.wj_para.rf_dly); atsc_para.rf_para.rf = 1; //fpga_byte_write(0x0 ,0x01); fpga_set_rf_output(atsc_para.rf_para.rf); off_rf = 0 ; } else if((atsc_para.rf_para.tx==1)&&(rf_mute==0)) //ON->OFF { atsc_para.rf_para.rf = 0; //fpga_byte_write(0x0 ,0x01); fpga_set_rf_output(0); show_wait_info_with_sec(atsc_para.wj_para.rf_dly); dryloop_write(DRYLOOP_I2C_RF_LED,0); atsc_para.latch_para.rf = 1; setbit(off_rf,_PIN_DRYLOOP); } atsc_para.rf_para.tx = rf_mute; c256_bytewrite(EEPROM_RF_ADDR,atsc_para.rf_para.rf); c256_bytewrite(EEPROM_RF_TX,atsc_para.rf_para.tx); } } else //EX模式 { atsc_para.rf_para.rf = rf_mute; //printf("case it :%d\n",atsc_para.rf_para.rf); fpga_set_rf_output(atsc_para.rf_para.rf); c256_bytewrite(EEPROM_RF_ADDR,atsc_para.rf_para.rf); } } } else { dryloop_status.rf=INVALID_DATA; } if(amp<2) { dryloop_status.amp=amp; cor_bak = atsc_para.ad3_para.cor; if(atsc_para.wh_para.func==0) //TX模式 { atsc_para.log_para.amp=amp; } else //EX模式 DPD { atsc_para.ad3_para.cor=amp; //保存新cor函数 if(cor_bak != amp) { save_new_cor(amp); } c256_bytewrite(EEPROM_AD3_TYPE,amp); } } else { atsc_para.log_para.amp=1; dryloop_status.amp=INVALID_DATA; } if((power_up==0)&&((power_down!=0)&&(power_down!=4))) { if(atsc_para.ad3_para.rc_cmd != 0) return; if(atsc_para.wj_para.p_c) { if((atsc_para.rf_para.poweratsc_para.rf_para.power)) { atsc_para.rf_para.power++; atsc_para.rf_para.db++; e2rom_save_power(&atsc_para.rf_para); fpga_save_power(&atsc_para.we_para,&atsc_para.rf_para); if(atsc_para.rf_para.agc) //由OFF->ON时发送 判断有效标志 { fpga_save_agc_vol(); } } } else { if((atsc_para.rf_para.poweratsc_para.rf_para.power)) { atsc_para.rf_para.power++; atsc_para.rf_para.db++; e2rom_save_power(&atsc_para.rf_para); fpga_save_power(&atsc_para.we_para,&atsc_para.rf_para); if(atsc_para.rf_para.agc) //由OFF->ON时发送 判断有效标志 { fpga_save_agc_vol(); } } } #if SHOW_DEBUG_INFO key_time++; #endif return; } if(((power_up!=0)&&(power_up!=4))&&(power_down==0)) { if(atsc_para.ad3_para.rc_cmd != 0) return; if((atsc_para.rf_para.power>0)&&(atsc_para.rf_para.db>0)) { atsc_para.rf_para.power--; atsc_para.rf_para.db--; e2rom_save_power(&atsc_para.rf_para); fpga_save_power(&atsc_para.we_para,&atsc_para.rf_para); if(atsc_para.rf_para.agc) //由OFF->ON时发送 判断有效标志 { fpga_save_agc_vol(); } } return; } if((power_up==4)||(power_down==0)||(power_up==0)||(power_down==4)) dryloop_status.power = 2; else dryloop_status.power = INVALID_DATA; #endif } /***************************************************************************** 函 数 名 : dryloop_send 功能描述 : 向dryloop发送当前系统状态(TS SYS,RF) 输入参数 : void 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年9月19日 作 者 : 郭金涛 修改内容 : 新生成函数 *****************************************************************************/ void dryloop_send(void) { uint8 UC_temp21=0; uint8 ts = 0; S_ASI_INPUT asi_input; uint8 tmp; uint8 off_ts=0; uint8 off_1pps=0; uint8 off_10ms=0; dryloop_write(DRYLOOP_I2C_FWD_ADDR,atsc_para.log_para.fwd); #if AW_ATSC_5X UC_temp21 = fpga_byte_read(0x1,0x26); //sys info ts = fpga_byte_read(0x1,0x54); //ts asi_input.input = (ASI_GRP_STATE)atsc_para.log_para.asi_input; asi_input.status = (ASI_INPUT_STATE)(atsc_para.log_para.input_ok_flag?0:1); if((asi_input.status!=ASI_ERR)&&((ts&1)==0)) //ASI ts { //Dryloop_Write(0x10,1); off_ts = 0; } else { //Dryloop_Write(0x10,0); off_ts = 1; atsc_para.latch_para.ts = 1; } if(UC_temp21&0x40) //RF { dryloop_write(DRYLOOP_I2C_RF_LED,1); } else { dryloop_write(DRYLOOP_I2C_RF_LED,0); } tmp = fpga_byte_read(0x1,0x56); if(tmp&0x08) //bit3 off_1pps = 1; else off_1pps = 0; if(tmp&0x04) //bit2 atsc_para.log_para.use_gps = 1; //INT模式 else atsc_para.log_para.use_gps = 0; //EXT模式 if(atsc_para.log_para.use_gps) //int模式 { tmp = fpga_byte_read(0x1,0x8a); atsc_para.log_para.gps_status = tmp&0x0f; if(tmp&0x10) { off_10ms = 0;//locked; } else { off_10ms = 1; } } else //ext { tmp = fpga_byte_read(0x1,0x56); if(tmp&0x01) { off_10ms = 0; //locked; } else { off_10ms = 1; } } ////////////////////////////// if(UC_temp21&0x40) //RF { if(atsc_para.wh_para.func==1) { off_rf = 0; } } else { if(atsc_para.rf_para.rf) { off_rf = 0 ;//清错误 if((atsc_para.ad2_para.m_ts) && (off_ts)) { setbit(off_rf,_MISS_TS); } if((atsc_para.ad2_para.m_10m) && (off_10ms)) { if(off_rf) { setbits(off_rf,_MISS_10M) ; } else { setbit(off_rf,_MISS_10M) ; } } if((atsc_para.ad2_para.m_1pps) && (off_1pps)) { if(off_rf) { setbits(off_rf,_MISS_1PPS) ; } else { setbit(off_rf,_MISS_1PPS); } } if (!(atsc_para.ad2_para.m_ts || atsc_para.ad2_para.m_10m || atsc_para.ad2_para.m_1pps)) setbit(off_rf,_MISS_OTHER); } atsc_para.latch_para.rf = 1; } if((off_rf==0) && (atsc_para.rf_para.rf==0)) setbit(off_rf,_KEY_RF); ////////////////////////////// if(UC_temp21&0x80) { //Dryloop_Write(0x12,0); //SYS ERR atsc_para.latch_para.sys = 1; } else { //Dryloop_Write(0x12,1); //正常 } #else UC_temp21 = fpga_byte_read(0x1,0x26); //sys info ts = fpga_byte_read(0x1,0x54); //ts asi_input.input = atsc_para.log_para.asi_input; asi_input.status = atsc_para.log_para.input_ok_flag?0:1; if((asi_input.status!=ASI_ERR)&&((ts&1)==0)) //ASI ts { dryloop_write(DRYLOOP_I2C_TS_LED,1); off_ts = 0; } else { dryloop_write(DRYLOOP_I2C_TS_LED,0); off_ts = 1; atsc_para.latch_para.ts = 1; } if(atsc_para.wh_para.func==0) //TX { if(atsc_para.rf_para.tx==0) { dryloop_write(DRYLOOP_I2C_RF_LED,0); //AMP GND atsc_para.latch_para.rf = 1; } else { dryloop_write(DRYLOOP_I2C_RF_LED,1); //AMP ENABLE } //仅开机时有此操作 if(atsc_para.fpga_load_wait_flag==1) { //等待2秒 show_wait_info_with_sec(atsc_para.wj_para.rf_dly); //在此处发送RF,因上电未发 //fpga_byte_write(0x0 ,0x01); fpga_set_rf_output(atsc_para.rf_para.rf); atsc_para.fpga_load_wait_flag = 0; } } else { if(UC_temp21&0x40) //RF { dryloop_write(DRYLOOP_I2C_RF_LED,1); } else { dryloop_write(DRYLOOP_I2C_RF_LED,0); } } //fpga_byte_write(0x0 ,0x1 ); //段地址 tmp = fpga_byte_read(0x1,0x56); if(tmp&0x08) //bit3 off_1pps = 1; else off_1pps = 0; if(tmp&0x04) //bit2 atsc_para.log_para.use_gps = 1; //INT模式 else atsc_para.log_para.use_gps = 0; //EXT模式 if(atsc_para.log_para.use_gps) //int模式 { tmp = fpga_byte_read(0x1,0x8a); atsc_para.log_para.gps_status = tmp&0x0f; if(tmp&0x10) { off_10ms = 0;//locked; } else { off_10ms = 1; } } else //ext { tmp = fpga_byte_read(0x1,0x56); if(tmp&0x01) { off_10ms = 0; //locked; } else { off_10ms = 1; } } ////////////////////////////// if(UC_temp21&0x40) //RF { if(atsc_para.wh_para.func==1) { off_rf = 0; } } else { if(atsc_para.rf_para.rf) { off_rf = 0 ;//清错误 if((atsc_para.ad2_para.m_ts) && (off_ts)) { setbit(off_rf,_MISS_TS); } if((atsc_para.ad2_para.m_10m) && (off_10ms)) { if(off_rf) { setbits(off_rf,_MISS_10M) ; } else { setbit(off_rf,_MISS_10M) ; } } if((atsc_para.ad2_para.m_1pps) && (off_1pps)) { if(off_rf) { setbits(off_rf,_MISS_1PPS) ; } else { setbit(off_rf,_MISS_1PPS); } } if (!(atsc_para.ad2_para.m_ts || atsc_para.ad2_para.m_10m || atsc_para.ad2_para.m_1pps)) setbit(off_rf,_MISS_OTHER); } else { if(atsc_para.wh_para.func==1) { off_rf = 0; } } atsc_para.latch_para.rf = 1; } if((off_rf==0) && (atsc_para.rf_para.rf==0)) setbit(off_rf,_KEY_RF); ////////////////////////////// if(UC_temp21&0x80) { dryloop_write(DRYLOOP_I2C_SYSERR_LED,0); //SYS ERR atsc_para.latch_para.sys = 1; } else { dryloop_write(DRYLOOP_I2C_SYSERR_LED,1); //正常 } #endif } void dryloop_reset(void) { #if USE_DRYLOOP_I2C //GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, 0<<6); delay_ticks(10); //GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, 1<<6); #endif } void dryloop_init(void) { #if USE_DRYLOOP_I2C==0 uart_com_init(DRYLOOP_UART_NUM,DRYLOOP_UART_BPS,PARITY_NO,INT_ON); #endif } /***************************************************************************** 函 数 名 : dryloop_process 功能描述 : dryloop处理函数,需根据通讯模式(i2c或者uart)分别做处理 输入参数 : void 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年9月19日 作 者 : 郭金涛 修改内容 : 新生成函数 *****************************************************************************/ void dryloop_process(void) { uint32 send_flag = 0; if(update_flag) return; #if USE_DRYLOOP_I2C //dryloop为I2C通讯模式 if(atsc_para.system_para.ctrl==CTRL_REMOTE) dryloop_check(); else { dryloop_status.rf = INVALID_DATA; dryloop_status.power = INVALID_DATA; } dryloop_send(); #else //dryloop为串口通讯模式 if(atsc_para.system_para.ctrl==CTRL_REMOTE) { send_flag = dryloop_uart_get_status(); } else { dryloop_status.rf = INVALID_DATA; dryloop_status.power = INVALID_DATA; } if(dryloop_version_flag == FALSE) { dryloop_uart_get_version(); } if(send_flag==0) { dryloop_uart_send_status(); } #endif } #endif /******************************************END**********************************/