Datasheet
dsPIC30F4011/4012
DS70135G-page 58 © 2010 Microchip Technology Inc.
7.3.2 WRITING A BLOCK OF DATA
EEPROM
To write a block of data EEPROM, write to all sixteen
latches first, then set the NVMCON register and
program the block.
EXAMPLE 7-5: DATA EEPROM BLOCK WRITE
MOV #LOW_ADDR_WORD,W0 ; Init pointer
MOV #HIGH_ADDR_WORD,W1
MOV W1
,
TBLPAG
MOV #data1,W2 ; Get 1st data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data2,W2 ; Get 2nd data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data3,W2 ; Get 3rd data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data4,W2 ; Get 4th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data5,W2 ; Get 5th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data6,W2 ; Get 6th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data7,W2 ; Get 7th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data8,W2 ; Get 8th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data9,W2 ; Get 9th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data10,W2 ; Get 10th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data11,W2 ; Get 11th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data12,W2 ; Get 12th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data13,W2 ; Get 13th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data14,W2 ; Get 14th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data15,W2 ; Get 15th data
TBLWTL W2
,
[ W0]++ ; write data
MOV #data16,W2 ; Get 16th data
TBLWTL W2
,
[ W0]++ ; write data. The NVMADR captures last table access address.
MOV #0x400A,W0 ; Select data EEPROM for multi word op
MOV W0
,
NVMCON ; Operate Key to allow program operation
DISI #5 ; Block all interrupts with priority < 7
; for next 5 instructions
MOV #0x55,W0
MOV W0
,
NVMKEY ; Write the 0x55 key
MOV #0xAA,W1
MOV W1
,
NVMKEY ; Write the 0xAA key
BSET NVMCON,#WR ; Start write cycle
NOP
NOP