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

Dependencies:   mbed SDFileSystem_

Committer:
tnanbu
Date:
Thu Sep 16 02:31:24 2021 +0000
Revision:
44:48fa8beb3b00
Parent:
43:024421f7474c
Child:
45:8be3cec8f1a6
400Hz -> 1kHz; read xyz

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 13:df67ca499051 153
tnanbu 33:3369e5fe46aa 154 ax+= tx;
tnanbu 33:3369e5fe46aa 155 ay+= ty;
tnanbu 33:3369e5fe46aa 156 az+= tz;
tnanbu 33:3369e5fe46aa 157 as+= scr;
tnanbu 36:709c6fae0b2e 158 //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 159 //pc.printf("new x:%d y:%d,z:%d scr=%d, max=%d\r\n",tx,ty,tz,scr,tmp_max);
tnanbu 18:2a42f4052139 160
tnanbu 33:3369e5fe46aa 161 //Total Max G
tnanbu 13:df67ca499051 162 if ( max_g < scr) {
tnanbu 13:df67ca499051 163 max_g = scr;
tnanbu 38:87b7b3de6e88 164 //update=1;
tnanbu 33:3369e5fe46aa 165 //pc.printf("%max g=%d \r\n",max_g);
tnanbu 13:df67ca499051 166 //Save EEPROM
tnanbu 28:8bda44be0dd0 167 for(int i = 0; i < 4; i++){
tnanbu 38:87b7b3de6e88 168 //pc.printf("writerom 0x%x\r\n",(max_g >> 8*i) & 0xFF);
tnanbu 28:8bda44be0dd0 169 writeEEPROMByte(i, (max_g >> 8*i) & 0xFF);
tnanbu 28:8bda44be0dd0 170 }
tnanbu 8:7f80139df48d 171 }
tnanbu 13:df67ca499051 172
tnanbu 36:709c6fae0b2e 173 //MAX G per cycle
tnanbu 33:3369e5fe46aa 174 if(tmp_max < scr){
tnanbu 42:f42b74882970 175 //pc.printf("tmp_max:%d,%d",tmp_max,scr);
tnanbu 33:3369e5fe46aa 176 tmp_max = scr;
tnanbu 33:3369e5fe46aa 177 }
tnanbu 33:3369e5fe46aa 178
tnanbu 36:709c6fae0b2e 179 //平均(/s)
tnanbu 44:48fa8beb3b00 180 if(newcount == 500){
tnanbu 44:48fa8beb3b00 181 float asc = (float)as / 500.0f;
tnanbu 40:16c2d6b97a92 182 pc.printf("avarage(new) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n",
tnanbu 44:48fa8beb3b00 183 (float)ax/500.0f*0.005,(float)ay/500.0f*0.005,(float)az/500.0f*0.005,(float)as/500.0f*0.005, (float)tmp_max*0.005);
tnanbu 36:709c6fae0b2e 184 sprintf(stracc1,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc*0.005,(float)tmp_max*0.005);
tnanbu 33:3369e5fe46aa 185
tnanbu 36:709c6fae0b2e 186 if((strlen(buffer1)+strlen(stracc1)) > DATA_SIZE) {
tnanbu 36:709c6fae0b2e 187 pc.printf("try write fp1:%d,%d\r\n",strlen(buffer1),strlen(stracc1));
tnanbu 33:3369e5fe46aa 188 //ret = fprintf(fp1,"%s",buffer1);
tnanbu 43:024421f7474c 189 //ret = fwrite(buffer1,sizeof(char),strlen(buffer1),fp1);
tnanbu 43:024421f7474c 190 while((fwrite(buffer1,sizeof(char),strlen(buffer1),fp1) != strlen(buffer1)) && (retry < RETRY_COUNT)){
tnanbu 43:024421f7474c 191 if(retry < RETRY_COUNT -1) {
tnanbu 43:024421f7474c 192 pc.printf("fp1 fwrite failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 193 }
tnanbu 43:024421f7474c 194 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 195 pc.printf("fp1 fwrite failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 196 reboot_count++;
tnanbu 43:024421f7474c 197 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 198 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 199 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 200 }
tnanbu 43:024421f7474c 201 LED_Control_Error();
tnanbu 43:024421f7474c 202 NVIC_SystemReset();
tnanbu 43:024421f7474c 203 }
tnanbu 43:024421f7474c 204 retry++;
tnanbu 43:024421f7474c 205 wait_ms(1);
tnanbu 43:024421f7474c 206 }
tnanbu 43:024421f7474c 207 pc.printf("fp1 fwrite success:%d\r\n",ret);
tnanbu 43:024421f7474c 208 retry = 0;
tnanbu 43:024421f7474c 209 writed_flag = 1;
tnanbu 43:024421f7474c 210 ledcount_write = 0;
tnanbu 43:024421f7474c 211
tnanbu 8:7f80139df48d 212 memset(buffer1,0,sizeof(buffer1));
tnanbu 8:7f80139df48d 213 sprintf(buffer1,"%s",stracc1);
tnanbu 35:69e2bc347f0c 214 } else {
tnanbu 11:2d5fcf102778 215 sprintf(buffer1,"%s%s",buffer1,stracc1);
tnanbu 7:b69fa9bb320d 216 }
tnanbu 13:df67ca499051 217
tnanbu 33:3369e5fe46aa 218 as=ax=ay=az=0;
tnanbu 33:3369e5fe46aa 219 newcount = 0;
tnanbu 33:3369e5fe46aa 220 tmp_max = 0;
tnanbu 33:3369e5fe46aa 221 }
tnanbu 33:3369e5fe46aa 222
tnanbu 43:024421f7474c 223 //LED Control
tnanbu 43:024421f7474c 224 if(writed_flag){
tnanbu 43:024421f7474c 225 LED_Control_Write(ledcount_write);
tnanbu 43:024421f7474c 226 ledcount_write++;
tnanbu 43:024421f7474c 227 }
tnanbu 43:024421f7474c 228
tnanbu 35:69e2bc347f0c 229 if( (oldcount % 10) == 0){
tnanbu 11:2d5fcf102778 230 //LIS3DH
tnanbu 36:709c6fae0b2e 231 read3axes(&tx2,&ty2,&tz2);
tnanbu 36:709c6fae0b2e 232 scr2 = int_sqrt( tx2*tx2 + ty2*ty2 + tz2*tz2);
tnanbu 36:709c6fae0b2e 233 ax2+= tx2;
tnanbu 36:709c6fae0b2e 234 ay2+= ty2;
tnanbu 36:709c6fae0b2e 235 az2+= tz2;
tnanbu 36:709c6fae0b2e 236 as2+= scr2;
tnanbu 36:709c6fae0b2e 237 if(tmp_max2 < scr2){
tnanbu 36:709c6fae0b2e 238 tmp_max2 = scr2;
tnanbu 35:69e2bc347f0c 239 }
tnanbu 36:709c6fae0b2e 240 //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 241 //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 242 //sprintf(stracc2,"%d,%d,%d\r\n",timecount,time(NULL),scr);
tnanbu 11:2d5fcf102778 243 //pc.printf("lis3dh:%s",stracc2);
tnanbu 44:48fa8beb3b00 244 if(oldcount == 5000){
tnanbu 44:48fa8beb3b00 245 float asc2 = (float)as2 / 500.0f;
tnanbu 38:87b7b3de6e88 246 //pc.printf("avarage(old) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n",
tnanbu 38:87b7b3de6e88 247 //(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 248 sprintf(stracc2,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc2*0.005,(float)tmp_max2*0.005);
tnanbu 35:69e2bc347f0c 249
tnanbu 36:709c6fae0b2e 250 if( (strlen(buffer2)+ strlen(stracc2)) > DATA_SIZE) {
tnanbu 43:024421f7474c 251 pc.printf("try write fp2:%d,%d\r\n",strlen(buffer2),strlen(stracc2));
tnanbu 43:024421f7474c 252 while( (fwrite(buffer2,sizeof(char),strlen(buffer2),fp2) != strlen(buffer2)) && (retry < RETRY_COUNT)){
tnanbu 43:024421f7474c 253 if(retry < RETRY_COUNT -1) {
tnanbu 43:024421f7474c 254 pc.printf("fp2 fwrite failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 255 }
tnanbu 43:024421f7474c 256 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 257 pc.printf("fp2 fwrite failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 258 reboot_count++;
tnanbu 43:024421f7474c 259 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 260 writeEEPROMByte(i+8,0x00);
tnanbu 43:024421f7474c 261 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 262 }
tnanbu 43:024421f7474c 263 LED_Control_Error();
tnanbu 43:024421f7474c 264 NVIC_SystemReset();
tnanbu 43:024421f7474c 265 }
tnanbu 43:024421f7474c 266 retry++;
tnanbu 43:024421f7474c 267 wait_ms(1);
tnanbu 35:69e2bc347f0c 268 }
tnanbu 43:024421f7474c 269 pc.printf("fp2 fwrite success:%d\r\n",ret);
tnanbu 43:024421f7474c 270 retry = 0;
tnanbu 35:69e2bc347f0c 271 memset(buffer2,0,sizeof(buffer2));
tnanbu 35:69e2bc347f0c 272 sprintf(buffer2,"%s",stracc2);
tnanbu 35:69e2bc347f0c 273 } else {
tnanbu 35:69e2bc347f0c 274 sprintf(buffer2,"%s%s",buffer2,stracc2);
tnanbu 13:df67ca499051 275 }
tnanbu 35:69e2bc347f0c 276
tnanbu 35:69e2bc347f0c 277 oldcount = 0;
tnanbu 35:69e2bc347f0c 278 as2=ax2=ay2=az2=0;
tnanbu 35:69e2bc347f0c 279 tmp_max2 = 0;
tnanbu 7:b69fa9bb320d 280 }
tnanbu 11:2d5fcf102778 281 }
tnanbu 38:87b7b3de6e88 282
tnanbu 38:87b7b3de6e88 283 if((time(NULL) % 300) == 0){
tnanbu 38:87b7b3de6e88 284 //5 minutes passed. Save File.
tnanbu 43:024421f7474c 285 //pc.printf("5minutes passed. Save File.\r\n");
tnanbu 38:87b7b3de6e88 286 if(fp1){
tnanbu 43:024421f7474c 287 while(fclose(fp1) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 288 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 289 pc.printf("fp1 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 290 }
tnanbu 43:024421f7474c 291 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 292 pc.printf("fp1 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 293 reboot_count++;
tnanbu 43:024421f7474c 294 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 295 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 296 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 297 }
tnanbu 43:024421f7474c 298 LED_Control_Error();
tnanbu 43:024421f7474c 299 NVIC_SystemReset();
tnanbu 43:024421f7474c 300 }
tnanbu 43:024421f7474c 301 retry++;
tnanbu 43:024421f7474c 302 wait_ms(1);
tnanbu 43:024421f7474c 303 }
tnanbu 43:024421f7474c 304 retry = 0;
tnanbu 38:87b7b3de6e88 305 fp1 = NULL;
tnanbu 38:87b7b3de6e88 306 }
tnanbu 38:87b7b3de6e88 307 if(fp2){
tnanbu 43:024421f7474c 308 while(fclose(fp2) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 309 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 310 pc.printf("fp2 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 311 }
tnanbu 43:024421f7474c 312 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 313 pc.printf("fp2 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 314 reboot_count++;
tnanbu 43:024421f7474c 315 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 316 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 317 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 318 }
tnanbu 43:024421f7474c 319 LED_Control_Error();
tnanbu 43:024421f7474c 320 NVIC_SystemReset();
tnanbu 43:024421f7474c 321 }
tnanbu 43:024421f7474c 322 retry++;
tnanbu 43:024421f7474c 323 wait_ms(1);
tnanbu 43:024421f7474c 324 }
tnanbu 43:024421f7474c 325 retry = 0;
tnanbu 38:87b7b3de6e88 326 fp2 = NULL;
tnanbu 38:87b7b3de6e88 327 }
tnanbu 43:024421f7474c 328
tnanbu 38:87b7b3de6e88 329 fp1 = fopen(filename1,"ab");
tnanbu 38:87b7b3de6e88 330 if(!fp1){
tnanbu 43:024421f7474c 331 while(!fp1 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 332 pc.printf("fp1 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 333 wait_ms(1);
tnanbu 43:024421f7474c 334 fp1 = fopen(filename1,"ab");
tnanbu 43:024421f7474c 335 if(fp1){
tnanbu 43:024421f7474c 336 pc.printf("fp1 fopen success.\r\n");
tnanbu 43:024421f7474c 337 retry = 0;
tnanbu 43:024421f7474c 338 break;
tnanbu 43:024421f7474c 339 }
tnanbu 43:024421f7474c 340 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 341 pc.printf("fp1 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 342 }
tnanbu 43:024421f7474c 343 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 344 pc.printf("fp1 fopen failed. Reboot! %d\r\n",reboot_count+1);
tnanbu 43:024421f7474c 345 reboot_count++;
tnanbu 43:024421f7474c 346
tnanbu 43:024421f7474c 347 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 348 pc.printf("writeEEPROM(reboot) 0x%x\r\n",(reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 349 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 350 HAL_StatusTypeDef status = writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 351 pc.printf("writed:0x%x,%d\r\n",readEEPROMByte(i+8),status);
tnanbu 43:024421f7474c 352 }
tnanbu 43:024421f7474c 353 LED_Control_Error();
tnanbu 43:024421f7474c 354 NVIC_SystemReset();
tnanbu 43:024421f7474c 355 }
tnanbu 43:024421f7474c 356 retry++;
tnanbu 43:024421f7474c 357 }
tnanbu 38:87b7b3de6e88 358 }
tnanbu 38:87b7b3de6e88 359 fp2 = fopen(filename2,"ab");
tnanbu 38:87b7b3de6e88 360 if(!fp2){
tnanbu 43:024421f7474c 361 while(!fp2 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 362 pc.printf("fp2 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 363 wait_ms(1);
tnanbu 43:024421f7474c 364 fp2 = fopen(filename2,"ab");
tnanbu 43:024421f7474c 365 if(fp2){
tnanbu 43:024421f7474c 366 pc.printf("fp2 fopen success.\r\n");
tnanbu 43:024421f7474c 367 retry = 0;
tnanbu 43:024421f7474c 368 break;
tnanbu 43:024421f7474c 369 }
tnanbu 43:024421f7474c 370 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 371 pc.printf("fp1 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 372 }
tnanbu 43:024421f7474c 373 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 374 pc.printf("fp1 fopen failed. Reboot!\r\n");
tnanbu 43:024421f7474c 375 reboot_count++;
tnanbu 43:024421f7474c 376 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 377 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 378 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 379 }
tnanbu 43:024421f7474c 380 LED_Control_Error();
tnanbu 43:024421f7474c 381 NVIC_SystemReset();
tnanbu 43:024421f7474c 382 }
tnanbu 43:024421f7474c 383 retry++;
tnanbu 43:024421f7474c 384 }
tnanbu 38:87b7b3de6e88 385 }
tnanbu 38:87b7b3de6e88 386 }
tnanbu 19:2475d32bd93f 387
tnanbu 13:df67ca499051 388 if(time(NULL) > 86400){
tnanbu 8:7f80139df48d 389 //Create New File
tnanbu 8:7f80139df48d 390 set_time(NULL);
tnanbu 11:2d5fcf102778 391 timecount = 0;
tnanbu 36:709c6fae0b2e 392 if(fp1){
tnanbu 43:024421f7474c 393 while(fclose(fp1) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 394 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 395 pc.printf("fp1 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 396 }
tnanbu 43:024421f7474c 397 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 398 pc.printf("fp1 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 399 reboot_count++;
tnanbu 43:024421f7474c 400 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 401 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 402 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 403 }
tnanbu 43:024421f7474c 404 LED_Control_Error();
tnanbu 43:024421f7474c 405 NVIC_SystemReset();
tnanbu 43:024421f7474c 406 }
tnanbu 43:024421f7474c 407 retry++;
tnanbu 43:024421f7474c 408 wait_ms(1);
tnanbu 43:024421f7474c 409 }
tnanbu 43:024421f7474c 410 retry = 0;
tnanbu 36:709c6fae0b2e 411 fp1 = NULL;
tnanbu 36:709c6fae0b2e 412 }
tnanbu 36:709c6fae0b2e 413 if(fp2){
tnanbu 43:024421f7474c 414 while(fclose(fp2) != 0 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 415 if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 416 pc.printf("fp12 fclose failed:%d. retry=%d\r\n",ret,retry);
tnanbu 43:024421f7474c 417 }
tnanbu 43:024421f7474c 418 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 419 pc.printf("fp2 fclose failed:%d. Reboot!\r\n",ret);
tnanbu 43:024421f7474c 420 reboot_count++;
tnanbu 43:024421f7474c 421 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 422 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 423 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 424 }
tnanbu 43:024421f7474c 425 LED_Control_Error();
tnanbu 43:024421f7474c 426 NVIC_SystemReset();
tnanbu 43:024421f7474c 427 }
tnanbu 43:024421f7474c 428 retry++;
tnanbu 43:024421f7474c 429 wait_ms(1);
tnanbu 43:024421f7474c 430 }
tnanbu 43:024421f7474c 431 retry = 0;
tnanbu 36:709c6fae0b2e 432 fp2 = NULL;
tnanbu 36:709c6fae0b2e 433 }
tnanbu 8:7f80139df48d 434 lognum1++;
tnanbu 8:7f80139df48d 435 lognum2++;
tnanbu 13:df67ca499051 436 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 437 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 33:3369e5fe46aa 438 fp1 = fopen(filename1,"ab");
tnanbu 43:024421f7474c 439 while(!fp1 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 440 pc.printf("fp1 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 441 wait_ms(1);
tnanbu 43:024421f7474c 442 fp1 = fopen(filename1,"ab");
tnanbu 43:024421f7474c 443 if(fp1){
tnanbu 43:024421f7474c 444 pc.printf("fp1 fopen success.\r\n");
tnanbu 43:024421f7474c 445 retry = 0;
tnanbu 43:024421f7474c 446 break;
tnanbu 43:024421f7474c 447 }
tnanbu 43:024421f7474c 448 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 449 pc.printf("fp1 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 450 }
tnanbu 43:024421f7474c 451 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 452 pc.printf("fp1 fopen failed. Reboot!\r\n");
tnanbu 43:024421f7474c 453 reboot_count++;
tnanbu 43:024421f7474c 454 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 455 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 456 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 457 }
tnanbu 43:024421f7474c 458 LED_Control_Error();
tnanbu 43:024421f7474c 459 NVIC_SystemReset();
tnanbu 43:024421f7474c 460 }
tnanbu 43:024421f7474c 461 retry++;
tnanbu 40:16c2d6b97a92 462 }
tnanbu 33:3369e5fe46aa 463 fp2 = fopen(filename2,"ab");
tnanbu 43:024421f7474c 464 while(!fp2 && retry < RETRY_COUNT){
tnanbu 43:024421f7474c 465 pc.printf("fp2 fopen failed:%d\r\n",errno);
tnanbu 43:024421f7474c 466 wait_ms(1);
tnanbu 43:024421f7474c 467 fp1 = fopen(filename2,"ab");
tnanbu 43:024421f7474c 468 if(fp2){
tnanbu 43:024421f7474c 469 pc.printf("fp2 fopen success.\r\n");
tnanbu 43:024421f7474c 470 retry = 0;
tnanbu 43:024421f7474c 471 break;
tnanbu 43:024421f7474c 472 }
tnanbu 43:024421f7474c 473 else if(retry < RETRY_COUNT -1){
tnanbu 43:024421f7474c 474 pc.printf("fp2 fopen failed. retyr=%d\r\n",retry);
tnanbu 43:024421f7474c 475 }
tnanbu 43:024421f7474c 476 else if(retry == RETRY_COUNT -1){
tnanbu 43:024421f7474c 477 pc.printf("fp2 fopen failed. Reboot!\r\n");
tnanbu 43:024421f7474c 478 reboot_count++;
tnanbu 43:024421f7474c 479 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 480 writeEEPROMByte(i+8, 0x00);
tnanbu 43:024421f7474c 481 writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 482 }
tnanbu 43:024421f7474c 483 LED_Control_Error();
tnanbu 43:024421f7474c 484 NVIC_SystemReset();
tnanbu 43:024421f7474c 485 }
tnanbu 43:024421f7474c 486 retry++;
tnanbu 11:2d5fcf102778 487 }
tnanbu 40:16c2d6b97a92 488
tnanbu 31:4ac70aa71542 489 pc.printf("Create New File:%d,%d",timecount,time(NULL));
tnanbu 7:b69fa9bb320d 490 }
tnanbu 37:1b459e0ef847 491
tnanbu 37:1b459e0ef847 492 //Button Check
tnanbu 37:1b459e0ef847 493 if(button.read() == 1){
tnanbu 37:1b459e0ef847 494 btn_flag++;
tnanbu 37:1b459e0ef847 495 //pc.printf("Button pressed:%d\r\n",btn_flag);
tnanbu 37:1b459e0ef847 496 }
tnanbu 37:1b459e0ef847 497 else{
tnanbu 37:1b459e0ef847 498 btn_flag = 0;
tnanbu 37:1b459e0ef847 499 }
tnanbu 37:1b459e0ef847 500
tnanbu 43:024421f7474c 501 if(btn_flag > 1000 && !clear_flag){
tnanbu 43:024421f7474c 502 //ROM Crear
tnanbu 43:024421f7474c 503 pc.printf("Button pressed. ROM clear\r\n");
tnanbu 43:024421f7474c 504 for(int i = 0; i < 16; i++){
tnanbu 43:024421f7474c 505 writeEEPROMByte(i, 0x00);
tnanbu 43:024421f7474c 506 }
tnanbu 43:024421f7474c 507
tnanbu 37:1b459e0ef847 508 if(fp1){
tnanbu 37:1b459e0ef847 509 fclose(fp1);
tnanbu 37:1b459e0ef847 510 fp1 = NULL;
tnanbu 37:1b459e0ef847 511 }
tnanbu 37:1b459e0ef847 512 if(fp2){
tnanbu 37:1b459e0ef847 513 fclose(fp2);
tnanbu 37:1b459e0ef847 514 fp2 = NULL;
tnanbu 37:1b459e0ef847 515 }
tnanbu 38:87b7b3de6e88 516 btn_flag = 0;
tnanbu 43:024421f7474c 517 clear_flag = 1;
tnanbu 43:024421f7474c 518 boot_count = 0;
tnanbu 43:024421f7474c 519 reboot_count = 0;
tnanbu 37:1b459e0ef847 520 }
tnanbu 13:df67ca499051 521 }
tnanbu 13:df67ca499051 522
tnanbu 13:df67ca499051 523 int main()
tnanbu 13:df67ca499051 524 {
tnanbu 43:024421f7474c 525 short retry = 0;
tnanbu 43:024421f7474c 526 pc.printf("UD-GS5 Start acceleration measurement\r\n");
tnanbu 43:024421f7474c 527 set_time(NULL);
tnanbu 43:024421f7474c 528
tnanbu 43:024421f7474c 529 myled = 0;
tnanbu 43:024421f7474c 530 wait(3);
tnanbu 43:024421f7474c 531 myled = 1;
tnanbu 43:024421f7474c 532
tnanbu 43:024421f7474c 533 //Read Boot/Reboot count
tnanbu 43:024421f7474c 534 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 535 boot_count |= readEEPROMByte(i+4) << 8*i;
tnanbu 43:024421f7474c 536 }
tnanbu 43:024421f7474c 537 boot_count++;
tnanbu 43:024421f7474c 538 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 539 writeEEPROMByte(i+4, (boot_count >> 8*i) & 0xFF);
tnanbu 43:024421f7474c 540 }
tnanbu 43:024421f7474c 541 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 542 //pc.printf("reboot_count:0x%x\r\n",readEEPROMByte(i+8));
tnanbu 43:024421f7474c 543 reboot_count |= readEEPROMByte(i+8) << 8*i;
tnanbu 43:024421f7474c 544 }
tnanbu 43:024421f7474c 545 pc.printf("boot=%d, reboot=%d\r\n",boot_count,reboot_count);
tnanbu 43:024421f7474c 546
tnanbu 43:024421f7474c 547 //Read Max G
tnanbu 43:024421f7474c 548 for(int i = 0; i < 4; i++){
tnanbu 43:024421f7474c 549 //pc.printf("readEEPROM:0x%x\r\n",readEEPROMByte(i));
tnanbu 43:024421f7474c 550 max_g |= readEEPROMByte(i) << 8*i;
tnanbu 43:024421f7474c 551 }
tnanbu 43:024421f7474c 552 pc.printf("read max_g from eeprom:%2.2f\r\n",(float)max_g*0.005);
tnanbu 43:024421f7474c 553
tnanbu 36:709c6fae0b2e 554 i2c.frequency(400000);
tnanbu 43:024421f7474c 555
tnanbu 13:df67ca499051 556 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 557 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 41:43828af3765f 558
tnanbu 41:43828af3765f 559 if (wdt.WatchdogCausedReset())
tnanbu 41:43828af3765f 560 pc.printf("WatchDog Reset.\r\n");
tnanbu 41:43828af3765f 561
tnanbu 43:024421f7474c 562 wdt.Configure(23);
tnanbu 13:df67ca499051 563
tnanbu 33:3369e5fe46aa 564 while(!fp1 && retry < 5){
tnanbu 33:3369e5fe46aa 565 fp1 = fopen(filename1,"ab");
tnanbu 33:3369e5fe46aa 566 if(!fp1) {
tnanbu 43:024421f7474c 567 pc.printf("fp1(%s) fopen failed errno:%d\r\n",filename1,errno);
tnanbu 33:3369e5fe46aa 568 //NVIC_SystemReset();
tnanbu 33:3369e5fe46aa 569 }
tnanbu 40:16c2d6b97a92 570 else{
tnanbu 40:16c2d6b97a92 571 pc.printf("fp1 fopen success\r\n");
tnanbu 40:16c2d6b97a92 572 }
tnanbu 33:3369e5fe46aa 573 retry++;
tnanbu 33:3369e5fe46aa 574 wait_ms(100);
tnanbu 19:2475d32bd93f 575 }
tnanbu 33:3369e5fe46aa 576 retry = 0;
tnanbu 43:024421f7474c 577
tnanbu 33:3369e5fe46aa 578 while(!fp2 && retry < 5){
tnanbu 33:3369e5fe46aa 579 fp2 = fopen(filename2,"ab");
tnanbu 33:3369e5fe46aa 580 if(!fp2) {
tnanbu 43:024421f7474c 581 pc.printf("fp2(%s) fopen failed errno:%d\r\n",filename2,errno);
tnanbu 33:3369e5fe46aa 582 //NVIC_SystemReset();
tnanbu 33:3369e5fe46aa 583 }
tnanbu 40:16c2d6b97a92 584 else{
tnanbu 40:16c2d6b97a92 585 pc.printf("fp2 fopen success\r\n");
tnanbu 40:16c2d6b97a92 586 }
tnanbu 36:709c6fae0b2e 587 retry++;
tnanbu 33:3369e5fe46aa 588 wait_ms(100);
tnanbu 13:df67ca499051 589 }
tnanbu 43:024421f7474c 590 retry = 0;
tnanbu 28:8bda44be0dd0 591
tnanbu 19:2475d32bd93f 592 while(init) {
tnanbu 19:2475d32bd93f 593 init = initLIS331();
tnanbu 19:2475d32bd93f 594 initLIS3DH();
tnanbu 41:43828af3765f 595 pc.printf(" init acc sensor %d\r\n",init);
tnanbu 19:2475d32bd93f 596 wait_ms(100);
tnanbu 13:df67ca499051 597 }
tnanbu 18:2a42f4052139 598 //interrupt.attach_us(&timer,20000);//20ms
tnanbu 43:024421f7474c 599
tnanbu 43:024421f7474c 600 while(1)
tnanbu 13:df67ca499051 601 {
tnanbu 41:43828af3765f 602 wdt.Service();
tnanbu 35:69e2bc347f0c 603 timecount++;
tnanbu 35:69e2bc347f0c 604 oldcount++;
tnanbu 35:69e2bc347f0c 605 newcount++;
tnanbu 28:8bda44be0dd0 606 sub();
tnanbu 44:48fa8beb3b00 607 //wait_us(2500);
hakusan270 0:b76e4ba14765 608 }
tnanbu 43:024421f7474c 609
tnanbu 43:024421f7474c 610 //pc.printf("Program End.\r\n");
tnanbu 38:87b7b3de6e88 611 return 0;
hakusan270 0:b76e4ba14765 612 }
tnanbu 11:2d5fcf102778 613 /*********** porting **************/
tnanbu 11:2d5fcf102778 614 void spiFormat(int b,int m)
tnanbu 11:2d5fcf102778 615 {
tnanbu 11:2d5fcf102778 616 STSPI.format(b,m); /* 8bit */
hakusan270 1:025596ffc973 617 }
tnanbu 11:2d5fcf102778 618 void spiFrequency(int f)
tnanbu 11:2d5fcf102778 619 {
hakusan270 1:025596ffc973 620 STSPI.frequency(f); /* 1Mbps */
hakusan270 1:025596ffc973 621 }
tnanbu 11:2d5fcf102778 622 void spiWriteCS(int cs)
tnanbu 11:2d5fcf102778 623 {
hakusan270 1:025596ffc973 624 STSPICS=cs;
hakusan270 1:025596ffc973 625 }
tnanbu 11:2d5fcf102778 626 int spiWrite(int wd)
tnanbu 11:2d5fcf102778 627 {
tnanbu 11:2d5fcf102778 628 return ( STSPI.write(wd));
tnanbu 11:2d5fcf102778 629 }
tnanbu 7:b69fa9bb320d 630
tnanbu 13:df67ca499051 631 /*******************************************************
tnanbu 13:df67ca499051 632 EEPROM WRITE
tnanbu 13:df67ca499051 633 ********************************************************/
tnanbu 13:df67ca499051 634 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data)
tnanbu 13:df67ca499051 635 {
tnanbu 13:df67ca499051 636 HAL_StatusTypeDef status;
tnanbu 13:df67ca499051 637 address = address + 0x08080000;
tnanbu 43:024421f7474c 638
tnanbu 43:024421f7474c 639 if (!IS_FLASH_DATA_ADDRESS(address)) {
tnanbu 43:024421f7474c 640 pc.printf("writeEEPROMByte address outofrange\r\n");
tnanbu 43:024421f7474c 641 return HAL_ERROR;
tnanbu 43:024421f7474c 642 }
tnanbu 43:024421f7474c 643
tnanbu 43:024421f7474c 644 HAL_FLASHEx_DATAEEPROM_Unlock();
tnanbu 43:024421f7474c 645 //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_Unlock:%d\r\n",status);
tnanbu 13:df67ca499051 646 status = HAL_FLASHEx_DATAEEPROM_Program(TYPEPROGRAMDATA_BYTE, address, data);
tnanbu 43:024421f7474c 647 //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_Program:%d\r\n",status);
tnanbu 43:024421f7474c 648 HAL_FLASHEx_DATAEEPROM_Lock();
tnanbu 43:024421f7474c 649 //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_lock:%d\r\n",status);
tnanbu 43:024421f7474c 650
tnanbu 13:df67ca499051 651 return status;
tnanbu 13:df67ca499051 652 }
tnanbu 13:df67ca499051 653
tnanbu 13:df67ca499051 654 /*******************************************************
tnanbu 13:df67ca499051 655 EEPROM READ
tnanbu 13:df67ca499051 656 ********************************************************/
tnanbu 13:df67ca499051 657 uint8_t readEEPROMByte(uint32_t address) {
tnanbu 13:df67ca499051 658 volatile uint8_t tmp ;
tnanbu 13:df67ca499051 659 address = address + 0x08080000;
tnanbu 13:df67ca499051 660 tmp = *(__IO uint8_t*)address;
tnanbu 13:df67ca499051 661 return tmp;
tnanbu 13:df67ca499051 662 }
tnanbu 13:df67ca499051 663
tnanbu 13:df67ca499051 664 /***************************
tnanbu 13:df67ca499051 665 integer sqrt
tnanbu 13:df67ca499051 666 整数 sqrt √演算を整数で ライブラリより速い
tnanbu 13:df67ca499051 667 ****************************/
tnanbu 13:df67ca499051 668 int int_sqrt(unsigned int x)
tnanbu 11:2d5fcf102778 669 {
tnanbu 13:df67ca499051 670 register int a = 0, c = 0, y = 0, i = 0, t = x;
tnanbu 13:df67ca499051 671 while(t >>= 1){
tnanbu 13:df67ca499051 672 ++i;
tnanbu 13:df67ca499051 673 }
tnanbu 13:df67ca499051 674 for(i += i & 1; i >= 0; i -= 2){
tnanbu 13:df67ca499051 675 c = (y << 1 | 1) <= x >> i;
tnanbu 13:df67ca499051 676 a = a << 1 | c;
tnanbu 13:df67ca499051 677 y = y << 1 | c;
tnanbu 13:df67ca499051 678 x -= c * y << i;
tnanbu 13:df67ca499051 679 y += c;
tnanbu 13:df67ca499051 680 }
tnanbu 13:df67ca499051 681 return a;
tnanbu 7:b69fa9bb320d 682 }