diff --git a/firmware/cl-step-controller/src/drivers/step_cl.cpp b/firmware/cl-step-controller/src/drivers/step_cl.cpp index 3f7d637c6fb8104a6c59472aaafa1912ad555f6b..61b577b2c9ae6d2bf72e8c457a65ae81a55a6e5c 100644 --- a/firmware/cl-step-controller/src/drivers/step_cl.cpp +++ b/firmware/cl-step-controller/src/drivers/step_cl.cpp @@ -46,92 +46,28 @@ void Step_CL::init(void){ //lut = flash_lut.read(); } -// das lut / flash stuff, -// s/o to mechaduino code for this -#define PAGE_SIZE 512 // start_flash_write reports this bit value, use datasheet 25.8.3 to reference -const float __attribute__((__aligned__(PAGE_SIZE))) lut[ENCODER_COUNTS] = {}; -uint32_t start_addr = 0x00000000; -float temp_quad[4]; -uint8_t temp_indice; +FlashStorage(flash_store, float); -void flash_wait_ready(void){ - while(NVMCTRL->STATUS.bit.READY == 0); -} - -// erase block at this addr -void flash_erase_block(uint32_t *dst){ - sysError("erasing 0x" + String((uint32_t)dst, HEX)); - flash_wait_ready(); - // do 'erase row' - NVMCTRL->ADDR.reg = (uint32_t)dst; - NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_EB; - flash_wait_ready(); -} - -// writes blocks of four four bit words: i.e. 4 floats per row, 4 uint32, etc -// dst address, src address... -#define QUAD_WORD (4 * 4) -void flash_write_words(uint32_t *dst, uint32_t *src, uint32_t n_words){ - sysError("writing quad to addr: 0x" + String((uint32_t)dst, HEX)); - // set manuel page write - NVMCTRL->CTRLA.bit.WMODE = NVMCTRL_CTRLA_WMODE_MAN; - - sysError("pbc"); - // execute page buffer clear - flash_wait_ready(); - NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_PBC; - flash_wait_ready(); +void flash_write_init(void){ - // write em ? - sysError("writing..."); - while(n_words > 0){ - sysError(String(n_words)); - // more than 4 words left? - uint32_t len = 4 < n_words ? 4 : n_words; - // write one quad word into page buffer (is ... the flash address?) - flash_wait_ready(); - sysError("past wait"); - for(uint32_t i = 0; i < 4; i ++){ - if(i < len){ - dst[i] = src[i]; - } else { - //((uint32_t*)dst)[i] = 0xffffffff; // tail ends write to solid 1's - } - } - // trigger the write - sysError("write: 0x" + String((uint32_t)dst, HEX)); - delay(100); - NVMCTRL->ADDR.reg = (uint32_t)dst; - NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_WQW; - // advance thru quad words - dst += len; - src += len; - n_words -= len; - } - sysError("quad complete"); - delay(10); } -// ok, I think I can try this: I keep a row of vals, 4 of 'em, then on wrap, I write -// using erase / then write, using the lut as the start, -// I'll try to do it once, to start, then read it out... - -void flash_write_init(void){ - temp_indice = 0; +void flash_write_value(float val){ + flash_store.write(val); } -void flash_write_value(float val){ - sysError("flt: " + String(val)); - temp_quad[temp_indice ++] = val; - if(temp_indice > 3){ - flash_erase_block(&start_addr); - flash_write_words(&start_addr, (uint32_t*)(&temp_quad), 4); - temp_indice = 0; +void Step_CL::print_table(void){ + for(uint16_t e = 0; e < 4; e ++){ + float ra = flash_store.read(); + sysError("e: " + String(e) + " ra: " + String(ra, 4)); + delay(5); } } // the calib routine boolean Step_CL::calibrate(void){ + flash_write_value(100.0F); + return true; // (1) first, build a table for 200 full steps w/ encoder averaged values at each step float phase_angle = 0.0F; for(uint8_t i = 0; i < 200; i ++){ @@ -285,10 +221,3 @@ boolean Step_CL::calibrate(void){ return true; // went OK } -void Step_CL::print_table(void){ - for(uint16_t e = 0; e < 4; e ++){ - float ra = ((float*)start_addr)[e];//lut[e]; - sysError("e: " + String(e) + " ra: " + String(ra, 4)); - delay(5); - } -} \ No newline at end of file diff --git a/log/cl-step-control-log.md b/log/cl-step-control-log.md index cdae39f35cabbcd3d7497b1014337219690aaee6..3aa6f4f5b0f45d5cecefce3e4c80be42b0a2b3b4 100644 --- a/log/cl-step-control-log.md +++ b/log/cl-step-control-log.md @@ -5,6 +5,7 @@ With 2x A4950s on the DAC, AS5047P on the encoder, etc. ## Do Want - magnet alignment print / tool for the glue-in +- https://www.youtube.com/watch?v=5x73LjZQ21o ## Likely Bugs