dsPid33
src/DEE Emulation 16-bit.h
Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Defines