/*
  Function:
    void APP_NVMwriteWord (uint32_t address, uint32_t data)

  Summary:
    Writes a word in flash memory (4 bytes)
*/
void APP_NVMwriteWord(uint32_t address, uint32_t data)
{
   /* Base address of where word is to be written */
   PLIB_NVM_FlashAddressToModify(NVM_ID_0, virtualToPhysical(address));

   /* Word of data to be written */
   PLIB_NVM_FlashProvideData(NVM_ID_0 , data);

   /* Disable flash write/erase operations */
   PLIB_NVM_MemoryModifyInhibit(NVM_ID_0);

   /* Select Word Program operation */
   PLIB_NVM_MemoryOperationSelect(NVM_ID_0, WORD_PROGRAM_OPERATION);

   /* Enable flash write/erase operations */
   PLIB_NVM_MemoryModifyEnable(NVM_ID_0);

   /* Write the unlock key sequence */
   PLIB_NVM_FlashWriteKeySequence(NVM_ID_0, 0x0);
   PLIB_NVM_FlashWriteKeySequence(NVM_ID_0, 0xAA996655);
   PLIB_NVM_FlashWriteKeySequence(NVM_ID_0, 0x556699AA);

   /* Start Writing */
   PLIB_NVM_FlashWriteStart(NVM_ID_0);

   bttask_setState(BTTASK_STATE_INTERNAL_NVM_WRITE_START);
}
Ejemplo n.º 2
0
static void PerformOperation(uint32_t nvmop) {
  // Disable flash write/erase operations
  PLIB_NVM_MemoryModifyInhibit(NVM_ID_0);

  PLIB_NVM_MemoryOperationSelect(NVM_ID_0, nvmop);

  // Allow memory modifications
  PLIB_NVM_MemoryModifyEnable(NVM_ID_0);

  /* Unlock the Flash */
  PLIB_NVM_FlashWriteKeySequence(NVM_ID_0, 0);
  PLIB_NVM_FlashWriteKeySequence(NVM_ID_0, NVM_PROGRAM_UNLOCK_KEY1);
  PLIB_NVM_FlashWriteKeySequence(NVM_ID_0, NVM_PROGRAM_UNLOCK_KEY2);

  PLIB_NVM_FlashWriteStart(NVM_ID_0);
}