Skip to content

Commit

Permalink
Always write from nvmMirror
Browse files Browse the repository at this point in the history
  • Loading branch information
dzid26 committed May 6, 2024
1 parent 908c744 commit 1615c84
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 40 deletions.
49 changes: 21 additions & 28 deletions firmware/src/BSP/MKS.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,11 @@ int motorSteps(int argc, char *argv[])
if (argc > 0)
{
uint16_t i;
nvm_t params = nvmMirror;
i = atol(argv[0]);
if (i != params.motorParams.fullStepsPerRotation)
if (i != nvmMirror.motorParams.fullStepsPerRotation)
{
params.motorParams.fullStepsPerRotation = i;
nvmWriteConfParms(&params);
nvmMirror.motorParams.fullStepsPerRotation = i;
nvmWriteConfParms();
}
}
return 0;
Expand Down Expand Up @@ -176,17 +175,16 @@ int motorCurrent(int argc, char *argv[])
if (argc == 1)
{
int i;
nvm_t params = nvmMirror;
i = atol(argv[0]);
i = i * 100;
if (i != params.motorParams.currentMa)
if (i != nvmMirror.motorParams.currentMa)
{
if(i > 3300)
{
i = 3300;
}
params.motorParams.currentMa = i;
nvmWriteConfParms(&params);
nvmMirror.motorParams.currentMa = i;
nvmWriteConfParms();
}
return i / 100;
}else
Expand All @@ -202,17 +200,16 @@ int motorHoldCurrent(int argc, char *argv[])
if (argc == 1)
{
uint16_t i;
nvm_t params = nvmMirror;
i = atol(argv[0]);
i = i * 100;
if (i != params.motorParams.currentHoldMa)
if (i != nvmMirror.motorParams.currentHoldMa)
{
if(i > 3300)
{
i = 3300;
}
params.motorParams.currentHoldMa = i;
nvmWriteConfParms(&params);
nvmMirror.motorParams.currentHoldMa = i;
nvmWriteConfParms();
}
return i / 100;

Expand Down Expand Up @@ -242,13 +239,12 @@ int setMicrosteps(int argc, char *argv[])
if (argc == 1)
{
uint16_t i,steps;
nvm_t params = nvmMirror;
i = atol(argv[0]);
steps = 0x01 << i;
if (steps != params.systemParams.microsteps)
if (steps != nvmMirror.systemParams.microsteps)
{
params.systemParams.microsteps = steps;
nvmWriteConfParms(&params);
nvmMirror.systemParams.microsteps = steps;
nvmWriteConfParms();
}
return i;
}else
Expand Down Expand Up @@ -279,12 +275,11 @@ int controlLoop(int argc, char *argv[])
if (argc == 1)
{
uint16_t i;
nvm_t params = nvmMirror;
i = atol(argv[0]);
if (i != params.systemParams.controllerMode)
if (i != nvmMirror.systemParams.controllerMode)
{
params.systemParams.controllerMode = (feedbackCtrl_t)i;
nvmWriteConfParms(&params);
nvmMirror.systemParams.controllerMode = (feedbackCtrl_t)i;
nvmWriteConfParms();
}
return i;
}
Expand All @@ -302,12 +297,11 @@ int enablePin(int argc, char *argv[])
if (argc == 1)
{
uint16_t i;
nvm_t params = nvmMirror;
i = atol(argv[0]);
if (i != params.systemParams.errorPinMode)
if (i != nvmMirror.systemParams.errorPinMode)
{
params.systemParams.errorPinMode = (ErrorPinMode_t)i;
nvmWriteConfParms(&params);
nvmMirror.systemParams.errorPinMode = (ErrorPinMode_t)i;
nvmWriteConfParms();
}
return i;
}
Expand All @@ -325,12 +319,11 @@ int changeDir(int argc, char *argv[])
if (argc == 1)
{
uint16_t i;
nvm_t params = nvmMirror;
i = atol(argv[0]);
if (i != params.systemParams.dirRotation)
if (i != nvmMirror.systemParams.dirRotation)
{
params.systemParams.dirRotation = (RotationDir_t)i;
nvmWriteConfParms(&params);
nvmMirror.systemParams.dirRotation = (RotationDir_t)i;
nvmWriteConfParms();
}
return i;
}
Expand Down
19 changes: 9 additions & 10 deletions firmware/src/BSP/nonvolatile.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,13 @@ void nvmMirrorInRam(void){
}

//currently only used once - after first boot
void nvmWriteConfParms(nvm_t* ptrNVM)
{
void nvmWriteConfParms(void){
nvm_t* ptr_nvmMirror = &nvmMirror;
ptr_nvmMirror->motorParams.parametersValid = valid;
ptr_nvmMirror->systemParams.parametersValid = valid;

bool state = motion_task_isr_enabled;
Motion_task_disable();

ptrNVM->motorParams.parametersValid = valid;
ptrNVM->systemParams.parametersValid = valid;

//wear leveling
if(Flash_readHalfWord(NVM_startAddress) != invalid && ((NVM_startAddress + NONVOLATILE_STEPS) < (PARAMETERS_FLASH_ADDR + FLASH_PAGE_SIZE)))
{
Expand All @@ -91,16 +90,16 @@ void nvmWriteConfParms(nvm_t* ptrNVM)
else
{
NVM_startAddress = PARAMETERS_FLASH_ADDR;
Flash_ProgramPage(NVM_startAddress, (uint16_t*)ptrNVM, (sizeof(nvm_t)/2U));
Flash_ProgramPage(NVM_startAddress, (uint16_t*)ptr_nvmMirror, (sizeof(nvm_t)/2U));
return;
}
}
Flash_ProgramSize(NVM_startAddress, (uint16_t*)ptrNVM, (sizeof(nvm_t)/2U));
Flash_ProgramSize(NVM_startAddress, (uint16_t*)ptr_nvmMirror, (sizeof(nvm_t)/2U));
}
else
{
NVM_startAddress = PARAMETERS_FLASH_ADDR;
Flash_ProgramPage(NVM_startAddress, (uint16_t*)ptrNVM, (sizeof(nvm_t)/2U));
Flash_ProgramPage(NVM_startAddress, (uint16_t*)ptr_nvmMirror, (sizeof(nvm_t)/2U));
}

nvmMirrorInRam();
Expand Down Expand Up @@ -135,7 +134,7 @@ void validateAndInitNVMParams(void)
}

if((nvmMirror.systemParams.parametersValid != valid) || (nvmMirror.motorParams.parametersValid != valid)){
nvmWriteConfParms(&nvmMirror); //write default parameters
nvmWriteConfParms(); //save defaults
}

//the motor parameters are later checked in the stepper_controller code
Expand Down
2 changes: 1 addition & 1 deletion firmware/src/BSP/nonvolatile.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ extern volatile MotorParams_t liveMotorParams;

void nonvolatile_begin(void);
void nvmWriteCalTable(void *ptrData);
void nvmWriteConfParms(nvm_t* ptrNVM);
void nvmWriteConfParms(void);
void validateAndInitNVMParams(void);

#endif
2 changes: 1 addition & 1 deletion firmware/src/BSP/stepper_controller.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ stepCtrlError_t StepperCtrl_begin(void)
//Motor params are now good
apply_current_command(0, 0); //release the motor
nvmMirror.motorParams = liveMotorParams;
nvmWriteConfParms(&nvmMirror);
nvmWriteConfParms();
}

angleFullStep = (int32_t)(ANGLE_STEPS / liveMotorParams.fullStepsPerRotation);
Expand Down

0 comments on commit 1615c84

Please sign in to comment.