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

Dependencies:   mbed SDFileSystem_

Committer:
tnanbu
Date:
Tue Sep 07 09:10:41 2021 +0000
Revision:
35:69e2bc347f0c
Parent:
34:6bffe97ae35d
Child:
36:709c6fae0b2e
write old sensor log

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 33:3369e5fe46aa 3 //#include <time.h>
tnanbu 28:8bda44be0dd0 4 #include <errno.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 33:3369e5fe46aa 51 //#define MBED_BUFF 512
tnanbu 31:4ac70aa71542 52
tnanbu 11:2d5fcf102778 53
tnanbu 13:df67ca499051 54 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data);
tnanbu 13:df67ca499051 55 uint8_t readEEPROMByte(uint32_t address);
tnanbu 13:df67ca499051 56
tnanbu 13:df67ca499051 57
tnanbu 13:df67ca499051 58 //H3LIS331DL h3dacc(PB_7,PB_6);
tnanbu 13:df67ca499051 59 I2C i2c(PB_7,PB_6); //NUCLEO pin assign
hakusan270 5:fbeb85ebd47b 60
hakusan270 0:b76e4ba14765 61 RawSerial pc(PA_9, PA_10,115200); //console UART
tnanbu 13:df67ca499051 62 //LowPowerTicker interrupt;
tnanbu 18:2a42f4052139 63 //Ticker interrupt;
hakusan270 0:b76e4ba14765 64 SPI STSPI(PB_15, PB_14, PB_13); //mosi,miso,clk
hakusan270 0:b76e4ba14765 65 DigitalOut STSPICS(PB_12);
rgoto 6:bf4321ef0330 66
rgoto 6:bf4321ef0330 67 SDFileSystem *sd = new SDFileSystem(PA_12, PA_11, PB_3, PA_15, "sd"); // mosi, miso, sclk, cs, name
rgoto 6:bf4321ef0330 68
hakusan270 0:b76e4ba14765 69 DigitalOut led(PB_5);
hakusan270 1:025596ffc973 70 int initLIS3DH();
hakusan270 1:025596ffc973 71 int read3axes(short *tx,short *ty,short *tz);
tnanbu 13:df67ca499051 72 int initLIS331();
tnanbu 13:df67ca499051 73 int read3axes331(short *tx,short *ty,short *tz);
tnanbu 13:df67ca499051 74 int int_sqrt(unsigned int x);
tnanbu 7:b69fa9bb320d 75 //int readTemp(short *tmp);
tnanbu 11:2d5fcf102778 76 FILE *fp1,*fp2;//fp1:H3LIS331DL, fp2:LIS3DH
tnanbu 13:df67ca499051 77 unsigned long timecount = 0;
tnanbu 33:3369e5fe46aa 78 short oldcount = 0;
tnanbu 33:3369e5fe46aa 79 short newcount = 0;
tnanbu 28:8bda44be0dd0 80 long max_g=0;
tnanbu 33:3369e5fe46aa 81 long tmp_max=0;
tnanbu 35:69e2bc347f0c 82 long tmp_max2=0;
tnanbu 33:3369e5fe46aa 83 short update=0;
tnanbu 33:3369e5fe46aa 84 char buffer1[DATA_SIZE] = {};
tnanbu 33:3369e5fe46aa 85 char buffer2[DATA_SIZE] = {};
tnanbu 31:4ac70aa71542 86 char stracc1[32] = {}, stracc2[32] = {};
tnanbu 13:df67ca499051 87 int lognum1 = 0, lognum2 = 0;
tnanbu 33:3369e5fe46aa 88 char filename1[16]= {};
tnanbu 33:3369e5fe46aa 89 char filename2[16]= {};
tnanbu 19:2475d32bd93f 90 int ret = 0,init=1;
tnanbu 11:2d5fcf102778 91
tnanbu 18:2a42f4052139 92 /*
tnanbu 13:df67ca499051 93 void timer(){
tnanbu 15:12d0699ad423 94 }
tnanbu 18:2a42f4052139 95 */
tnanbu 15:12d0699ad423 96
tnanbu 15:12d0699ad423 97 void sub(){
tnanbu 33:3369e5fe46aa 98 static short tx=0,ty=0,tz=0;
tnanbu 33:3369e5fe46aa 99 static long scr = 0;
tnanbu 33:3369e5fe46aa 100 static long ax,ay,az,as;
tnanbu 35:69e2bc347f0c 101 static long ax2,ay2,az2,as2;
tnanbu 13:df67ca499051 102 //static int cnt;
tnanbu 33:3369e5fe46aa 103 //static char *bufferIndex;
tnanbu 33:3369e5fe46aa 104 //static unsigned int storeSize;
tnanbu 13:df67ca499051 105
tnanbu 13:df67ca499051 106 read3axes331(&tx,&ty,&tz);
tnanbu 13:df67ca499051 107 //キャリブレーションの補正
tnanbu 13:df67ca499051 108 tx += OFFSET_X;
tnanbu 13:df67ca499051 109 ty += OFFSET_Y;
tnanbu 13:df67ca499051 110 tz += OFFSET_Z;
tnanbu 13:df67ca499051 111
tnanbu 13:df67ca499051 112 //スカラー値変換
tnanbu 18:2a42f4052139 113 scr = int_sqrt( tx*tx + ty*ty + tz*tz);// 195mg/digit
tnanbu 33:3369e5fe46aa 114 //now_g = scr;
tnanbu 13:df67ca499051 115
tnanbu 33:3369e5fe46aa 116 ax+= tx;
tnanbu 33:3369e5fe46aa 117 ay+= ty;
tnanbu 33:3369e5fe46aa 118 az+= tz;
tnanbu 33:3369e5fe46aa 119 as+= scr;
tnanbu 35:69e2bc347f0c 120 //newcount++;
tnanbu 33:3369e5fe46aa 121 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 19:2475d32bd93f 122 //pc.printf("new x:%d y:%d,z:%d scaler = %d \r\n",tx,ty,tz,scr);
tnanbu 18:2a42f4052139 123
tnanbu 33:3369e5fe46aa 124 //Total Max G
tnanbu 13:df67ca499051 125 if ( max_g < scr) {
tnanbu 13:df67ca499051 126 max_g = scr;
tnanbu 13:df67ca499051 127 update=1;
tnanbu 33:3369e5fe46aa 128 //pc.printf("%max g=%d \r\n",max_g);
tnanbu 13:df67ca499051 129 //Save EEPROM
tnanbu 28:8bda44be0dd0 130 for(int i = 0; i < 4; i++){
tnanbu 28:8bda44be0dd0 131 pc.printf("writerom 0x%x\r\n",(max_g >> 8*i) & 0xFF);
tnanbu 28:8bda44be0dd0 132 writeEEPROMByte(i, (max_g >> 8*i) & 0xFF);
tnanbu 28:8bda44be0dd0 133 }
tnanbu 8:7f80139df48d 134 }
tnanbu 13:df67ca499051 135
tnanbu 33:3369e5fe46aa 136 //MAX G per 50cycle
tnanbu 33:3369e5fe46aa 137 if(tmp_max < scr){
tnanbu 33:3369e5fe46aa 138 tmp_max = scr;
tnanbu 33:3369e5fe46aa 139 }
tnanbu 33:3369e5fe46aa 140
tnanbu 31:4ac70aa71542 141 //sprintf(stracc1,"%d,%d,%2.2f,%2.2f,%2.2f,%2.2f\r\n",timecount,time(NULL),(float)tx*0.005,(float)ty*0.005,(float)tz*0.005,(float)scr*0.005);
tnanbu 33:3369e5fe46aa 142 //sprintf(stracc1,"%d,%d,%d\r\n",timecount,time(NULL),scr);
tnanbu 33:3369e5fe46aa 143 //sprintf(stracc1,"%d,%d\r\n",timecount,time(NULL));
tnanbu 13:df67ca499051 144 //pc.printf("h3lis331dl:%s",stracc1);
tnanbu 33:3369e5fe46aa 145
tnanbu 33:3369e5fe46aa 146 //50回平均(/s)
tnanbu 33:3369e5fe46aa 147 if (newcount == 50) {
tnanbu 33:3369e5fe46aa 148 float asc = (float)as / 50.0f;
tnanbu 33:3369e5fe46aa 149 pc.printf("avarage x:%3.2f,y:%3.2f,z:%3.2f,scaler=%3.2f,max:%3.2f\r\n",
tnanbu 33:3369e5fe46aa 150 (float)ax/50.0f*0.005,(float)ay/50.0f*0.005,(float)az/50.0f*0.005,(float)as/50.0f*0.005, (float)tmp_max*0.005);
tnanbu 33:3369e5fe46aa 151 sprintf(stracc1,"%d,%d,%3.2f,%3.2f\r\n",timecount,time(NULL),asc*0.005,(float)tmp_max*0.005);
tnanbu 33:3369e5fe46aa 152
tnanbu 33:3369e5fe46aa 153 if(strlen(buffer1)+strlen(stracc1) > DATA_SIZE) {
tnanbu 33:3369e5fe46aa 154 pc.printf("try write fp1\r\n");
tnanbu 33:3369e5fe46aa 155 //ret = fprintf(fp1,"%s",buffer1);
tnanbu 33:3369e5fe46aa 156 ret = fwrite(buffer1,sizeof(char),strlen(buffer1),fp1);
tnanbu 33:3369e5fe46aa 157 //if(ret <= 0){
tnanbu 33:3369e5fe46aa 158 if(ret < strlen(buffer1)){
tnanbu 28:8bda44be0dd0 159 pc.printf("fp1 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno);
tnanbu 13:df67ca499051 160 NVIC_SystemReset();
tnanbu 33:3369e5fe46aa 161 }
tnanbu 8:7f80139df48d 162 memset(buffer1,0,sizeof(buffer1));
tnanbu 8:7f80139df48d 163 sprintf(buffer1,"%s",stracc1);
tnanbu 35:69e2bc347f0c 164 } else {
tnanbu 11:2d5fcf102778 165 sprintf(buffer1,"%s%s",buffer1,stracc1);
tnanbu 7:b69fa9bb320d 166 }
tnanbu 13:df67ca499051 167
tnanbu 33:3369e5fe46aa 168 as=ax=ay=az=0;
tnanbu 33:3369e5fe46aa 169 newcount = 0;
tnanbu 33:3369e5fe46aa 170 tmp_max = 0;
tnanbu 33:3369e5fe46aa 171 }
tnanbu 33:3369e5fe46aa 172
tnanbu 35:69e2bc347f0c 173 if( (oldcount % 10) == 0){
tnanbu 11:2d5fcf102778 174 //LIS3DH
tnanbu 13:df67ca499051 175 read3axes(&tx,&ty,&tz);
tnanbu 13:df67ca499051 176 scr = int_sqrt( tx*tx + ty*ty + tz*tz);
tnanbu 35:69e2bc347f0c 177 ax2+= tx;
tnanbu 35:69e2bc347f0c 178 ay2+= ty;
tnanbu 35:69e2bc347f0c 179 az2+= tz;
tnanbu 35:69e2bc347f0c 180 as2+= scr;
tnanbu 35:69e2bc347f0c 181 if(tmp_max2 < scr){
tnanbu 35:69e2bc347f0c 182 tmp_max2 = scr;
tnanbu 35:69e2bc347f0c 183 }
tnanbu 31:4ac70aa71542 184 //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 185 //sprintf(stracc2,"%d,%d,%d\r\n",timecount,time(NULL),scr);
tnanbu 11:2d5fcf102778 186 //pc.printf("lis3dh:%s",stracc2);
tnanbu 35:69e2bc347f0c 187 if(oldcount == 50){
tnanbu 35:69e2bc347f0c 188 float asc2 = (float)as2 / 50.0f;
tnanbu 35:69e2bc347f0c 189 //pc.printf("avarage x:%3.2f,y:%3.2f,z:%3.2f,scaler=%3.2f,max:%3.2f\r\n",
tnanbu 35:69e2bc347f0c 190 //(float)ax2/50.0f*0.005,(float)ay2/50.0f*0.005,(float)az2/50.0f*0.005,(float)as2/50.0f*0.005, (float)tmp_max*0.005);
tnanbu 35:69e2bc347f0c 191 sprintf(stracc2,"%d,%d,%3.2f,%3.2f\r\n",timecount,time(NULL),asc2*0.005,(float)tmp_max2*0.005);
tnanbu 35:69e2bc347f0c 192
tnanbu 35:69e2bc347f0c 193 if(strlen(buffer2)+ strlen(stracc2)> DATA_SIZE) {
tnanbu 35:69e2bc347f0c 194 pc.printf("try write fp2\r\n");
tnanbu 35:69e2bc347f0c 195 ret = fwrite(buffer2,sizeof(char),strlen(buffer2),fp2);
tnanbu 35:69e2bc347f0c 196 if(ret < strlen(buffer2)){
tnanbu 35:69e2bc347f0c 197 pc.printf("fp2 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno);
tnanbu 35:69e2bc347f0c 198 NVIC_SystemReset();
tnanbu 35:69e2bc347f0c 199 }
tnanbu 35:69e2bc347f0c 200
tnanbu 35:69e2bc347f0c 201 memset(buffer2,0,sizeof(buffer2));
tnanbu 35:69e2bc347f0c 202 sprintf(buffer2,"%s",stracc2);
tnanbu 35:69e2bc347f0c 203 } else {
tnanbu 35:69e2bc347f0c 204 sprintf(buffer2,"%s%s",buffer2,stracc2);
tnanbu 13:df67ca499051 205 }
tnanbu 35:69e2bc347f0c 206
tnanbu 35:69e2bc347f0c 207 oldcount = 0;
tnanbu 35:69e2bc347f0c 208 as2=ax2=ay2=az2=0;
tnanbu 35:69e2bc347f0c 209 tmp_max2 = 0;
tnanbu 7:b69fa9bb320d 210 }
tnanbu 11:2d5fcf102778 211 }
tnanbu 19:2475d32bd93f 212
tnanbu 13:df67ca499051 213 if(time(NULL) > 86400){
tnanbu 8:7f80139df48d 214 //Create New File
tnanbu 8:7f80139df48d 215 set_time(NULL);
tnanbu 11:2d5fcf102778 216 timecount = 0;
tnanbu 8:7f80139df48d 217 fclose(fp1);
tnanbu 33:3369e5fe46aa 218 free(fp1);
tnanbu 28:8bda44be0dd0 219 fp1 = NULL;
tnanbu 8:7f80139df48d 220 fclose(fp2);
tnanbu 33:3369e5fe46aa 221 free(fp2);
tnanbu 28:8bda44be0dd0 222 fp2 = NULL;
tnanbu 8:7f80139df48d 223 lognum1++;
tnanbu 8:7f80139df48d 224 lognum2++;
tnanbu 13:df67ca499051 225 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 226 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 33:3369e5fe46aa 227 fp1 = fopen(filename1,"ab");
tnanbu 8:7f80139df48d 228 if(!fp1){
tnanbu 28:8bda44be0dd0 229 pc.printf("fp1 create file failed:%d\r\n",errno);
tnanbu 13:df67ca499051 230 NVIC_SystemReset();
tnanbu 8:7f80139df48d 231 }
tnanbu 33:3369e5fe46aa 232 fp2 = fopen(filename2,"ab");
tnanbu 11:2d5fcf102778 233 if(!fp2){
tnanbu 28:8bda44be0dd0 234 pc.printf("fp2 create file failed:%d\r\n",errno);
tnanbu 13:df67ca499051 235 NVIC_SystemReset();
tnanbu 11:2d5fcf102778 236 }
tnanbu 31:4ac70aa71542 237 pc.printf("Create New File:%d,%d",timecount,time(NULL));
tnanbu 7:b69fa9bb320d 238 }
tnanbu 13:df67ca499051 239 }
tnanbu 13:df67ca499051 240
tnanbu 13:df67ca499051 241 int main()
tnanbu 13:df67ca499051 242 {
tnanbu 33:3369e5fe46aa 243 short retry = 0;
tnanbu 13:df67ca499051 244 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 245 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 13:df67ca499051 246
tnanbu 33:3369e5fe46aa 247 while(!fp1 && retry < 5){
tnanbu 33:3369e5fe46aa 248 fp1 = fopen(filename1,"ab");
tnanbu 33:3369e5fe46aa 249 if(!fp1) {
tnanbu 33:3369e5fe46aa 250 pc.printf("fp1(%s) open failed errno:%d\r\n",filename1,errno);
tnanbu 33:3369e5fe46aa 251 //NVIC_SystemReset();
tnanbu 33:3369e5fe46aa 252 }
tnanbu 33:3369e5fe46aa 253 retry++;
tnanbu 33:3369e5fe46aa 254 wait_ms(100);
tnanbu 19:2475d32bd93f 255 }
tnanbu 33:3369e5fe46aa 256 retry = 0;
tnanbu 33:3369e5fe46aa 257 while(!fp2 && retry < 5){
tnanbu 33:3369e5fe46aa 258 fp2 = fopen(filename2,"ab");
tnanbu 33:3369e5fe46aa 259 if(!fp2) {
tnanbu 33:3369e5fe46aa 260 pc.printf("fp2(%s) open failed errno:%d\r\n",filename2,errno);
tnanbu 33:3369e5fe46aa 261 //NVIC_SystemReset();
tnanbu 33:3369e5fe46aa 262 }
tnanbu 33:3369e5fe46aa 263 wait_ms(100);
tnanbu 33:3369e5fe46aa 264 retry++;
tnanbu 13:df67ca499051 265 }
tnanbu 28:8bda44be0dd0 266
tnanbu 28:8bda44be0dd0 267 //Read Max G
tnanbu 28:8bda44be0dd0 268 for(int i = 0; i < 4; i++){
tnanbu 28:8bda44be0dd0 269 //pc.printf("readEEPROM:0x%x\r\n",readEEPROMByte(i));
tnanbu 28:8bda44be0dd0 270 max_g |= readEEPROMByte(i) << 8*i;
tnanbu 28:8bda44be0dd0 271 }
tnanbu 28:8bda44be0dd0 272 pc.printf("read max_g from eeprom:%d\r\n",max_g);
tnanbu 13:df67ca499051 273
tnanbu 19:2475d32bd93f 274 while(init) {
tnanbu 19:2475d32bd93f 275 init = initLIS331();
tnanbu 19:2475d32bd93f 276 initLIS3DH();
tnanbu 19:2475d32bd93f 277 pc.printf(" init acc sensor %d\r\n",ret);
tnanbu 19:2475d32bd93f 278 wait_ms(100);
tnanbu 13:df67ca499051 279 }
tnanbu 18:2a42f4052139 280 //interrupt.attach_us(&timer,20000);//20ms
tnanbu 13:df67ca499051 281 while(1)
tnanbu 13:df67ca499051 282 {
tnanbu 35:69e2bc347f0c 283 timecount++;
tnanbu 35:69e2bc347f0c 284 oldcount++;
tnanbu 35:69e2bc347f0c 285 newcount++;
tnanbu 28:8bda44be0dd0 286 sub();
tnanbu 28:8bda44be0dd0 287 wait_ms(20);
hakusan270 0:b76e4ba14765 288 }
hakusan270 0:b76e4ba14765 289 }
tnanbu 11:2d5fcf102778 290 /*********** porting **************/
tnanbu 11:2d5fcf102778 291 void spiFormat(int b,int m)
tnanbu 11:2d5fcf102778 292 {
tnanbu 11:2d5fcf102778 293 STSPI.format(b,m); /* 8bit */
hakusan270 1:025596ffc973 294 }
tnanbu 11:2d5fcf102778 295 void spiFrequency(int f)
tnanbu 11:2d5fcf102778 296 {
hakusan270 1:025596ffc973 297 STSPI.frequency(f); /* 1Mbps */
hakusan270 1:025596ffc973 298 }
tnanbu 11:2d5fcf102778 299 void spiWriteCS(int cs)
tnanbu 11:2d5fcf102778 300 {
hakusan270 1:025596ffc973 301 STSPICS=cs;
hakusan270 1:025596ffc973 302 }
tnanbu 11:2d5fcf102778 303 int spiWrite(int wd)
tnanbu 11:2d5fcf102778 304 {
tnanbu 11:2d5fcf102778 305 return ( STSPI.write(wd));
tnanbu 11:2d5fcf102778 306 }
tnanbu 7:b69fa9bb320d 307
tnanbu 13:df67ca499051 308 /*******************************************************
tnanbu 13:df67ca499051 309 EEPROM WRITE
tnanbu 13:df67ca499051 310 ********************************************************/
tnanbu 13:df67ca499051 311 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data)
tnanbu 13:df67ca499051 312 {
tnanbu 13:df67ca499051 313 HAL_StatusTypeDef status;
tnanbu 13:df67ca499051 314 address = address + 0x08080000;
tnanbu 13:df67ca499051 315 HAL_FLASHEx_DATAEEPROM_Unlock(); //Unprotect the EEPROM to allow writing
tnanbu 13:df67ca499051 316 status = HAL_FLASHEx_DATAEEPROM_Program(TYPEPROGRAMDATA_BYTE, address, data);
tnanbu 13:df67ca499051 317 HAL_FLASHEx_DATAEEPROM_Lock(); // Reprotect the EEPROM
tnanbu 13:df67ca499051 318 return status;
tnanbu 13:df67ca499051 319 }
tnanbu 13:df67ca499051 320
tnanbu 13:df67ca499051 321 /*******************************************************
tnanbu 13:df67ca499051 322 EEPROM READ
tnanbu 13:df67ca499051 323 ********************************************************/
tnanbu 13:df67ca499051 324 uint8_t readEEPROMByte(uint32_t address) {
tnanbu 13:df67ca499051 325 volatile uint8_t tmp ;
tnanbu 13:df67ca499051 326 address = address + 0x08080000;
tnanbu 13:df67ca499051 327 tmp = *(__IO uint8_t*)address;
tnanbu 13:df67ca499051 328 return tmp;
tnanbu 13:df67ca499051 329 }
tnanbu 13:df67ca499051 330
tnanbu 13:df67ca499051 331 /***************************
tnanbu 13:df67ca499051 332 integer sqrt
tnanbu 13:df67ca499051 333 整数 sqrt √演算を整数で ライブラリより速い
tnanbu 13:df67ca499051 334 ****************************/
tnanbu 13:df67ca499051 335 int int_sqrt(unsigned int x)
tnanbu 11:2d5fcf102778 336 {
tnanbu 13:df67ca499051 337 register int a = 0, c = 0, y = 0, i = 0, t = x;
tnanbu 13:df67ca499051 338 while(t >>= 1){
tnanbu 13:df67ca499051 339 ++i;
tnanbu 13:df67ca499051 340 }
tnanbu 13:df67ca499051 341 for(i += i & 1; i >= 0; i -= 2){
tnanbu 13:df67ca499051 342 c = (y << 1 | 1) <= x >> i;
tnanbu 13:df67ca499051 343 a = a << 1 | c;
tnanbu 13:df67ca499051 344 y = y << 1 | c;
tnanbu 13:df67ca499051 345 x -= c * y << i;
tnanbu 13:df67ca499051 346 y += c;
tnanbu 13:df67ca499051 347 }
tnanbu 13:df67ca499051 348 return a;
tnanbu 7:b69fa9bb320d 349 }