I-O DATA DEV2 / Mbed 2 deprecated ud-gs4-R_400G_SD_Log_No1

Dependencies:   mbed SDFileSystem_

Committer:
tnanbu
Date:
Wed Sep 15 05:10:59 2021 +0000
Revision:
43:024421f7474c
Parent:
42:f42b74882970
Child:
44:48fa8beb3b00
Add LED and boot count

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hakusan270 0:b76e4ba14765 1 #include "mbed.h"
rgoto 6:bf4321ef0330 2 #include "SDFileSystem.h"
tnanbu 28:8bda44be0dd0 3 #include <errno.h>
tnanbu 41:43828af3765f 4 #include "watchdog.h"
tnanbu 8:7f80139df48d 5
hakusan270 0:b76e4ba14765 6 /*
hakusan270 0:b76e4ba14765 7 This basic example just shows how to read the ADC internal channels raw values.
hakusan270 0:b76e4ba14765 8 Please look in the corresponding device reference manual for a complete
hakusan270 0:b76e4ba14765 9 description of how to make a temperature sensor, VBat or Vref measurement.
hakusan270 0:b76e4ba14765 10 */
hakusan270 0:b76e4ba14765 11
hakusan270 0:b76e4ba14765 12 AnalogIn adc_temp(ADC_TEMP);
hakusan270 0:b76e4ba14765 13 AnalogIn adc_vref(ADC_VREF);
tnanbu 11:2d5fcf102778 14 /* UD-GS2 H/W define
tnanbu 11:2d5fcf102778 15 PIO_SWin PB_4
tnanbu 11:2d5fcf102778 16 PIO_wkup PA_4
hakusan270 0:b76e4ba14765 17 PIO_enable PB_0
hakusan270 0:b76e4ba14765 18 PIO_intout1 PB_2
hakusan270 0:b76e4ba14765 19 PIO_led PB_5
hakusan270 0:b76e4ba14765 20 PIO_v20v PC_13
hakusan270 0:b76e4ba14765 21 PIO_v18v PH_0
hakusan270 0:b76e4ba14765 22 PIO_intout2 PH_1
hakusan270 0:b76e4ba14765 23 PIO_spics PB_12
hakusan270 0:b76e4ba14765 24 PIO_battryMonEn PA_5
hakusan270 5:fbeb85ebd47b 25 PB_7 SDA
hakusan270 5:fbeb85ebd47b 26 PB_6 SCL
tnanbu 11:2d5fcf102778 27
hakusan270 0:b76e4ba14765 28 */
hakusan270 5:fbeb85ebd47b 29 //DigitalOut hx_clk(PB_7);
hakusan270 5:fbeb85ebd47b 30 //DigitalIn hx_dt(PB_6);
hakusan270 5:fbeb85ebd47b 31 //I2C i2cacc(p_sda, p_scl)
hakusan270 5:fbeb85ebd47b 32
tnanbu 13:df67ca499051 33 //#include "H3LIS331DL.h"
tnanbu 13:df67ca499051 34
tnanbu 13:df67ca499051 35 //#define TIMEINTERVAL
hakusan270 5:fbeb85ebd47b 36
tnanbu 13:df67ca499051 37 //キャリブレーション 仮値
tnanbu 31:4ac70aa71542 38 //No.1
tnanbu 34:6bffe97ae35d 39 #define OFFSET_X 220
tnanbu 34:6bffe97ae35d 40 #define OFFSET_Y 220
tnanbu 34:6bffe97ae35d 41 #define OFFSET_Z -40
tnanbu 31:4ac70aa71542 42 //No.2
tnanbu 31:4ac70aa71542 43 //#define OFFSET_X 375
tnanbu 31:4ac70aa71542 44 //#define OFFSET_Y 340
tnanbu 31:4ac70aa71542 45 //#define OFFSET_Z -200
tnanbu 34:6bffe97ae35d 46 //#define OFFSET_X 0
tnanbu 34:6bffe97ae35d 47 //#define OFFSET_Y 0
tnanbu 34:6bffe97ae35d 48 //#define OFFSET_Z 0
tnanbu 33:3369e5fe46aa 49
tnanbu 33:3369e5fe46aa 50 #define DATA_SIZE 512
tnanbu 43:024421f7474c 51 #define RETRY_COUNT 5
tnanbu 11:2d5fcf102778 52
tnanbu 13:df67ca499051 53 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data);
tnanbu 13:df67ca499051 54 uint8_t readEEPROMByte(uint32_t address);
tnanbu 13:df67ca499051 55
tnanbu 13:df67ca499051 56
tnanbu 13:df67ca499051 57 //H3LIS331DL h3dacc(PB_7,PB_6);
tnanbu 13:df67ca499051 58 I2C i2c(PB_7,PB_6); //NUCLEO pin assign
hakusan270 5:fbeb85ebd47b 59
hakusan270 0:b76e4ba14765 60 RawSerial pc(PA_9, PA_10,115200); //console UART
tnanbu 13:df67ca499051 61 //LowPowerTicker interrupt;
tnanbu 18:2a42f4052139 62 //Ticker interrupt;
hakusan270 0:b76e4ba14765 63 SPI STSPI(PB_15, PB_14, PB_13); //mosi,miso,clk
hakusan270 0:b76e4ba14765 64 DigitalOut STSPICS(PB_12);
rgoto 6:bf4321ef0330 65
rgoto 6:bf4321ef0330 66 SDFileSystem *sd = new SDFileSystem(PA_12, PA_11, PB_3, PA_15, "sd"); // mosi, miso, sclk, cs, name
rgoto 6:bf4321ef0330 67
tnanbu 38:87b7b3de6e88 68 DigitalOut myled(PB_5);
tnanbu 37:1b459e0ef847 69 DigitalIn button(PB_4);
tnanbu 37:1b459e0ef847 70 int btn_flag = 0;
tnanbu 37:1b459e0ef847 71
hakusan270 1:025596ffc973 72 int initLIS3DH();
hakusan270 1:025596ffc973 73 int read3axes(short *tx,short *ty,short *tz);
tnanbu 13:df67ca499051 74 int initLIS331();
tnanbu 13:df67ca499051 75 int read3axes331(short *tx,short *ty,short *tz);
tnanbu 13:df67ca499051 76 int int_sqrt(unsigned int x);
tnanbu 7:b69fa9bb320d 77 //int readTemp(short *tmp);
tnanbu 11:2d5fcf102778 78 FILE *fp1,*fp2;//fp1:H3LIS331DL, fp2:LIS3DH
tnanbu 13:df67ca499051 79 unsigned long timecount = 0;
tnanbu 33:3369e5fe46aa 80 short oldcount = 0;
tnanbu 33:3369e5fe46aa 81 short newcount = 0;
tnanbu 28:8bda44be0dd0 82 long max_g=0;
tnanbu 43:024421f7474c 83 long boot_count = 0;
tnanbu 43:024421f7474c 84 long reboot_count = 0;
tnanbu 33:3369e5fe46aa 85 char buffer1[DATA_SIZE] = {};
tnanbu 33:3369e5fe46aa 86 char buffer2[DATA_SIZE] = {};
tnanbu 31:4ac70aa71542 87 char stracc1[32] = {}, stracc2[32] = {};
tnanbu 13:df67ca499051 88 int lognum1 = 0, lognum2 = 0;
tnanbu 33:3369e5fe46aa 89 char filename1[16]= {};
tnanbu 33:3369e5fe46aa 90 char filename2[16]= {};
tnanbu 43:024421f7474c 91 int init=1;
tnanbu 43:024421f7474c 92 short clear_flag = 0;
tnanbu 43:024421f7474c 93 short writed_flag = 0;
tnanbu 43:024421f7474c 94 short error_flag = 0;
tnanbu 43:024421f7474c 95 //short reboot_flag = 0;
tnanbu 43:024421f7474c 96 short ledcount_write = 0;
tnanbu 43:024421f7474c 97 short ledcount_error = 0;
tnanbu 11:2d5fcf102778 98
tnanbu 41:43828af3765f 99 Watchdog wdt;
tnanbu 15:12d0699ad423 100
tnanbu 43:024421f7474c 101 void LED_Control_Write(short cnt){
tnanbu 43:024421f7474c 102 //Blinks every 0.5 seconds. 3 times.
tnanbu 43:024421f7474c 103 if(cnt == 0){
tnanbu 43:024421f7474c 104 myled = 0;
tnanbu 43:024421f7474c 105 }
tnanbu 43:024421f7474c 106 else if((cnt % 200) == 0 ){
tnanbu 43:024421f7474c 107 if(myled == 0){
tnanbu 43:024421f7474c 108 myled = 1;
tnanbu 43:024421f7474c 109 }
tnanbu 43:024421f7474c 110 else if(myled == 1){
tnanbu 43:024421f7474c 111 myled = 0;
tnanbu 43:024421f7474c 112 }
tnanbu 43:024421f7474c 113 }
tnanbu 43:024421f7474c 114
tnanbu 43:024421f7474c 115 if(cnt > 1000){
tnanbu 43:024421f7474c 116 myled = 1;
tnanbu 43:024421f7474c 117 writed_flag = 0;
tnanbu 43:024421f7474c 118 }
tnanbu 43:024421f7474c 119 }
tnanbu 43:024421f7474c 120
tnanbu 43:024421f7474c 121 void LED_Control_Error(){
tnanbu 43:024421f7474c 122 //Blinks every 0.25 seconds.
tnanbu 43:024421f7474c 123 short cnt = 0;
tnanbu 43:024421f7474c 124 while(cnt < 20){
tnanbu 43:024421f7474c 125 myled = 0;
tnanbu 43:024421f7474c 126 wait(0.25);
tnanbu 43:024421f7474c 127 myled = 1;
tnanbu 43:024421f7474c 128 wait(0.25);
tnanbu 43:024421f7474c 129 cnt++;
tnanbu 43:024421f7474c 130 }
tnanbu 43:024421f7474c 131 myled = 1;
tnanbu 43:024421f7474c 132 }
tnanbu 43:024421f7474c 133
tnanbu 15:12d0699ad423 134 void sub(){
tnanbu 33:3369e5fe46aa 135 static short tx=0,ty=0,tz=0;
tnanbu 36:709c6fae0b2e 136 static short tx2=0,ty2=0,tz2=0;
tnanbu 33:3369e5fe46aa 137 static long scr = 0;
tnanbu 36:709c6fae0b2e 138 static long scr2 = 0;
tnanbu 33:3369e5fe46aa 139 static long ax,ay,az,as;
tnanbu 35:69e2bc347f0c 140 static long ax2,ay2,az2,as2;
tnanbu 42:f42b74882970 141 static long tmp_max = 0, tmp_max2 = 0;
tnanbu 43:024421f7474c 142 short retry = 0;
tnanbu 43:024421f7474c 143 short ret = 0;
tnanbu 13:df67ca499051 144
tnanbu 13:df67ca499051 145 read3axes331(&tx,&ty,&tz);
tnanbu 13:df67ca499051 146 //キャリブレーションの補正
tnanbu 13:df67ca499051 147 tx += OFFSET_X;
tnanbu 13:df67ca499051 148 ty += OFFSET_Y;
tnanbu 13:df67ca499051 149 tz += OFFSET_Z;
tnanbu 13:df67ca499051 150
tnanbu 13:df67ca499051 151 //スカラー値変換
tnanbu 18:2a42f4052139 152 scr = int_sqrt( tx*tx + ty*ty + tz*tz);// 195mg/digit
tnanbu 33:3369e5fe46aa 153 //now_g = scr;
tnanbu 13:df67ca499051 154
tnanbu 33:3369e5fe46aa 155 ax+= tx;
tnanbu 33:3369e5fe46aa 156 ay+= ty;
tnanbu 33:3369e5fe46aa 157 az+= tz;
tnanbu 33:3369e5fe46aa 158 as+= scr;
tnanbu 35:69e2bc347f0c 159 //newcount++;
tnanbu 36:709c6fae0b2e 160 //pc.printf("%d,%d,x:%2.2f y:%2.2f,z:%2.2f scaler = %2.2f \r\n",timecount,time(NULL),(float)tx*0.005,(float)ty*0.005,(float)tz*0.005,(float)scr*0.005);
tnanbu 42:f42b74882970 161 //pc.printf("new x:%d y:%d,z:%d scr=%d, max=%d\r\n",tx,ty,tz,scr,tmp_max);
tnanbu 18:2a42f4052139 162
tnanbu 33:3369e5fe46aa 163 //Total Max G
tnanbu 13:df67ca499051 164 if ( max_g < scr) {
tnanbu 13:df67ca499051 165 max_g = scr;
tnanbu 38:87b7b3de6e88 166 //update=1;
tnanbu 33:3369e5fe46aa 167 //pc.printf("%max g=%d \r\n",max_g);
tnanbu 13:df67ca499051 168 //Save EEPROM
tnanbu 28:8bda44be0dd0 169 for(int i = 0; i < 4; i++){
tnanbu 38:87b7b3de6e88 170 //pc.printf("writerom 0x%x\r\n",(max_g >> 8*i) & 0xFF);
tnanbu 28:8bda44be0dd0 171 writeEEPROMByte(i, (max_g >> 8*i) & 0xFF);
tnanbu 28:8bda44be0dd0 172 }
tnanbu 8:7f80139df48d 173 }
tnanbu 13:df67ca499051 174
tnanbu 36:709c6fae0b2e 175 //MAX G per cycle
tnanbu 33:3369e5fe46aa 176 if(tmp_max < scr){
tnanbu 42:f42b74882970 177 //pc.printf("tmp_max:%d,%d",tmp_max,scr);
tnanbu 33:3369e5fe46aa 178 tmp_max = scr;
tnanbu 33:3369e5fe46aa 179 }
tnanbu 33:3369e5fe46aa 180
tnanbu 36:709c6fae0b2e 181 //平均(/s)
tnanbu 42:f42b74882970 182 if (newcount == 400) {
tnanbu 42:f42b74882970 183 float asc = (float)as / 400.0f;
tnanbu 40:16c2d6b97a92 184 pc.printf("avarage(new) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n",
tnanbu 42:f42b74882970 185 (float)ax/400.0f*0.005,(float)ay/400.0f*0.005,(float)az/400.0f*0.005,(float)as/400.0f*0.005, (float)tmp_max*0.005);
tnanbu 36:709c6fae0b2e 186 sprintf(stracc1,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc*0.005,(float)tmp_max*0.005);
tnanbu 33:3369e5fe46aa 187
tnanbu 36:709c6fae0b2e 188 if((strlen(buffer1)+strlen(stracc1)) > DATA_SIZE) {
tnanbu 36:709c6fae0b2e 189 pc.printf("try write fp1:%d,%d\r\n",strlen(buffer1),strlen(stracc1));
tnanbu 33:3369e5fe46aa 190 //ret = fprintf(fp1,"%s",buffer1);
tnanbu 43:024421f7474c 191 //ret = fwrite(buffer1,sizeof(char),strlen(buffer1),fp1);
tnanbu 43:024421f7474c 192 while((fwrite(buffer1,sizeof(char),strlen(buffer1),fp1) != strlen(buffer1)) && (retry < RETRY_COUNT)){
tnanbu 43:024421f7474c 193 if(retry < RETRY_COUNT -1) {
tnanbu 43:024421f7474c 194 pc.printf("fp1 fwrite failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 195 }
tnanbu 43:024421f7474c 196 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 197 pc.printf("fp1 fwrite failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 198 reboot_count++;
tnanbu 43:024421f7474c 199 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 200 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 201 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 202 }
tnanbu 43:024421f7474c 203 LED_Control_Error();
tnanbu 43:024421f7474c 204 NVIC_SystemReset();
tnanbu 43:024421f7474c 205 }
tnanbu 43:024421f7474c 206 retry++;
tnanbu 43:024421f7474c 207 wait_ms(1);
tnanbu 43:024421f7474c 208 }
tnanbu 43:024421f7474c 209 pc.printf("fp1 fwrite success:%d\r\n",ret);
tnanbu 43:024421f7474c 210 retry = 0;
tnanbu 43:024421f7474c 211 writed_flag = 1;
tnanbu 43:024421f7474c 212 ledcount_write = 0;
tnanbu 43:024421f7474c 213
tnanbu 8:7f80139df48d 214 memset(buffer1,0,sizeof(buffer1));
tnanbu 8:7f80139df48d 215 sprintf(buffer1,"%s",stracc1);
tnanbu 35:69e2bc347f0c 216 } else {
tnanbu 11:2d5fcf102778 217 sprintf(buffer1,"%s%s",buffer1,stracc1);
tnanbu 7:b69fa9bb320d 218 }
tnanbu 13:df67ca499051 219
tnanbu 33:3369e5fe46aa 220 as=ax=ay=az=0;
tnanbu 33:3369e5fe46aa 221 newcount = 0;
tnanbu 33:3369e5fe46aa 222 tmp_max = 0;
tnanbu 33:3369e5fe46aa 223 }
tnanbu 33:3369e5fe46aa 224
tnanbu 43:024421f7474c 225 //LED Control
tnanbu 43:024421f7474c 226 if(writed_flag){
tnanbu 43:024421f7474c 227 LED_Control_Write(ledcount_write);
tnanbu 43:024421f7474c 228 ledcount_write++;
tnanbu 43:024421f7474c 229 }
tnanbu 43:024421f7474c 230
tnanbu 35:69e2bc347f0c 231 if( (oldcount % 10) == 0){
tnanbu 11:2d5fcf102778 232 //LIS3DH
tnanbu 36:709c6fae0b2e 233 read3axes(&tx2,&ty2,&tz2);
tnanbu 36:709c6fae0b2e 234 scr2 = int_sqrt( tx2*tx2 + ty2*ty2 + tz2*tz2);
tnanbu 36:709c6fae0b2e 235 ax2+= tx2;
tnanbu 36:709c6fae0b2e 236 ay2+= ty2;
tnanbu 36:709c6fae0b2e 237 az2+= tz2;
tnanbu 36:709c6fae0b2e 238 as2+= scr2;
tnanbu 36:709c6fae0b2e 239 if(tmp_max2 < scr2){
tnanbu 36:709c6fae0b2e 240 tmp_max2 = scr2;
tnanbu 35:69e2bc347f0c 241 }
tnanbu 36:709c6fae0b2e 242 //pc.printf("old %d,%d,x:%2.2f y:%2.2f,z:%2.2f scaler = %2.2f \r\n",timecount,time(NULL),(float)tx2*0.005,(float)ty2*0.005,(float)tz2*0.005,(float)scr2*0.005);
tnanbu 36:709c6fae0b2e 243 //pc.printf("%d,%d,old x:%d,y:%d,z:%d scaler = %d\r\n",timecount,time(NULL),tx,ty,tz,scr);
tnanbu 33:3369e5fe46aa 244 //sprintf(stracc2,"%d,%d,%d\r\n",timecount,time(NULL),scr);
tnanbu 11:2d5fcf102778 245 //pc.printf("lis3dh:%s",stracc2);
tnanbu 42:f42b74882970 246 if(oldcount == 4000){
tnanbu 42:f42b74882970 247 float asc2 = (float)as2 / 400.0f;
tnanbu 38:87b7b3de6e88 248 //pc.printf("avarage(old) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n",
tnanbu 38:87b7b3de6e88 249 //(float)ax2/500.0f*0.005,(float)ay2/500.0f*0.005,(float)az2/500.0f*0.005,(float)as2/500.0f*0.005, (float)tmp_max2*0.005);
tnanbu 36:709c6fae0b2e 250 sprintf(stracc2,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc2*0.005,(float)tmp_max2*0.005);
tnanbu 35:69e2bc347f0c 251
tnanbu 36:709c6fae0b2e 252 if( (strlen(buffer2)+ strlen(stracc2)) > DATA_SIZE) {
tnanbu 43:024421f7474c 253 pc.printf("try write fp2:%d,%d\r\n",strlen(buffer2),strlen(stracc2));
tnanbu 43:024421f7474c 254 while( (fwrite(buffer2,sizeof(char),strlen(buffer2),fp2) != strlen(buffer2)) && (retry < RETRY_COUNT)){
tnanbu 43:024421f7474c 255 if(retry < RETRY_COUNT -1) {
tnanbu 43:024421f7474c 256 pc.printf("fp2 fwrite failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 257 }
tnanbu 43:024421f7474c 258 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 259 pc.printf("fp2 fwrite failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 260 reboot_count++;
tnanbu 43:024421f7474c 261 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 262 writeEEPROMByte(i+8,0x00);
tnanbu 43:024421f7474c 263 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 264 }
tnanbu 43:024421f7474c 265 LED_Control_Error();
tnanbu 43:024421f7474c 266 NVIC_SystemReset();
tnanbu 43:024421f7474c 267 }
tnanbu 43:024421f7474c 268 retry++;
tnanbu 43:024421f7474c 269 wait_ms(1);
tnanbu 35:69e2bc347f0c 270 }
tnanbu 43:024421f7474c 271 pc.printf("fp2 fwrite success:%d\r\n",ret);
tnanbu 43:024421f7474c 272 retry = 0;
tnanbu 35:69e2bc347f0c 273 memset(buffer2,0,sizeof(buffer2));
tnanbu 35:69e2bc347f0c 274 sprintf(buffer2,"%s",stracc2);
tnanbu 35:69e2bc347f0c 275 } else {
tnanbu 35:69e2bc347f0c 276 sprintf(buffer2,"%s%s",buffer2,stracc2);
tnanbu 13:df67ca499051 277 }
tnanbu 35:69e2bc347f0c 278
tnanbu 35:69e2bc347f0c 279 oldcount = 0;
tnanbu 35:69e2bc347f0c 280 as2=ax2=ay2=az2=0;
tnanbu 35:69e2bc347f0c 281 tmp_max2 = 0;
tnanbu 7:b69fa9bb320d 282 }
tnanbu 11:2d5fcf102778 283 }
tnanbu 38:87b7b3de6e88 284
tnanbu 38:87b7b3de6e88 285 if((time(NULL) % 300) == 0){
tnanbu 38:87b7b3de6e88 286 //5 minutes passed. Save File.
tnanbu 43:024421f7474c 287 //pc.printf("5minutes passed. Save File.\r\n");
tnanbu 38:87b7b3de6e88 288 if(fp1){
tnanbu 43:024421f7474c 289 while(fclose(fp1) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 290 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 291 pc.printf("fp1 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 292 }
tnanbu 43:024421f7474c 293 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 294 pc.printf("fp1 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 295 reboot_count++;
tnanbu 43:024421f7474c 296 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 297 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 298 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 299 }
tnanbu 43:024421f7474c 300 LED_Control_Error();
tnanbu 43:024421f7474c 301 NVIC_SystemReset();
tnanbu 43:024421f7474c 302 }
tnanbu 43:024421f7474c 303 retry++;
tnanbu 43:024421f7474c 304 wait_ms(1);
tnanbu 43:024421f7474c 305 }
tnanbu 43:024421f7474c 306 retry = 0;
tnanbu 38:87b7b3de6e88 307 fp1 = NULL;
tnanbu 38:87b7b3de6e88 308 }
tnanbu 38:87b7b3de6e88 309 if(fp2){
tnanbu 43:024421f7474c 310 while(fclose(fp2) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 311 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 312 pc.printf("fp2 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 313 }
tnanbu 43:024421f7474c 314 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 315 pc.printf("fp2 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 316 reboot_count++;
tnanbu 43:024421f7474c 317 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 318 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 319 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 320 }
tnanbu 43:024421f7474c 321 LED_Control_Error();
tnanbu 43:024421f7474c 322 NVIC_SystemReset();
tnanbu 43:024421f7474c 323 }
tnanbu 43:024421f7474c 324 retry++;
tnanbu 43:024421f7474c 325 wait_ms(1);
tnanbu 43:024421f7474c 326 }
tnanbu 43:024421f7474c 327 retry = 0;
tnanbu 38:87b7b3de6e88 328 fp2 = NULL;
tnanbu 38:87b7b3de6e88 329 }
tnanbu 43:024421f7474c 330
tnanbu 38:87b7b3de6e88 331 fp1 = fopen(filename1,"ab");
tnanbu 38:87b7b3de6e88 332 if(!fp1){
tnanbu 43:024421f7474c 333 while(!fp1 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 334 pc.printf("fp1 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 335 wait_ms(1);
tnanbu 43:024421f7474c 336 fp1 = fopen(filename1,"ab");
tnanbu 43:024421f7474c 337 if(fp1){
tnanbu 43:024421f7474c 338 pc.printf("fp1 fopen success.\r\n");
tnanbu 43:024421f7474c 339 retry = 0;
tnanbu 43:024421f7474c 340 break;
tnanbu 43:024421f7474c 341 }
tnanbu 43:024421f7474c 342 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 343 pc.printf("fp1 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 344 }
tnanbu 43:024421f7474c 345 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 346 pc.printf("fp1 fopen failed. Reboot! %d\r\n",reboot_count+1);
tnanbu 43:024421f7474c 347 reboot_count++;
tnanbu 43:024421f7474c 348
tnanbu 43:024421f7474c 349 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 350 pc.printf("writeEEPROM(reboot) 0x%x\r\n",(reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 351 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 352 HAL_StatusTypeDef status = writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 353 pc.printf("writed:0x%x,%d\r\n",readEEPROMByte(i+8),status);
tnanbu 43:024421f7474c 354 }
tnanbu 43:024421f7474c 355 LED_Control_Error();
tnanbu 43:024421f7474c 356 NVIC_SystemReset();
tnanbu 43:024421f7474c 357 }
tnanbu 43:024421f7474c 358 retry++;
tnanbu 43:024421f7474c 359 }
tnanbu 38:87b7b3de6e88 360 }
tnanbu 38:87b7b3de6e88 361 fp2 = fopen(filename2,"ab");
tnanbu 38:87b7b3de6e88 362 if(!fp2){
tnanbu 43:024421f7474c 363 while(!fp2 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 364 pc.printf("fp2 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 365 wait_ms(1);
tnanbu 43:024421f7474c 366 fp2 = fopen(filename2,"ab");
tnanbu 43:024421f7474c 367 if(fp2){
tnanbu 43:024421f7474c 368 pc.printf("fp2 fopen success.\r\n");
tnanbu 43:024421f7474c 369 retry = 0;
tnanbu 43:024421f7474c 370 break;
tnanbu 43:024421f7474c 371 }
tnanbu 43:024421f7474c 372 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 373 pc.printf("fp1 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 374 }
tnanbu 43:024421f7474c 375 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 376 pc.printf("fp1 fopen failed. Reboot!\r\n");
tnanbu 43:024421f7474c 377 reboot_count++;
tnanbu 43:024421f7474c 378 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 379 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 380 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 381 }
tnanbu 43:024421f7474c 382 LED_Control_Error();
tnanbu 43:024421f7474c 383 NVIC_SystemReset();
tnanbu 43:024421f7474c 384 }
tnanbu 43:024421f7474c 385 retry++;
tnanbu 43:024421f7474c 386 }
tnanbu 38:87b7b3de6e88 387 }
tnanbu 38:87b7b3de6e88 388 }
tnanbu 19:2475d32bd93f 389
tnanbu 13:df67ca499051 390 if(time(NULL) > 86400){
tnanbu 8:7f80139df48d 391 //Create New File
tnanbu 8:7f80139df48d 392 set_time(NULL);
tnanbu 11:2d5fcf102778 393 timecount = 0;
tnanbu 36:709c6fae0b2e 394 if(fp1){
tnanbu 43:024421f7474c 395 while(fclose(fp1) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 396 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 397 pc.printf("fp1 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 398 }
tnanbu 43:024421f7474c 399 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 400 pc.printf("fp1 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 401 reboot_count++;
tnanbu 43:024421f7474c 402 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 403 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 404 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 405 }
tnanbu 43:024421f7474c 406 LED_Control_Error();
tnanbu 43:024421f7474c 407 NVIC_SystemReset();
tnanbu 43:024421f7474c 408 }
tnanbu 43:024421f7474c 409 retry++;
tnanbu 43:024421f7474c 410 wait_ms(1);
tnanbu 43:024421f7474c 411 }
tnanbu 43:024421f7474c 412 retry = 0;
tnanbu 36:709c6fae0b2e 413 fp1 = NULL;
tnanbu 36:709c6fae0b2e 414 }
tnanbu 36:709c6fae0b2e 415 if(fp2){
tnanbu 43:024421f7474c 416 while(fclose(fp2) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 417 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 418 pc.printf("fp12 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 419 }
tnanbu 43:024421f7474c 420 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 421 pc.printf("fp2 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 422 reboot_count++;
tnanbu 43:024421f7474c 423 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 424 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 425 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 426 }
tnanbu 43:024421f7474c 427 LED_Control_Error();
tnanbu 43:024421f7474c 428 NVIC_SystemReset();
tnanbu 43:024421f7474c 429 }
tnanbu 43:024421f7474c 430 retry++;
tnanbu 43:024421f7474c 431 wait_ms(1);
tnanbu 43:024421f7474c 432 }
tnanbu 43:024421f7474c 433 retry = 0;
tnanbu 36:709c6fae0b2e 434 fp2 = NULL;
tnanbu 36:709c6fae0b2e 435 }
tnanbu 8:7f80139df48d 436 lognum1++;
tnanbu 8:7f80139df48d 437 lognum2++;
tnanbu 13:df67ca499051 438 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 439 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 33:3369e5fe46aa 440 fp1 = fopen(filename1,"ab");
tnanbu 43:024421f7474c 441 while(!fp1 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 442 pc.printf("fp1 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 443 wait_ms(1);
tnanbu 43:024421f7474c 444 fp1 = fopen(filename1,"ab");
tnanbu 43:024421f7474c 445 if(fp1){
tnanbu 43:024421f7474c 446 pc.printf("fp1 fopen success.\r\n");
tnanbu 43:024421f7474c 447 retry = 0;
tnanbu 43:024421f7474c 448 break;
tnanbu 43:024421f7474c 449 }
tnanbu 43:024421f7474c 450 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 451 pc.printf("fp1 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 452 }
tnanbu 43:024421f7474c 453 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 454 pc.printf("fp1 fopen failed. Reboot!\r\n");
tnanbu 43:024421f7474c 455 reboot_count++;
tnanbu 43:024421f7474c 456 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 457 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 458 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 459 }
tnanbu 43:024421f7474c 460 LED_Control_Error();
tnanbu 43:024421f7474c 461 NVIC_SystemReset();
tnanbu 43:024421f7474c 462 }
tnanbu 43:024421f7474c 463 retry++;
tnanbu 40:16c2d6b97a92 464 }
tnanbu 33:3369e5fe46aa 465 fp2 = fopen(filename2,"ab");
tnanbu 43:024421f7474c 466 while(!fp2 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 467 pc.printf("fp2 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 468 wait_ms(1);
tnanbu 43:024421f7474c 469 fp1 = fopen(filename2,"ab");
tnanbu 43:024421f7474c 470 if(fp2){
tnanbu 43:024421f7474c 471 pc.printf("fp2 fopen success.\r\n");
tnanbu 43:024421f7474c 472 retry = 0;
tnanbu 43:024421f7474c 473 break;
tnanbu 43:024421f7474c 474 }
tnanbu 43:024421f7474c 475 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 476 pc.printf("fp2 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 477 }
tnanbu 43:024421f7474c 478 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 479 pc.printf("fp2 fopen failed. Reboot!\r\n");
tnanbu 43:024421f7474c 480 reboot_count++;
tnanbu 43:024421f7474c 481 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 482 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 483 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 484 }
tnanbu 43:024421f7474c 485 LED_Control_Error();
tnanbu 43:024421f7474c 486 NVIC_SystemReset();
tnanbu 43:024421f7474c 487 }
tnanbu 43:024421f7474c 488 retry++;
tnanbu 11:2d5fcf102778 489 }
tnanbu 40:16c2d6b97a92 490
tnanbu 31:4ac70aa71542 491 pc.printf("Create New File:%d,%d",timecount,time(NULL));
tnanbu 7:b69fa9bb320d 492 }
tnanbu 37:1b459e0ef847 493
tnanbu 37:1b459e0ef847 494 //Button Check
tnanbu 37:1b459e0ef847 495 if(button.read() == 1){
tnanbu 37:1b459e0ef847 496 btn_flag++;
tnanbu 37:1b459e0ef847 497 //pc.printf("Button pressed:%d\r\n",btn_flag);
tnanbu 37:1b459e0ef847 498 }
tnanbu 37:1b459e0ef847 499 else{
tnanbu 37:1b459e0ef847 500 btn_flag = 0;
tnanbu 37:1b459e0ef847 501 }
tnanbu 37:1b459e0ef847 502
tnanbu 43:024421f7474c 503 if(btn_flag > 1000 && !clear_flag){
tnanbu 43:024421f7474c 504 //ROM Crear
tnanbu 43:024421f7474c 505 pc.printf("Button pressed. ROM clear\r\n");
tnanbu 43:024421f7474c 506 for(int i = 0; i < 16; i++){
tnanbu 43:024421f7474c 507 writeEEPROMByte(i, 0x00);
tnanbu 43:024421f7474c 508 }
tnanbu 43:024421f7474c 509
tnanbu 37:1b459e0ef847 510 if(fp1){
tnanbu 37:1b459e0ef847 511 fclose(fp1);
tnanbu 37:1b459e0ef847 512 fp1 = NULL;
tnanbu 37:1b459e0ef847 513 }
tnanbu 37:1b459e0ef847 514 if(fp2){
tnanbu 37:1b459e0ef847 515 fclose(fp2);
tnanbu 37:1b459e0ef847 516 fp2 = NULL;
tnanbu 37:1b459e0ef847 517 }
tnanbu 38:87b7b3de6e88 518 btn_flag = 0;
tnanbu 43:024421f7474c 519 clear_flag = 1;
tnanbu 43:024421f7474c 520 boot_count = 0;
tnanbu 43:024421f7474c 521 reboot_count = 0;
tnanbu 37:1b459e0ef847 522 }
tnanbu 13:df67ca499051 523 }
tnanbu 13:df67ca499051 524
tnanbu 13:df67ca499051 525 int main()
tnanbu 13:df67ca499051 526 {
tnanbu 43:024421f7474c 527 short retry = 0;
tnanbu 43:024421f7474c 528 pc.printf("UD-GS5 Start acceleration measurement\r\n");
tnanbu 43:024421f7474c 529 set_time(NULL);
tnanbu 43:024421f7474c 530
tnanbu 43:024421f7474c 531 myled = 0;
tnanbu 43:024421f7474c 532 wait(3);
tnanbu 43:024421f7474c 533 myled = 1;
tnanbu 43:024421f7474c 534
tnanbu 43:024421f7474c 535 //Read Boot/Reboot count
tnanbu 43:024421f7474c 536 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 537 boot_count |= readEEPROMByte(i+4) << 8*i;
tnanbu 43:024421f7474c 538 }
tnanbu 43:024421f7474c 539 boot_count++;
tnanbu 43:024421f7474c 540 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 541 writeEEPROMByte(i+4, (boot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 542 }
tnanbu 43:024421f7474c 543 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 544 //pc.printf("reboot_count:0x%x\r\n",readEEPROMByte(i+8));
tnanbu 43:024421f7474c 545 reboot_count |= readEEPROMByte(i+8) << 8*i;
tnanbu 43:024421f7474c 546 }
tnanbu 43:024421f7474c 547 pc.printf("boot=%d, reboot=%d\r\n",boot_count,reboot_count);
tnanbu 43:024421f7474c 548
tnanbu 43:024421f7474c 549 //Read Max G
tnanbu 43:024421f7474c 550 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 551 //pc.printf("readEEPROM:0x%x\r\n",readEEPROMByte(i));
tnanbu 43:024421f7474c 552 max_g |= readEEPROMByte(i) << 8*i;
tnanbu 43:024421f7474c 553 }
tnanbu 43:024421f7474c 554 pc.printf("read max_g from eeprom:%2.2f\r\n",(float)max_g*0.005);
tnanbu 43:024421f7474c 555
tnanbu 36:709c6fae0b2e 556 i2c.frequency(400000);
tnanbu 43:024421f7474c 557
tnanbu 13:df67ca499051 558 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 559 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 41:43828af3765f 560
tnanbu 41:43828af3765f 561 if (wdt.WatchdogCausedReset())
tnanbu 41:43828af3765f 562 pc.printf("WatchDog Reset.\r\n");
tnanbu 41:43828af3765f 563
tnanbu 43:024421f7474c 564 wdt.Configure(23);
tnanbu 13:df67ca499051 565
tnanbu 33:3369e5fe46aa 566 while(!fp1 && retry < 5){
tnanbu 33:3369e5fe46aa 567 fp1 = fopen(filename1,"ab");
tnanbu 33:3369e5fe46aa 568 if(!fp1) {
tnanbu 43:024421f7474c 569 pc.printf("fp1(%s) fopen failed errno:%d\r\n",filename1,errno);
tnanbu 33:3369e5fe46aa 570 //NVIC_SystemReset();
tnanbu 33:3369e5fe46aa 571 }
tnanbu 40:16c2d6b97a92 572 else{
tnanbu 40:16c2d6b97a92 573 pc.printf("fp1 fopen success\r\n");
tnanbu 40:16c2d6b97a92 574 }
tnanbu 33:3369e5fe46aa 575 retry++;
tnanbu 33:3369e5fe46aa 576 wait_ms(100);
tnanbu 19:2475d32bd93f 577 }
tnanbu 33:3369e5fe46aa 578 retry = 0;
tnanbu 43:024421f7474c 579
tnanbu 33:3369e5fe46aa 580 while(!fp2 && retry < 5){
tnanbu 33:3369e5fe46aa 581 fp2 = fopen(filename2,"ab");
tnanbu 33:3369e5fe46aa 582 if(!fp2) {
tnanbu 43:024421f7474c 583 pc.printf("fp2(%s) fopen failed errno:%d\r\n",filename2,errno);
tnanbu 33:3369e5fe46aa 584 //NVIC_SystemReset();
tnanbu 33:3369e5fe46aa 585 }
tnanbu 40:16c2d6b97a92 586 else{
tnanbu 40:16c2d6b97a92 587 pc.printf("fp2 fopen success\r\n");
tnanbu 40:16c2d6b97a92 588 }
tnanbu 36:709c6fae0b2e 589 retry++;
tnanbu 33:3369e5fe46aa 590 wait_ms(100);
tnanbu 13:df67ca499051 591 }
tnanbu 43:024421f7474c 592 retry = 0;
tnanbu 28:8bda44be0dd0 593
tnanbu 19:2475d32bd93f 594 while(init) {
tnanbu 19:2475d32bd93f 595 init = initLIS331();
tnanbu 19:2475d32bd93f 596 initLIS3DH();
tnanbu 41:43828af3765f 597 pc.printf(" init acc sensor %d\r\n",init);
tnanbu 19:2475d32bd93f 598 wait_ms(100);
tnanbu 13:df67ca499051 599 }
tnanbu 18:2a42f4052139 600 //interrupt.attach_us(&timer,20000);//20ms
tnanbu 43:024421f7474c 601
tnanbu 43:024421f7474c 602 while(1)
tnanbu 13:df67ca499051 603 {
tnanbu 41:43828af3765f 604 wdt.Service();
tnanbu 35:69e2bc347f0c 605 timecount++;
tnanbu 35:69e2bc347f0c 606 oldcount++;
tnanbu 35:69e2bc347f0c 607 newcount++;
tnanbu 28:8bda44be0dd0 608 sub();
tnanbu 42:f42b74882970 609 wait_us(2500);
hakusan270 0:b76e4ba14765 610 }
tnanbu 43:024421f7474c 611
tnanbu 43:024421f7474c 612 //pc.printf("Program End.\r\n");
tnanbu 38:87b7b3de6e88 613 return 0;
hakusan270 0:b76e4ba14765 614 }
tnanbu 11:2d5fcf102778 615 /*********** porting **************/
tnanbu 11:2d5fcf102778 616 void spiFormat(int b,int m)
tnanbu 11:2d5fcf102778 617 {
tnanbu 11:2d5fcf102778 618 STSPI.format(b,m); /* 8bit */
hakusan270 1:025596ffc973 619 }
tnanbu 11:2d5fcf102778 620 void spiFrequency(int f)
tnanbu 11:2d5fcf102778 621 {
hakusan270 1:025596ffc973 622 STSPI.frequency(f); /* 1Mbps */
hakusan270 1:025596ffc973 623 }
tnanbu 11:2d5fcf102778 624 void spiWriteCS(int cs)
tnanbu 11:2d5fcf102778 625 {
hakusan270 1:025596ffc973 626 STSPICS=cs;
hakusan270 1:025596ffc973 627 }
tnanbu 11:2d5fcf102778 628 int spiWrite(int wd)
tnanbu 11:2d5fcf102778 629 {
tnanbu 11:2d5fcf102778 630 return ( STSPI.write(wd));
tnanbu 11:2d5fcf102778 631 }
tnanbu 7:b69fa9bb320d 632
tnanbu 13:df67ca499051 633 /*******************************************************
tnanbu 13:df67ca499051 634 EEPROM WRITE
tnanbu 13:df67ca499051 635 ********************************************************/
tnanbu 13:df67ca499051 636 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data)
tnanbu 13:df67ca499051 637 {
tnanbu 13:df67ca499051 638 HAL_StatusTypeDef status;
tnanbu 13:df67ca499051 639 address = address + 0x08080000;
tnanbu 43:024421f7474c 640
tnanbu 43:024421f7474c 641 if (!IS_FLASH_DATA_ADDRESS(address)) {
tnanbu 43:024421f7474c 642 pc.printf("writeEEPROMByte address outofrange\r\n");
tnanbu 43:024421f7474c 643 return HAL_ERROR;
tnanbu 43:024421f7474c 644 }
tnanbu 43:024421f7474c 645
tnanbu 43:024421f7474c 646 HAL_FLASHEx_DATAEEPROM_Unlock();
tnanbu 43:024421f7474c 647 //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_Unlock:%d\r\n",status);
tnanbu 13:df67ca499051 648 status = HAL_FLASHEx_DATAEEPROM_Program(TYPEPROGRAMDATA_BYTE, address, data);
tnanbu 43:024421f7474c 649 //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_Program:%d\r\n",status);
tnanbu 43:024421f7474c 650 HAL_FLASHEx_DATAEEPROM_Lock();
tnanbu 43:024421f7474c 651 //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_lock:%d\r\n",status);
tnanbu 43:024421f7474c 652
tnanbu 13:df67ca499051 653 return status;
tnanbu 13:df67ca499051 654 }
tnanbu 13:df67ca499051 655
tnanbu 13:df67ca499051 656 /*******************************************************
tnanbu 13:df67ca499051 657 EEPROM READ
tnanbu 13:df67ca499051 658 ********************************************************/
tnanbu 13:df67ca499051 659 uint8_t readEEPROMByte(uint32_t address) {
tnanbu 13:df67ca499051 660 volatile uint8_t tmp ;
tnanbu 13:df67ca499051 661 address = address + 0x08080000;
tnanbu 13:df67ca499051 662 tmp = *(__IO uint8_t*)address;
tnanbu 13:df67ca499051 663 return tmp;
tnanbu 13:df67ca499051 664 }
tnanbu 13:df67ca499051 665
tnanbu 13:df67ca499051 666 /***************************
tnanbu 13:df67ca499051 667 integer sqrt
tnanbu 13:df67ca499051 668 整数 sqrt √演算を整数で ライブラリより速い
tnanbu 13:df67ca499051 669 ****************************/
tnanbu 13:df67ca499051 670 int int_sqrt(unsigned int x)
tnanbu 11:2d5fcf102778 671 {
tnanbu 13:df67ca499051 672 register int a = 0, c = 0, y = 0, i = 0, t = x;
tnanbu 13:df67ca499051 673 while(t >>= 1){
tnanbu 13:df67ca499051 674 ++i;
tnanbu 13:df67ca499051 675 }
tnanbu 13:df67ca499051 676 for(i += i & 1; i >= 0; i -= 2){
tnanbu 13:df67ca499051 677 c = (y << 1 | 1) <= x >> i;
tnanbu 13:df67ca499051 678 a = a << 1 | c;
tnanbu 13:df67ca499051 679 y = y << 1 | c;
tnanbu 13:df67ca499051 680 x -= c * y << i;
tnanbu 13:df67ca499051 681 y += c;
tnanbu 13:df67ca499051 682 }
tnanbu 13:df67ca499051 683 return a;
tnanbu 7:b69fa9bb320d 684 }