dsPid33
|
00001 /************************************************************************ 00002 * 00003 * Emulating Data EEPROM for PIC24 Microcontrollers and 00004 * dsPIC Digital Signal Controllers 00005 * 00006 ************************************************************************* 00007 * FileName: DEE Emulation 16-bit.h 00008 * Compiler: MPLAB C30, v2.01 or higher 00009 * Company: Microchip Technology, Inc. 00010 * 00011 * Software License Agreement 00012 * 00013 * Copyright � 2007 Microchip Technology Inc. All rights reserved. 00014 * 00015 * Microchip licenses to you the right to use, modify, copy and distribute 00016 * Software only when embedded on a Microchip microcontroller or digital 00017 * signal controller, which is integrated into your product or third party 00018 * product (pursuant to the sublicense terms in the accompanying license 00019 * agreement). 00020 * 00021 * You should refer to the license agreement accompanying this Software for 00022 * additional information regarding your rights and obligations. 00023 * 00024 * SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY 00025 * KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY 00026 * WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A 00027 * PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE 00028 * LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, 00029 * CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY 00030 * DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY 00031 * INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST 00032 * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, 00033 * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO 00034 * ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. 00035 * 00036 * Author Date Comment 00037 ************************************************************************* 00038 * D. Otten 2007/05/01 Version 1.0.0 - Initial Release 00039 * D. Otten 2007/05/15 Version 1.0.1 - First publication release 00040 * Pradeep Budagutta 2008/04/02 Version 1.1.0 - Multi EEPROM banks included 00041 ************************************************************************/ 00042 // User defined constants 00043 #define DATA_EE_BANKS 2 00044 #define DATA_EE_SIZE 255 00045 #define DATA_EE_TOTAL_SIZE (DATA_EE_BANKS * DATA_EE_SIZE) 00046 #define ERASE 0x4042 00047 #define NUM_DATA_EE_PAGES 5 00048 #define PROGRAM_ROW 0x4001 00049 #define PROGRAM_WORD 0x4003 00050 00051 // Internal constants 00052 #define ERASE_WRITE_CYCLE_MAX 5 00053 #define NUMBER_OF_INSTRUCTIONS_IN_PAGE 512 00054 #define NUMBER_OF_INSTRUCTIONS_IN_ROW 64 00055 #define NUMBER_OF_ROWS_IN_PAGE (NUMBER_OF_INSTRUCTIONS_IN_PAGE \ NUMBER_OF_INSTRUCTIONS_IN_ROW) 00056 #define PAGE_AVAILABLE 1 00057 #define PAGE_CURRENT 0 00058 #define PAGE_EXPIRED 0 00059 #define PAGE_NOT_AVAILABLE 0 00060 #define PAGE_NOT_CURRENT 1 00061 #define PAGE_NOT_EXPIRED 1 00062 #define STATUS_AVAILABLE 18 00063 #define STATUS_CURRENT 19 00064 #define STATUS_EXPIRED 20 00065 00066 #define GetaddrNotFound() dataEEFlags.addrNotFound 00067 #define SetaddrNotFound(x) dataEEFlags.addrNotFound = x 00068 00069 #define GetPageCorruptStatus() dataEEFlags.pageCorrupt 00070 #define SetPageCorruptStatus(x) dataEEFlags.pageCorrupt = x 00071 00072 #define GetPageExpiredPage() dataEEFlags.expiredPage 00073 #define SetPageExpiredPage(x) dataEEFlags.expiredPage = x 00074 00075 #define GetPageIllegalAddress() dataEEFlags.IllegalAddress 00076 #define SetPageIllegalAddress(x) dataEEFlags.IllegalAddress = x 00077 00078 #define GetPagePackBeforeInit() dataEEFlags.packBeforeInit 00079 #define SetPagePackBeforeInit(x) dataEEFlags.packBeforeInit = x 00080 00081 #define GetPagePackBeforePageFull() dataEEFlags.packBeforePageFull 00082 #define SetPagePackBeforePageFull(x) dataEEFlags.packBeforePageFull = x 00083 00084 #define GetPagePackSkipped() dataEEFlags.packSkipped 00085 #define SetPagePackSkipped(x) dataEEFlags.packSkipped = x 00086 00087 #define GetPageWriteError() dataEEFlags.writeError 00088 #define SetPageWriteError(x) dataEEFlags.writeError = x 00089 00090 typedef union 00091 { 00092 unsigned char val; 00093 struct 00094 { 00095 unsigned addrNotFound:1; // Return 0xFFFF 00096 unsigned expiredPage:1; // Return 0x1 00097 unsigned packBeforePageFull:1; // Not a return condition 00098 unsigned packBeforeInit:1; // Return 0x3 00099 unsigned packSkipped:1; // Return 0x4 00100 unsigned IllegalAddress:1; // Return 0x5 00101 unsigned pageCorrupt:1; // Return 0x6 00102 unsigned writeError:1; // Return 0x7 00103 }; 00104 } DATA_EE_FLAGS; 00105 00106 extern DATA_EE_FLAGS dataEEFlags; 00107 00108 extern int ReadPMHigh(int); 00109 extern int ReadPMLow(int); 00110 extern void UnlockPM(void); 00111 extern int WritePMHigh(int, int); 00112 extern int WritePMHighB(int, int); 00113 extern int WritePMLow(int, int); 00114 extern int WritePMLowB(int, int); 00115 00116 void UnlockWrite (void); 00117 int GetPageStatus (unsigned char bank, unsigned volatile char page, unsigned volatile char field); 00118 void ErasePage (unsigned char bank, unsigned char page); 00119 char IncEWCount (unsigned char *index); 00120 unsigned int GetNextAvailCount (unsigned char bank); 00121 int PackEE (unsigned char bank); 00122 unsigned char DataEEInit (void); 00123 unsigned int DataEERead (unsigned int addr); 00124 unsigned char DataEEWrite (unsigned int data, unsigned int addr); 00125