hola, estoy intentando utilizar la memoria EPROM de mi dspic, en el datasheet de este me viene el código en ensamblador de las funciones de lectura y escritura y estoy tratando de hacerme una librería (eprom.h) con estas funciones para poder utilizarlas. esto es lo que me pone:
EXAMPLE 6-1: DATA EEPROM READ
MOV #LOW_ADDR_WORD,W0 ; Init Pointer
MOV #HIGH_ADDR_WORD,W1
MOV W1,TBLPAG
TBLRDL [ W0 ], W4 ; read data EEPROM
EXAMPLE 6-4: DATA EEPROM WORD WRITE
; Point to data memory
MOV #LOW_ADDR_WORD,W0 ; Init pointer
MOV #HIGH_ADDR_WORD,W1
MOV W1,TBLPAG
MOV #LOW(WORD),W2 ; Get data
TBLWTL W2,[ W0] ; Write data
; The NVMADR captures last table access address
; Select data EEPROM for 1 word op
MOV #0x4004,W0
MOV W0,NVMCON
; Operate key to allow write 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 ; Initiate program sequence
NOP
NOP
; Write cycle will complete in 2mS. CPU is not stalled for the Data Write Cycle
; User can poll WR bit, use NVMIF or Timer IRQ to determine write complete
Entonces lo que hago es definirme :
unsigned int leeEprom (unsigned int direccion){
char dirAlta, dirBaja;
dirAlta = (char)(direccion >>
;
dirBaja = (char)(direccion & 0x00ff);
asm(todo el código de lectura);
}
void escribeEprom (unsigned int direccion, unsigned int dato){
char dirAlta, dirBaja;
char datoAlto, datoBajo;
dirAlta = (char) (direccion >>
;
dirBaja = (char) (direccion & 0x00ff);
datoAlto = (char) (direccion >>
;
datoBajo = (char) (direccion & 0x00ff);
asm(todas las instrtucciones de escritura);
}
pero me da errores de compilación por todos lados, me dice qeu no sabe lo que es W0 y W1, pero eso son registros internos del dspic. ¿Alguna idea de mi error? Muchas gracias