コード例 #1
0
ファイル: Memory.c プロジェクト: RFduino/RFduino
int flashWrite( uint32_t *address, uint32_t value )
{
  uint8_t page = PAGE_FROM_ADDRESS(address);

  // prevent erase of reserved pages
  if (page < 124 || page > 251)
    return 1;

  // page contains sketch
  if (page <= PAGE_FROM_ADDRESS(&_etextrelocate))
    return 2;

  // do not write to flash if the BLE radio is active
  while (RFduinoBLE_radioActive)
    ;

  // enable flash write
  NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos);
  while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    ;

  // 22 to 43 us
  *address = value;

  // disable flash write
  NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos);
  while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    ;

  // success
  return 0;
}
コード例 #2
0
ファイル: Memory.c プロジェクト: RFduino/RFduino
int flashPageErase( uint8_t page )
{
  // prevent erase of reserved pages
  if (page < 124 || page > 251)
    return 1;

  // page contains sketch
  if (page <= PAGE_FROM_ADDRESS(&_etextrelocate))
    return 2;

  // do not erase flash if the BLE radio is active
  while (RFduinoBLE_radioActive)
    ;

  // enable flash page erase
  NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Een << NVMC_CONFIG_WEN_Pos);
  while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    ;

  // erase page
  NRF_NVMC->ERASEPAGE = (page << 10);  // multiply by 1024
  while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    ;

  // disable flash page erase
  NRF_NVMC->CONFIG &= ~(NVMC_CONFIG_WEN_Een << NVMC_CONFIG_WEN_Pos);
  while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    ;

  // success
  return 0;
}
コード例 #3
0
ファイル: storer.c プロジェクト: HumanDynamics/OpenBadge
void writeBlockToFlash(uint32_t* to, uint32_t* from, int numWords)  
{
    uint8_t page = PAGE_FROM_ADDRESS(to);
    if (page > LAST_PAGE || page < FIRST_PAGE)  {
        debug_log("Invalid block write address\r\n");
        while(1);
    }
    else  {
        flashWorking = true;
        sd_flash_write(to, from, numWords);
    }
}