Microchip Technology Microstick for the 5V PIC24F K-series DM240013-2 DM240013-2 Data Sheet

Product codes
DM240013-2
Page of 338
 2013 Microchip Technology Inc.
 
DS30003030B-page 77
PIC24FV16KM204 FAMILY
6.4.1.1
Data EEPROM Bulk Erase
To erase the entire data EEPROM (bulk erase), the
address registers do not need to be configured
because this operation affects the entire data
EEPROM. The following sequence helps in performing
a bulk erase:
1.
Configure NVMCON to Bulk Erase mode.
2.
Clear the NVMIF status bit and enable the NVM
interrupt (optional).
3.
Write the key sequence to NVMKEY.
4.
Set the WR bit to begin the erase cycle.
5.
Either poll the WR bit or wait for the NVM
interrupt (NVMIF is set).
A typical bulk erase sequence is provided in
.
6.4.2
SINGLE-WORD WRITE
To write a single word in the data EEPROM, the
following sequence must be followed:
1.
Erase one data EEPROM word (as mentioned in
the previous section) if the PGMONLY bit
(NVMCON<12>) is set to ‘1’.
2.
Write the data word into the data EEPROM latch.
3.
Program the data word into the EEPROM:
- Configure the NVMCON register to 
program one EEPROM word 
(NVMCON<5:0> = 0001xx).
- Clear the NVMIF status bit and enable the NVM 
interrupt (optional).
- Write the key sequence to NVMKEY.
- Set the WR bit to begin the erase cycle.
- Either poll the WR bit or wait for the NVM 
interrupt (NVMIF is set).
- To get cleared, wait until NVMIF is set.
A typical single-word write sequence is provided in
.
EXAMPLE 6-3:
DATA EEPROM BULK ERASE
EXAMPLE 6-4:
SINGLE-WORD WRITE TO DATA EEPROM
// Set up NVMCON to bulk erase the data EEPROM
NVMCON = 0x4050;
// Disable Interrupts For 5 Instructions 
asm volatile ("disi #5");
// Issue Unlock Sequence and Start Erase Cycle
__builtin_write_NVM();
int __attribute__ ((space(eedata))) eeData = 0x1234;
int newData;
// New data to write to EEPROM
/*---------------------------------------------------------------------------------------------
The variable eeData must be a Global variable declared outside of any method
the code following this comment can be written inside the method that will execute the write
-----------------------------------------------------------------------------------------------
*/
unsigned int offset;
// Set up NVMCON to erase one word of data EEPROM
NVMCON = 0x4004;
// Set up a pointer to the EEPROM location to be erased
TBLPAG = __builtin_tblpage(&eeData);
// Initialize EE Data page pointer
offset = __builtin_tbloffset(&eeData);
// Initizlize lower word of address
__builtin_tblwtl(offset, newData);
// Write EEPROM data to write latch
asm volatile ("disi #5");
// Disable Interrupts For 5 Instructions
__builtin_write_NVM();
// Issue Unlock Sequence & Start Write Cycle
while(NVMCONbits.WR=1);
// Optional: Poll WR bit to wait for
// write sequence to complete