146 lines
5.5 KiB
C++
146 lines
5.5 KiB
C++
/**********************************************************************
|
|
Copyright (C) 2018 MisfitTech LLC, All rights reserved.
|
|
|
|
MisfitTech uses a dual license model that allows the software to be used under
|
|
a standard GPL open source license, or a commercial license. The standard GPL
|
|
license requires that all software statically linked with MisfitTec Code is
|
|
also distributed under the same GPL V2 license terms. Details of both license
|
|
options follow:
|
|
|
|
- Open source licensing -
|
|
MisfitTech is a free download and may be used, modified, evaluated and
|
|
distributed without charge provided the user adheres to version two of the GNU
|
|
General Public License (GPL) and does not remove the copyright notice or this
|
|
text. The GPL V2 text is available on the gnu.org web site
|
|
|
|
- Commercial licensing -
|
|
Businesses and individuals that for commercial or other reasons cannot comply
|
|
with the terms of the GPL V2 license must obtain a low cost commercial license
|
|
before incorporating MisfitTech code into proprietary software for distribution in
|
|
any form. Commercial licenses can be purchased from www.misfittech.net
|
|
and do not require any source files to be changed.
|
|
|
|
|
|
This code is distributed in the hope that it will be useful. You cannot
|
|
use MisfitTech's code unless you agree that you use the software 'as is'.
|
|
MisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied
|
|
warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. MisfitTech LLC disclaims all conditions and terms, be they
|
|
implied, expressed, or statutory.
|
|
|
|
|
|
Written by Trampas Stern for MisfitTech.
|
|
|
|
Misfit Tech invests time and resources providing this open source code,
|
|
please support MisfitTech and open-source hardware by purchasing
|
|
products from MisfitTech, www.misifittech.net!
|
|
*********************************************************************/
|
|
#include "nonvolatile.h"
|
|
#include "Flash.h" //thanks to Kent Larsen for pointing out the lower case error
|
|
#include <Arduino.h>
|
|
|
|
|
|
|
|
|
|
//we use this so we can hard code calibration table
|
|
// be sure to set the last word as status flag
|
|
// this save time calibrating each time we do a code build
|
|
#ifdef NZS_FAST_CAL
|
|
__attribute__((__aligned__(FLASH_ROW_SIZE))) const uint16_t NVM_flash[16767]={ //allocates 33280 bytes
|
|
#else
|
|
__attribute__((__aligned__(FLASH_ROW_SIZE))) const uint16_t NVM_flash[256]={ //allocates 512 bytes
|
|
#endif
|
|
25758,26078,26399,26720,27043,27372,27698,28024,28353,28688,29017,29345,29671,30009,30340,30663,30997,31335,31664,31994,32325,32666,32997,33324,33661,33997,34330,34657,34986,35324,35653,35981,36303,36637,36962,37282,37605,37938,38260,38581,38901,39232,39554,39877,40198,40528,40849,41178,41500,41835,42163,42485,42815,43149,43475,43804,44139,44476,44801,45136,45460,45804,46130,46460,46790,47119,47449,47777,48103,48442,48772,49099,49424,49759,50087,50410,50735,51067,51394,51716,52045,52379,52703,53024,53348,53680,54002,54326,54648,54987,55309,55629,55958,56292,56612,56936,57262,57594,57917,58246,58569,58902,59225,59552,59873,60206,60534,60862,61192,61531,61864,62194,62529,62873,63210,63544,63878,64222,64562,64899,65241,45,384,719,1058,1398,1733,2058,2390,2732,3060,3394,3720,4056,4386,4710,5036,5366,5693,6016,6340,6665,6989,7308,7622,7952,8263,8586,8903,9232,9551,9874,10200,10534,10859,11185,11513,11852,12184,12514,12848,13185,13511,13841,14170,14504,14830,15156,15490,15827,16153,16481,16808,17143,17474,17801,18121,18458,18783,19111,19433,19765,20084,20405,20721,21045,21360,21673,21984,22305,22614,22922,23231,23551,23861,24173,24482,24808,25118,25435,
|
|
|
|
0xFFFF
|
|
};
|
|
|
|
|
|
|
|
static_assert (sizeof(nvm_t)<sizeof(NVM_flash), "nvm_t structure larger than allocated memory");
|
|
|
|
|
|
|
|
|
|
//FLASH_ALLOCATE(NVM_flash, sizeof(nvm_t));
|
|
|
|
|
|
bool nvmWriteCalTable(void *ptrData, uint32_t size)
|
|
{
|
|
bool x=true;
|
|
flashWrite(&NVM->CalibrationTable,ptrData,size);
|
|
return true;
|
|
}
|
|
|
|
bool nvmWrite_sPID(float Kp, float Ki, float Kd)
|
|
{
|
|
PIDparams_t pid;
|
|
|
|
pid.Kp=Kp;
|
|
pid.Ki=Ki;
|
|
pid.Kd=Kd;
|
|
pid.parametersVaild=true;
|
|
|
|
flashWrite((void *)&NVM->sPID,&pid,sizeof(pid));
|
|
return true;
|
|
}
|
|
|
|
bool nvmWrite_vPID(float Kp, float Ki, float Kd)
|
|
{
|
|
PIDparams_t pid;
|
|
|
|
pid.Kp=Kp;
|
|
pid.Ki=Ki;
|
|
pid.Kd=Kd;
|
|
pid.parametersVaild=true;
|
|
|
|
flashWrite((void *)&NVM->vPID,&pid,sizeof(pid));
|
|
return true;
|
|
}
|
|
|
|
bool nvmWrite_pPID(float Kp, float Ki, float Kd)
|
|
{
|
|
PIDparams_t pid;
|
|
|
|
pid.Kp=Kp;
|
|
pid.Ki=Ki;
|
|
pid.Kd=Kd;
|
|
pid.parametersVaild=true;
|
|
|
|
flashWrite((void *)&NVM->pPID,&pid,sizeof(pid));
|
|
return true;
|
|
}
|
|
|
|
bool nvmWriteSystemParms(SystemParams_t &systemParams)
|
|
{
|
|
systemParams.parametersVaild=true;
|
|
|
|
flashWrite((void *)&NVM->SystemParams,&systemParams,sizeof(systemParams));
|
|
return true;
|
|
}
|
|
|
|
bool nvmWriteMotorParms(MotorParams_t &motorParams)
|
|
{
|
|
motorParams.parametersVaild=true;
|
|
|
|
flashWrite((void *)&NVM->motorParams,&motorParams,sizeof(motorParams));
|
|
return true;
|
|
}
|
|
|
|
bool nvmErase(void)
|
|
{
|
|
bool data=false;
|
|
uint16_t cs=0;
|
|
|
|
flashWrite((void *)&NVM->CalibrationTable.status,&data,sizeof(data));
|
|
flashWrite((void *)&NVM->sPID.parametersVaild ,&data,sizeof(data));
|
|
flashWrite((void *)&NVM->vPID.parametersVaild ,&data,sizeof(data));
|
|
flashWrite((void *)&NVM->pPID.parametersVaild ,&data,sizeof(data));
|
|
flashWrite((void *)&NVM->motorParams.parametersVaild ,&data,sizeof(data));
|
|
flashWrite((void *)&NVM->SystemParams.parametersVaild ,&data,sizeof(data));
|
|
#ifdef NZS_FAST_CAL
|
|
flashWrite((void *)&NVM->FastCal.checkSum,&cs,sizeof(cs));
|
|
#endif
|
|
}
|
|
|