This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Defines | |
#define | EXTERN extern |
#define | ERASE_CMD 0x40 |
#define | WORD_PROGRAM 0x20 |
#define | SECTOR_ERASE 0x40 |
Functions | |
EXTERN unsigned short | writeWord (unsigned short *, unsigned short) TEXT |
EXTERN unsigned short | eraseSector (unsigned char, unsigned short *) TEXT |
EXTERN unsigned short | writeSector (unsigned char, unsigned short *, unsigned char, unsigned short *) TEXT |
EXTERN unsigned short | writeBlock (unsigned char, unsigned short *, unsigned char, unsigned short *, unsigned short) TEXT |
#define ERASE_CMD 0x40 |
Definition at line 37 of file flashWrite.h.
#define EXTERN extern |
Definition at line 32 of file flashWrite.h.
#define SECTOR_ERASE 0x40 |
#define WORD_PROGRAM 0x20 |
EXTERN unsigned short eraseSector | ( | unsigned | char, | |
unsigned short * | ||||
) |
Definition at line 56 of file flashWrite.c.
References ACCERR, addressNotSectorAligned, FCMD, flashSectorSize, FSTAT, PPAGE, PVIOL, SECTOR_ERASE, and StackBurner().
Referenced by decodePacketAndRespond(), and writeSector().
00056 { 00057 00058 if (((unsigned short)flashAddr % flashSectorSize) != 0){ 00059 return addressNotSectorAligned; 00060 } 00061 unsigned char currentPage = PPAGE; 00062 PPAGE = PPage; 00063 FSTAT = (PVIOL|ACCERR); /* clear any errors */ 00064 (*flashAddr) = 0xFFFF; /* Dummy data to first word of page to be erased it will write FFFF regardless with the erase command*/ 00065 PPAGE = currentPage; 00066 FCMD = SECTOR_ERASE; /* set the flash command register mode to ERASE */ 00067 StackBurner(); //PPAGE loaded into Register B, PPAGE is set with Reg B in StackBurn asm file 00068 //TODO add return for accerr and pviol error bits 00069 00070 return 0; 00071 }
Here is the call graph for this function:
EXTERN unsigned short writeBlock | ( | unsigned | char, | |
unsigned short * | , | |||
unsigned | char, | |||
unsigned short * | , | |||
unsigned | short | |||
) |
Definition at line 94 of file flashWrite.c.
References flashSectorSize, flashSectorSizeInWords, sizeNotMultipleOfSectorSize, and writeSector().
Referenced by decodePacketAndRespond().
00094 { 00095 00096 if(((size % flashSectorSize) != 0) || (size == 0)){ 00097 return sizeNotMultipleOfSectorSize; 00098 } 00099 00100 unsigned char sectors = size / flashSectorSize; 00101 unsigned char i; 00102 for(i=0;i<sectors;i++){ 00103 unsigned short errorID = writeSector(RPage, RAMSourceAddress, PPage, flashDestinationAddr); 00104 if(errorID != 0){ 00105 return errorID; 00106 } 00107 /* Incrementing a pointer is done by blocks the size of the type, hence 512 per sector here */ 00108 flashDestinationAddr += flashSectorSizeInWords; 00109 RAMSourceAddress += flashSectorSizeInWords; 00110 } 00111 return 0; 00112 }
Here is the call graph for this function:
EXTERN unsigned short writeSector | ( | unsigned | char, | |
unsigned short * | , | |||
unsigned | char, | |||
unsigned short * | ||||
) |
Definition at line 120 of file flashWrite.c.
References addressNotFlashRegion, addressNotSectorAligned, eraseSector(), flashSectorSize, flashSectorSizeInWords, PPAGE, RPAGE, and writeWord().
Referenced by decodePacketAndRespond(), and writeBlock().
00120 { 00121 00122 if (((unsigned short)flashDestinationAddress % flashSectorSize) != 0){ 00123 return addressNotSectorAligned; 00124 } 00125 00126 if(((unsigned short)flashDestinationAddress) < 0x4000){ 00127 return addressNotFlashRegion; 00128 } 00129 00130 //TODO Decide if we need to disable interrupts since we are manually setting Flash/RAM pages. 00131 eraseSector((unsigned char)PPage, (unsigned short*)flashDestinationAddress); /* First Erase our destination block */ 00132 00133 unsigned short wordCount = flashSectorSizeInWords; 00134 00135 /* Save pages */ 00136 unsigned char currentRPage = RPAGE; 00137 unsigned char currentPPage = PPAGE; 00138 00139 /* Switch pages */ 00140 RPAGE = RPage; 00141 PPAGE = PPage; 00142 00143 while (wordCount > 0) 00144 { 00145 unsigned short sourceData = *RAMSourceAddress; /*Convert the RAMAddr to data(dereference) */ 00146 unsigned short errorID = writeWord(flashDestinationAddress, sourceData); 00147 if(errorID != 0){ 00148 return errorID; 00149 } 00150 RAMSourceAddress++; 00151 flashDestinationAddress++; 00152 wordCount--; /* Decrement our word counter */ 00153 } 00154 00155 /* Restore pages */ 00156 RPAGE = currentRPage; 00157 PPAGE = currentPPage; 00158 return 0; 00159 }
Here is the call graph for this function:
EXTERN unsigned short writeWord | ( | unsigned short * | , | |
unsigned | short | |||
) |
Definition at line 184 of file flashWrite.c.
References ACCERR, addressNotWordAligned, FCMD, FSTAT, PVIOL, StackBurner(), and WORD_PROGRAM.
Referenced by writeSector().
00184 { 00185 if ((unsigned short)flashDestination & 0x0001){ 00186 return addressNotWordAligned; 00187 } 00188 00189 FSTAT=(ACCERR | PVIOL); 00190 *flashDestination = data; 00191 FCMD = WORD_PROGRAM; //Load Flash Command Register With Word_Program mask 00192 StackBurner(); 00193 00194 return 0; 00195 }
Here is the call graph for this function: