/********************************************************************* * Function: void TouchStoreCalibration(void) * * PreCondition: EEPROMInit() must be called before * * Input: none * * Output: none * * Side Effects: none * * Overview: stores calibration parameters into EEPROM * * Note: none * ********************************************************************/ void TouchStoreCalibration(void){ #if ((GRAPHICS_PICTAIL_VERSION == 2) || (GRAPHICS_PICTAIL_VERSION == 250)) EEPROMWriteWord(_calXMin, ADDRESS_XMIN); EEPROMWriteWord(_calXMax, ADDRESS_XMAX); EEPROMWriteWord(_calYMin, ADDRESS_YMIN); EEPROMWriteWord(_calYMax, ADDRESS_YMAX); EEPROMWriteWord(GRAPHICS_LIBRARY_VERSION,ADDRESS_VERSION); #else SST25SectorErase(ADDRESS_XMIN); // erase 4K sector SST25WriteWord(_calXMin, ADDRESS_XMIN); SST25WriteWord(_calXMax, ADDRESS_XMAX); SST25WriteWord(_calYMin, ADDRESS_YMIN); SST25WriteWord(_calYMax, ADDRESS_YMAX); SST25WriteWord(GRAPHICS_LIBRARY_VERSION,ADDRESS_VERSION); #endif }
void set_defaults(void) { /* write defaults */ // zero_press1 = 1100; // zero_press2 = 1110; // set_press1 = 100; // set_press2 = 100; // scale_press1 = 100; // scale_press2 = 100; upocclus_lmt = 60; paraocclus_lmt = 60; strtocclus_lmt = 1; occlus_lmt[0] = 230; occlus_lmt[1] = 460; occlus_lmt[2] = 725; bolus_init.rate = 500.0; bolus_init.volume = 5.0; bolus_init.maxrate = MAXRATE; bolus_init.maxvolume = 15.0; bolus_init.mode = 1; max_rate = MAXRATE; max_volume = 9999.0; memset(&drugs[0],0 ,sizeof(drugs)); drugs[0].maxrate = MAXRATE; drugs[0].maxvolume = 9999.0; memset(&drug_list[0][0],0 ,sizeof(drug_list)); strcpy(&drug_list[0][0],"CILAZAPRIL"); memset(&depart_list[0][0],0 ,sizeof(depart_list)); // strcpy(&depart_list[0][0],depname_msg); depart_name = 0; ail_limit = 100; // vol_calibr = 1; bzz_volume = 0; battype = BAT_6NIMH; // hwopt = 0x03; /*0-1 BUZ volume, 2 - 4 BAT type*/ prog_num = 0; /* put checksum to the last halfword */ ((unsigned int*)&E2pImage)[sizeof(E2pImage_t)/2 - 1] = crc16(&E2pImage, sizeof(E2pImage_t) - 2); SST25SectorErase(PARAM_E2PIMG_BASE); if(!SST25WriteArray(PARAM_E2PIMG_BASE, &E2pImage, sizeof(E2pImage_t))) /*CriticalError("eeprom err")*/; // if(eeprom_write(0, &E2pImage, sizeof(E2pImage_t)) == 0) // critical_error((uchar*)eeprom_msg); }
void set_fact_defaults(void) { /* write defaults */ memset((unsigned char*)&Clbr_E2pImage, 0 , sizeof(Clbr_E2pImage_t)); zero_press1 = 1100; zero_press2 = 1110; set_press1 = 100; set_press2 = 100; scale_press1 = 100; scale_press2 = 100; vol_calibr = 1; calib_time = 0; /* put checksum to the last halfword */ ((unsigned int*)&Clbr_E2pImage)[sizeof(Clbr_E2pImage)/2 - 1] = crc16(&Clbr_E2pImage, sizeof(Clbr_E2pImage) - 2); SST25SectorErase(CLBR_E2PIMG_BASE); if(!SST25WriteArray(CLBR_E2PIMG_BASE, &Clbr_E2pImage, sizeof(Clbr_E2pImage))) CriticalError("eeprom err"); // if(eeprom_write(0, &E2pImage, sizeof(E2pImage_t)) == 0) // critical_error((uchar*)eeprom_msg); }
//测试SST,先全部刷除,再逐个写入数据检查--这样时间太长了,改为只写入检测128字节数据 void TestSst(void) { u8 i; u32 addr=0; u8 db_sst1[64]; //刷除扇区并校验是否刷除成功 SST25SectorErase(0); for(addr=0;addr<64;addr+=64) { SST25Read(addr,db_sst1,64);//读64个字节 for(i=0;i<64;i++) { if(db_sst1[i]!=0xff) { printf("FLASH检查出错\r\n"); while(1); } } } //写入一个扇区并校验是否成功 for(i=0;i<64;i++) db_sst1[i]=i; //写入一个扇区,一个扇区是4K,也就是64*64 for(addr=0;addr<64;addr+=64) { SST25Write(addr,db_sst1,64);//写入64个字节 SST25Read(addr,db_sst1,64);//读64个字节 for(i=0;i<64;i++) { if(db_sst1[i]!=i) { printf("FLASH检查出错\r\n"); while(1); } } } printf("FLASH检查完成\r\n"); }
void taskBackground(void* pvParameter) { static unsigned int val1; static unsigned int val2; time_t time_sec; // vTaskSetApplicationTaskTag( NULL, ( void * ) 'b' ); alarm_st = 0; #ifndef SIM_DEBUG //sysinit wdi_ena = 0; Spi_init(); if(get_time_rtc(&rtc_time)== FALSE) { SetError(RTC_ERR, HARWARE_ALRM_SCR); reset_rtc(); while(clear_os_rtc() == FALSE); init_time_rtc(&rtc_time); // rtc_time.tm_sec = 0; // rtc_time.tm_min = 0; // rtc_time.tm_hour = 0; // rtc_time.tm_mday = 1; // rtc_time.tm_wday = 0; // rtc_time.tm_mon = 0; // rtc_time.tm_year = 100; // rtc_time.tm_yday = 0; // rtc_time.tm_isdst = 0; set_time_rtc(&rtc_time)/*set_date()*/; } else if(mktime(&rtc_time)==-1) { SetError(RTC_ERR, HARWARE_ALRM_SCR); // reset_rtc(); init_time_rtc(&rtc_time); set_time_rtc(&rtc_time)/*set_date()*/; } time_sec = mktime(&rtc_time); set_clock(time_sec); // if(get_days(&calib_date) > 365) // if(time_sec - calib_time >= 31536000L /*365*24*60*60*/) // { // Beep(800); // lcd_clear(); // beep(800,4); // RTclock.timer = 2000; //10sec timeout // draw_text( 15, LCD_TXTLINE1, (uchar*)"SEND THE PUMP", LCD_PIXEL_ON,0); // draw_text( 54, LCD_TXTLINE2, (uchar*)"TO", LCD_PIXEL_ON,0); // draw_text( 29, LCD_TXTLINE3, (uchar*)"CALIBRATE", LCD_PIXEL_ON,0); // while(RTclock.timer > 0); // } SST25ProtDisable(); SST25ReadArray(PARAM_E2PIMG_BASE, &E2pImage, sizeof(E2pImage_t)); if(crc16((unsigned char*)&E2pImage, sizeof(E2pImage_t)) != 0) { SetError(EEPROM_ERR, HARWARE_ALRM_SCR); set_defaults(); } SST25ReadArray(CLBR_E2PIMG_BASE, &Clbr_E2pImage, sizeof(Clbr_E2pImage_t)); if(crc16((unsigned char*)&Clbr_E2pImage, sizeof(Clbr_E2pImage_t)) != 0) { SetError(EEPROM_ERR, HARWARE_ALRM_SCR); set_fact_defaults(); } if(GetError() != 0) { err_code = GetError(); ClearError(); ((unsigned int*)&E2pImage)[sizeof(E2pImage_t)/2 - 1] = crc16(&E2pImage, sizeof(E2pImage_t) - 2); SST25SectorErase(PARAM_E2PIMG_BASE); if(!SST25WriteArray(PARAM_E2PIMG_BASE, &E2pImage, sizeof(E2pImage_t))) /*CriticalError("eeprom err")*/; } MCP23S08Init(); MCP4822Write(0, zero_press1 , 0); MCP4822Write(1, zero_press2 , 0); init_motor(); init_airdet(); #endif init_keypad(); init_clock(); CheckParams(); /* drop task priority */ vTaskPrioritySet( hBACKGRNDTask, tskIDLE_PRIORITY + 1 ); while (1) { vTaskDelay( 50 / portTICK_RATE_MS ); // Wait 50ms if(val1 > 0x0fff) val1 = 0; else val1++; if(val2 > 0x0fff) val1 = 0; else val2++; if(!wdi_ena) toggleExpGPO(WDI_EXTIOBIT); // ClrWdt(); // WD_PIN^= 1; /*toggle external watch dog */ } }