   1              		.file	"EEPROM.c"
   9              	.Ltext0:
  10              		.align	2
  12              	EE_VerifyPageFullWriteVariable:
  13              	.LFB8:
  14              		.file 1 "EEPROM.c"
   1:EEPROM.c      **** // EEPROM.c
   2:EEPROM.c      **** 
   3:EEPROM.c      **** // EEPROM emulator functions
   4:EEPROM.c      **** 
   5:EEPROM.c      **** #include "defs.h"
   6:EEPROM.c      **** #include "EEPROM.h"
   7:EEPROM.c      **** 
   8:EEPROM.c      **** typedef enum { 
   9:EEPROM.c      ****   FLASH_ERROR,
  10:EEPROM.c      ****   FLASH_COMPLETE,
  11:EEPROM.c      ****   PAGE0,
  12:EEPROM.c      ****   PAGE1,
  13:EEPROM.c      ****   ERASED,
  14:EEPROM.c      ****   RECEIVE_DATA,
  15:EEPROM.c      ****   VALID_PAGE,
  16:EEPROM.c      ****   NO_VALID_PAGE,
  17:EEPROM.c      ****   PAGE_FULL,
  18:EEPROM.c      ****   VARIABLE_EXIST,
  19:EEPROM.c      ****   VARIABLE_DOESNOT_EXIST
  20:EEPROM.c      **** } FLASH_Status;
  21:EEPROM.c      **** 
  22:EEPROM.c      **** // Valid pages in read and write defines
  23:EEPROM.c      **** #define READ_FROM_VALID_PAGE    0x00
  24:EEPROM.c      **** #define WRITE_IN_VALID_PAGE     0x01
  25:EEPROM.c      **** 
  26:EEPROM.c      **** static FLASH_Status FLASH_Save(u16 Address, u16 Data) 
  27:EEPROM.c      **** {
  28:EEPROM.c      ****   u8 status;
  29:EEPROM.c      **** 
  30:EEPROM.c      ****   FEEMOD = 0x8;				// enable erase/write command
  31:EEPROM.c      **** 
  32:EEPROM.c      ****   FEEADR = Address;
  33:EEPROM.c      ****   FEEDAT = Data;
  34:EEPROM.c      ****   FEECON = 0x02;  				// single Write command
  35:EEPROM.c      ****   status = FEESTA & 0x03;
  36:EEPROM.c      ****   while (!(status)) status = FEESTA & 0x03;
  37:EEPROM.c      ****   if ((status & 0x02)==0x02) return FLASH_ERROR;
  38:EEPROM.c      **** 
  39:EEPROM.c      ****   FEEMOD = 0;				// disable erase/write command
  40:EEPROM.c      **** 
  41:EEPROM.c      ****   if ((status & 0x02)==0x02) return FLASH_ERROR;
  42:EEPROM.c      **** 
  43:EEPROM.c      ****   return FLASH_COMPLETE;
  44:EEPROM.c      **** }
  45:EEPROM.c      **** 
  46:EEPROM.c      **** static u16 FLASH_Load(u16 Address)
  47:EEPROM.c      **** {
  48:EEPROM.c      ****   u8 status;
  49:EEPROM.c      **** 
  50:EEPROM.c      ****   FEEADR = Address;
  51:EEPROM.c      ****   FEECON = 0x01;				// single read command
  52:EEPROM.c      **** 
  53:EEPROM.c      ****   status = FEESTA & 0x03;
  54:EEPROM.c      ****   while (!(status)) status = FEESTA & 0x03;
  55:EEPROM.c      **** //	if ((status&0x02)==0x02) EEPROMerr = 1;
  56:EEPROM.c      **** 
  57:EEPROM.c      ****   return (FEEDAT);		
  58:EEPROM.c      **** } 
  59:EEPROM.c      **** 
  60:EEPROM.c      **** 
  61:EEPROM.c      **** static FLASH_Status FLASH_ErasePage(u16 Page_Address)
  62:EEPROM.c      **** {
  63:EEPROM.c      ****   u8 status;
  64:EEPROM.c      **** 
  65:EEPROM.c      ****   FEEMOD = 0x8;				// enable erase/write command
  66:EEPROM.c      **** 
  67:EEPROM.c      ****   FEEADR = Page_Address;
  68:EEPROM.c      ****   FEECON = 0x05;				// erase page command
  69:EEPROM.c      ****   status = FEESTA & 0x03;
  70:EEPROM.c      ****   while (!(status)) status = FEESTA & 0x03;
  71:EEPROM.c      **** 
  72:EEPROM.c      ****   FEEMOD = 0;				// disable erase/write command
  73:EEPROM.c      **** 
  74:EEPROM.c      ****   if ((status & 0x02)==0x02) return FLASH_ERROR;
  75:EEPROM.c      ****   return FLASH_COMPLETE;
  76:EEPROM.c      **** }
  77:EEPROM.c      **** 
  78:EEPROM.c      **** 
  79:EEPROM.c      **** Bool EE_Erased(void)
  80:EEPROM.c      **** {
  81:EEPROM.c      ****    return ((FLASH_Load(PAGE0_BASE_ADDRESS) == 0xFFFF) &&
  82:EEPROM.c      ****            (FLASH_Load(PAGE0_BASE_ADDRESS + 2) == 0xFFFF) &&
  83:EEPROM.c      ****            (FLASH_Load(PAGE1_BASE_ADDRESS) == 0xFFFF) &&
  84:EEPROM.c      ****            (FLASH_Load(PAGE1_BASE_ADDRESS + 2) == 0xFFFF));
  85:EEPROM.c      **** }
  86:EEPROM.c      **** 
  87:EEPROM.c      **** 
  88:EEPROM.c      **** /* Global variable used to store variable value in read sequence */
  89:EEPROM.c      **** u16 DataVar = 0 ;
  90:EEPROM.c      **** 
  91:EEPROM.c      **** /* Private functions ---------------------------------------------------------*/
  92:EEPROM.c      **** static FLASH_Status EE_FindValidPage(u8 operation);
  93:EEPROM.c      **** static FLASH_Status EE_VerifyPageFullWriteVariable(u16 VirtAddress, u16 Data);
  94:EEPROM.c      **** static FLASH_Status EE_PageTransfer(u16 VirtAddress, u16 Data);
  95:EEPROM.c      **** static FLASH_Status EE_ReadVariable(u16 VirtAddress, u16* Read_data);
  96:EEPROM.c      **** 
  97:EEPROM.c      **** /*******************************************************************************
  98:EEPROM.c      **** * Function Name  : EE_Format
  99:EEPROM.c      **** * Description    : Erases PAGE0 and PAGE1 and writes VALID_PAGE header to PAGE0
 100:EEPROM.c      **** * Return         : Status of the last operation (Flash write or erase) done during
 101:EEPROM.c      **** *                  EEPROM formating
 102:EEPROM.c      **** *******************************************************************************/
 103:EEPROM.c      **** Bool EE_Format(void)
 104:EEPROM.c      **** {
 105:EEPROM.c      ****   FLASH_Status FlashStatus;
 106:EEPROM.c      **** 
 107:EEPROM.c      ****   FlashStatus = FLASH_ErasePage(PAGE0_BASE_ADDRESS);
 108:EEPROM.c      ****   if (FlashStatus == FLASH_COMPLETE) {
 109:EEPROM.c      ****     // Set Page0 as valid page: Write VALID_PAGE at Page0 base address
 110:EEPROM.c      ****     FlashStatus = FLASH_Save(PAGE0_BASE_ADDRESS, VALID_PAGE);
 111:EEPROM.c      ****     if (FlashStatus == FLASH_COMPLETE)
 112:EEPROM.c      ****       FlashStatus = FLASH_ErasePage(PAGE1_BASE_ADDRESS);
 113:EEPROM.c      ****   }
 114:EEPROM.c      **** 
 115:EEPROM.c      ****   return (FlashStatus == FLASH_COMPLETE);
 116:EEPROM.c      **** }
 117:EEPROM.c      **** 
 118:EEPROM.c      **** 
 119:EEPROM.c      **** 
 120:EEPROM.c      **** /*******************************************************************************
 121:EEPROM.c      **** * Function Name  : EE_FindValidPage
 122:EEPROM.c      **** * Description    : Find valid Page for write or read operation
 123:EEPROM.c      **** * Input          : - Operation: operation to achieve on the valid page:
 124:EEPROM.c      **** *                      - READ_FROM_VALID_PAGE: read operation from valid page
 125:EEPROM.c      **** *                      - WRITE_IN_VALID_PAGE: write operation from valid page
 126:EEPROM.c      **** * Output         : None
 127:EEPROM.c      **** * Return         : Valid page number (PAGE0 or PAGE1) or NO_VALID_PAGE in case
 128:EEPROM.c      **** *                  of no valid page was found
 129:EEPROM.c      **** *******************************************************************************/
 130:EEPROM.c      **** FLASH_Status EE_FindValidPage(u8 Operation)
 131:EEPROM.c      **** {
 132:EEPROM.c      ****   FLASH_Status PageStatus0, PageStatus1;
 133:EEPROM.c      **** 
 134:EEPROM.c      ****   PageStatus0 = FLASH_Load(PAGE0_BASE_ADDRESS);
 135:EEPROM.c      ****   PageStatus1 = FLASH_Load(PAGE1_BASE_ADDRESS);
 136:EEPROM.c      **** 
 137:EEPROM.c      ****   // Write or read operation
 138:EEPROM.c      ****   switch (Operation) {
 139:EEPROM.c      ****     case WRITE_IN_VALID_PAGE:   // ---- Write operation ----
 140:EEPROM.c      ****       if (PageStatus1 == VALID_PAGE) {
 141:EEPROM.c      ****         // Page0 receiving data
 142:EEPROM.c      ****         if (PageStatus0 == RECEIVE_DATA) {
 143:EEPROM.c      ****           return PAGE0;   // Page0 valid
 144:EEPROM.c      ****         }
 145:EEPROM.c      ****         else {
 146:EEPROM.c      ****           return PAGE1;   // Page1 valid
 147:EEPROM.c      ****         }
 148:EEPROM.c      ****       }
 149:EEPROM.c      ****       else if (PageStatus0 == VALID_PAGE) {
 150:EEPROM.c      ****         // Page1 receiving data
 151:EEPROM.c      ****         if (PageStatus1 == RECEIVE_DATA) {
 152:EEPROM.c      ****           return PAGE1;      // Page1 valid
 153:EEPROM.c      ****         }
 154:EEPROM.c      ****         else {
 155:EEPROM.c      ****           return PAGE0;      // Page0 valid
 156:EEPROM.c      ****         }
 157:EEPROM.c      ****       }
 158:EEPROM.c      ****       else {
 159:EEPROM.c      ****         return NO_VALID_PAGE;   // No valid Page
 160:EEPROM.c      ****       }
 161:EEPROM.c      **** 
 162:EEPROM.c      ****     case READ_FROM_VALID_PAGE:  // ---- Read operation ----
 163:EEPROM.c      ****       if (PageStatus0 == VALID_PAGE) {
 164:EEPROM.c      ****         return PAGE0;           // Page0 valid
 165:EEPROM.c      ****       }
 166:EEPROM.c      ****       else if (PageStatus1 == VALID_PAGE) {
 167:EEPROM.c      ****         return PAGE1;           // Page1 valid
 168:EEPROM.c      ****       }
 169:EEPROM.c      ****       else {
 170:EEPROM.c      ****         return NO_VALID_PAGE ;  // No valid Page
 171:EEPROM.c      ****       }
 172:EEPROM.c      **** 
 173:EEPROM.c      ****     default:
 174:EEPROM.c      ****       return PAGE0;       // Page0 valid
 175:EEPROM.c      ****   }
 176:EEPROM.c      **** }
 177:EEPROM.c      **** 
 178:EEPROM.c      **** /*******************************************************************************
 179:EEPROM.c      **** * Function Name  : EE_VerifyPageFullWriteVariable
 180:EEPROM.c      **** * Description    : Verify if active page is full and Writes variable in EEPROM.
 181:EEPROM.c      **** * Input          : - VirtAddress: 16 bit virtual address of the variable
 182:EEPROM.c      **** *                  - Data: 16 bit data to be written as variable value
 183:EEPROM.c      **** * Output         : None
 184:EEPROM.c      **** * Return         : - Success or error status: 
 185:EEPROM.c      **** *                      - FLASH_COMPLETE: on success
 186:EEPROM.c      **** *                      - PAGE_FULL: if valid page is full
 187:EEPROM.c      **** *                      - NO_VALID_PAGE: if no valid page was found
 188:EEPROM.c      **** *                      - Flash error code: on write Flash error
 189:EEPROM.c      **** *******************************************************************************/
 190:EEPROM.c      **** FLASH_Status EE_VerifyPageFullWriteVariable(u16 VirtAddress, u16 Data)
 191:EEPROM.c      **** {
  15              		@ args = 0, pretend = 0, frame = 0
  16              		@ frame_needed = 0, uses_anonymous_args = 0
  17              	.LVL0:
  18              	.LBB38:
  19              	.LBB39:
  20              	.LBB40:
  21              	.LBB41:
  22              		.loc 1 50 0
  23              		mvn	ip, #0
  24 0000 00C0E0E3 		mov	r3, #61440
  25 0004 0F3AA0E3 		.loc 1 51 0
  26              		mov	r2, #1
  27 0008 0120A0E3 		.loc 1 50 0
  28              		str	r3, [ip, #-2031]
  29 000c EF370CE5 		.loc 1 51 0
  30              		str	r2, [ip, #-2039]
  31 0010 F7270CE5 		.loc 1 53 0
  32              		ldr	r3, [ip, #-2047]
  33 0014 FF371CE5 		.loc 1 54 0
  34              		tst	r3, #3
  35 0018 030013E3 	.LBE41:
  36              	.LBE40:
  37              	.LBE39:
  38              	.LBE38:
  39              		.loc 1 191 0
  40              		stmfd	sp!, {r4, r5, lr}
  41 001c 30402DE9 	.LCFI0:
  42              		.loc 1 191 0
  43              		mov	r4, r0
  44 0020 0040A0E1 		mov	r5, r1
  45 0024 0150A0E1 	.LBB42:
  46              	.LBB43:
  47              	.LBB44:
  48              	.LBB45:
  49              		.loc 1 54 0
  50              		bne	.L2
  51 0028 0300001A 	.LVL1:
  52              		mov	r2, ip
  53 002c 0C20A0E1 	.L3:
  54              		ldr	r3, [r2, #-2047]
  55 0030 FF3712E5 		tst	r3, #3
  56 0034 030013E3 		beq	.L3
  57 0038 FCFFFF0A 	.L2:
  58              		.loc 1 57 0
  59              		mvn	ip, #0
  60 003c 00C0E0E3 	.LBE45:
  61              	.LBE44:
  62              	.LBB46:
  63              	.LBB47:
  64              		.loc 1 50 0
  65              		mov	r3, #61952
  66 0040 F23CA0E3 		.loc 1 51 0
  67              		mov	r2, #1
  68 0044 0120A0E3 	.LBE47:
  69              	.LBE46:
  70              	.LBB48:
  71              	.LBB49:
  72              		.loc 1 57 0
  73              		ldr	lr, [ip, #-2035]
  74 0048 F3E71CE5 	.LVL2:
  75              	.LBE49:
  76              	.LBE48:
  77              	.LBB50:
  78              	.LBB51:
  79              		.loc 1 50 0
  80              		str	r3, [ip, #-2031]
  81 004c EF370CE5 		.loc 1 51 0
  82              		str	r2, [ip, #-2039]
  83 0050 F7270CE5 		.loc 1 53 0
  84              		ldr	r3, [ip, #-2047]
  85 0054 FF371CE5 		.loc 1 54 0
  86              		tst	r3, #3
  87 0058 030013E3 		bne	.L4
  88 005c 0300001A 		mov	r2, ip
  89 0060 0C20A0E1 	.L5:
  90              		ldr	r3, [r2, #-2047]
  91 0064 FF3712E5 		tst	r3, #3
  92 0068 030013E3 		beq	.L5
  93 006c FCFFFF0A 	.L4:
  94              		.loc 1 57 0
  95              		mvn	r3, #0
  96 0070 0030E0E3 		ldr	r3, [r3, #-2035]
  97 0074 F33713E5 	.LVL3:
  98              	.LBE51:
  99              	.LBE50:
 100              		.loc 1 140 0
 101              		cmp	r3, #6
 102 0078 060053E3 		bne	.L6
 103 007c 5100001A 		.loc 1 142 0
 104              		cmp	lr, #5
 105 0080 05005EE3 		beq	.L8
 106 0084 5400000A 	.LVL4:
 107              	.L9:
 108              		.loc 1 151 0
 109              		mov	lr, #62976
 110 0088 F6ECA0E3 	.LVL5:
 111              		mov	r1, #63232
 112 008c F71CA0E3 		add	lr, lr, #4
 113 0090 04E08EE2 		add	r1, r1, #254
 114 0094 FE1081E2 	.LVL6:
 115              	.L30:
 116              	.LBE43:
 117              	.LBE42:
 118              	.LBB52:
 119              	.LBB53:
 120              		.loc 1 50 0
 121              		mvn	ip, #0
 122 0098 00C0E0E3 		.loc 1 51 0
 123              		mov	r3, #1
 124 009c 0130A0E3 	.LVL7:
 125              		.loc 1 50 0
 126              		str	lr, [ip, #-2031]
 127 00a0 EFE70CE5 		.loc 1 51 0
 128              		str	r3, [ip, #-2039]
 129 00a4 F7370CE5 		.loc 1 53 0
 130              		ldr	r2, [ip, #-2047]
 131 00a8 FF271CE5 		.loc 1 54 0
 132              		tst	r2, #3
 133 00ac 030012E3 		bne	.L14
 134 00b0 0300001A 		mov	r2, ip
 135 00b4 0C20A0E1 	.L15:
 136              		ldr	r3, [r2, #-2047]
 137 00b8 FF3712E5 		tst	r3, #3
 138 00bc 030013E3 		beq	.L15
 139 00c0 FCFFFF0A 	.L14:
 140              		.loc 1 57 0
 141              		mvn	ip, #0
 142 00c4 00C0E0E3 		ldr	r2, [ip, #-2035]
 143 00c8 F3271CE5 	.LBE53:
 144              	.LBE52:
 145              		.loc 1 209 0
 192:EEPROM.c      ****   FLASH_Status FlashStatus;
 193:EEPROM.c      ****   FLASH_Status ValidPage;
 194:EEPROM.c      ****   u16 Address, PageEndAddress;
 195:EEPROM.c      **** 
 196:EEPROM.c      ****   // Get valid Page for write operation
 197:EEPROM.c      ****   ValidPage = EE_FindValidPage(WRITE_IN_VALID_PAGE);
 198:EEPROM.c      ****   if (ValidPage == NO_VALID_PAGE)
 199:EEPROM.c      ****     return  NO_VALID_PAGE;
 200:EEPROM.c      **** 
 201:EEPROM.c      ****   // Get the valid Page start Address
 202:EEPROM.c      ****   Address = (EEPROM_START_ADDRESS + (ValidPage * PAGE_SIZE) + 4);
 203:EEPROM.c      **** 
 204:EEPROM.c      ****   // Get the valid Page end Address
 205:EEPROM.c      ****   PageEndAddress = (EEPROM_START_ADDRESS + ((1 + ValidPage) * PAGE_SIZE) - 2);
 206:EEPROM.c      ****   // Check each active page address starting from begining
 207:EEPROM.c      ****   while (Address < PageEndAddress) {
 208:EEPROM.c      ****     // Verify if Address and Address+2 are free
 209:EEPROM.c      ****     if ((FLASH_Load(Address) == 0xFFFF) && (FLASH_Load(Address + 2) == 0xFFFF)) {
 146              	r0, #8
 147 00cc 0138A0E3 	.LVL8:
 148 00d0 0C3083E0 		ldmfd	sp!, {r4, r5, pc}
 149 00d4 030052E1 	.LVL9:
 150 00d8 0400000A 	.L40:
 151              		.loc 1 209 0
 210:EEPROM.c      ****       FlashStatus = FLASH_Save(Address, Data);
 211:EEPROM.c      ****       if (FlashStatus == FLASH_COMPLETE)
 212:EEPROM.c      ****         FlashStatus = FLASH_Save(Address + 2, VirtAddress);
 213:EEPROM.c      ****       return FlashStatus;
 214:EEPROM.c      ****     }
 215:EEPROM.c      ****     else {
 216:EEPROM.c      ****       // Next address location
 217:EEPROM.c      ****       Address = Address + 4;
 152              	0, lr, #2
 153 00dc 04E08EE2 	.LVL10:
 154              	.LBB54:
 155 00e0 0E0051E1 	.LBB55:
 156 00e4 EBFFFF8A 		.loc 1 51 0
 157 00e8 0800A0E3 		mov	r3, #1
 158              		.loc 1 50 0
 159 00ec 3080BDE8 		str	r0, [ip, #-2031]
 160              		.loc 1 51 0
 161              		str	r3, [ip, #-2039]
 162              		.loc 1 53 0
 163 00f0 02008EE2 		ldr	r2, [ip, #-2047]
 164              		.loc 1 54 0
 165              		tst	r2, #3
 166              		bne	.L18
 167              		mov	r2, ip
 168 00f4 0130A0E3 	.L19:
 169              		ldr	r3, [r2, #-2047]
 170 00f8 EF070CE5 		tst	r3, #3
 171              		beq	.L19
 172 00fc F7370CE5 	.L18:
 173              		.loc 1 57 0
 174 0100 FF271CE5 		mvn	ip, #0
 175              		ldr	r2, [ip, #-2035]
 176 0104 030012E3 	.LBE55:
 177 0108 0300001A 	.LBE54:
 178 010c 0C20A0E1 		.loc 1 209 0
 179              		mov	r3, #65536
 180 0110 FF3712E5 		add	r3, r3, ip
 181 0114 030013E3 		cmp	r2, r3
 182 0118 FCFFFF0A 		bne	.L16
 183              	.LBB56:
 184              	.LBB57:
 185 011c 00C0E0E3 		.loc 1 30 0
 186 0120 F3271CE5 		mov	r3, #8
 187              		.loc 1 34 0
 188              		mov	r2, #2
 189              		.loc 1 30 0
 190 0124 0138A0E3 		str	r3, [ip, #-2043]
 191 0128 0C3083E0 		.loc 1 32 0
 192 012c 030052E1 		str	lr, [ip, #-2031]
 193 0130 E9FFFF1A 		.loc 1 33 0
 194              		str	r5, [ip, #-2035]
 195              		.loc 1 34 0
 196              		str	r2, [ip, #-2039]
 197 0134 0830A0E3 		.loc 1 35 0
 198              		ldr	r3, [ip, #-2047]
 199 0138 0220A0E3 		.loc 1 36 0
 200              		ands	r3, r3, #3
 201 013c FB370CE5 	.LVL11:
 202              		bne	.L21
 203 0140 EFE70CE5 		mov	r2, ip
 204              	.L22:
 205 0144 F3570CE5 		ldr	r3, [r2, #-2047]
 206              	.LVL12:
 207 0148 F7270CE5 		ands	r3, r3, #3
 208              	.LVL13:
 209 014c FF371CE5 		beq	.L22
 210              	.L21:
 211 0150 033013E2 		.loc 1 37 0
 212              		ands	r3, r3, #2
 213 0154 0300001A 	.LVL14:
 214 0158 0C20A0E1 		bne	.L23
 215              		.loc 1 39 0
 216 015c FF3712E5 		mvn	r1, #0
 217              		str	r3, [r1, #-2043]
 218 0160 033013E2 	.LBE57:
 219              	.LBE56:
 220 0164 FCFFFF0A 	.LBB58:
 221              	.LBB59:
 222              		.loc 1 34 0
 223 0168 023013E2 		mov	r2, #2
 224              		.loc 1 30 0
 225 016c 1300001A 		mov	r3, #8
 226              		str	r3, [r1, #-2043]
 227 0170 0010E0E3 		.loc 1 32 0
 228 0174 FB3701E5 		str	r0, [r1, #-2031]
 229              		.loc 1 33 0
 230              		str	r4, [r1, #-2035]
 231              		.loc 1 34 0
 232              		str	r2, [r1, #-2039]
 233              		.loc 1 35 0
 234 0178 0220A0E3 		ldr	r3, [r1, #-2047]
 235              		.loc 1 36 0
 236 017c 0830A0E3 		ands	r3, r3, #3
 237 0180 FB3701E5 	.LVL15:
 238              		bne	.L25
 239 0184 EF0701E5 		mov	r2, r1
 240              	.L26:
 241 0188 F34701E5 		ldr	r3, [r2, #-2047]
 242              	.LVL16:
 243 018c F72701E5 		ands	r3, r3, #3
 244              	.LVL17:
 245 0190 FF3711E5 		beq	.L26
 246              	.L25:
 247 0194 033013E2 		.loc 1 37 0
 248              		ands	r2, r3, #2
 249 0198 0300001A 		.loc 1 39 0
 250 019c 0120A0E1 		mvneq	r3, #0
 251              	.LVL18:
 252 01a0 FF3712E5 		moveq	r0, #1
 253              	.LVL19:
 254 01a4 033013E2 		streq	r2, [r3, #-2043]
 255              		.loc 1 37 0
 256 01a8 FCFFFF0A 		ldmeqfd	sp!, {r4, r5, pc}
 257              	.LVL20:
 258              	.L23:
 259 01ac 022013E2 	.LBE59:
 260              	.LBE58:
 261 01b0 0030E003 		.loc 1 207 0
 262              		mov	r0, #0
 263 01b4 0100A003 	.LVL21:
 264              		.loc 1 222 0
 265 01b8 FB270305 		ldmfd	sp!, {r4, r5, pc}
 266              	.LVL22:
 267 01bc 3080BD08 	.L6:
 268              	.LBB60:
 269              	.LBB61:
 270              		.loc 1 149 0
 271              		cmp	lr, #6
 272              		movne	r0, #7
 273 01c0 0000A0E3 	.LVL23:
 274              		ldmnefd	sp!, {r4, r5, pc}
 218:EEPROM.c      ****     }
 219:EEPROM.c      ****   }
 220:EEPROM.c      **** 
 221:EEPROM.c      ****   return PAGE_FULL;
 222:EEPROM.c      **** }
 275              	b	.L30
 276 01c4 3080BDE8 	.LBE61:
 277              	.LBE60:
 278              	.LFE8:
 280              		.align	2
 281              		.global	EE_Erased
 283 01cc 0700A013 	EE_Erased:
 284              	.LFB5:
 285 01d0 3080BD18 		.loc 1 80 0
 286              		@ args = 0, pretend = 0, frame = 0
 287 01d4 050053E3 		@ frame_needed = 0, uses_anonymous_args = 0
 288 01d8 AAFFFF0A 		@ link register save eliminated.
 289              	.LBB70:
 290              	.LBB71:
 291 01dc 3DEBA0E3 		.loc 1 50 0
 292              		mvn	r1, #0
 293 01e0 F51CA0E3 		mov	r3, #61440
 294 01e4 04E08EE2 		.loc 1 51 0
 295 01e8 FE1081E2 		mov	r2, #1
 296 01ec A9FFFFEA 		.loc 1 50 0
 297              		str	r3, [r1, #-2031]
 298              		.loc 1 51 0
 299              		str	r2, [r1, #-2039]
 300              		.loc 1 53 0
 301              		ldr	r3, [r1, #-2047]
 302              		.loc 1 54 0
 303              		tst	r3, #3
 304              	.LBE71:
 305              	.LBE70:
 306              		.loc 1 80 0
 307              		@ lr needed for prologue
 308              	.LBB72:
 309              	.LBB73:
 310              		.loc 1 54 0
 311              		bne	.L42
 312              		mov	r2, r1
 313 01f0 0010E0E3 	.L43:
 314 01f4 0F3AA0E3 		ldr	r3, [r2, #-2047]
 315              		tst	r3, #3
 316 01f8 0120A0E3 		beq	.L43
 317              	.L42:
 318 01fc EF3701E5 		.loc 1 57 0
 319              		mvn	r1, #0
 320 0200 F72701E5 		ldr	r2, [r1, #-2035]
 321              	.LBE73:
 322 0204 FF3711E5 	.LBE72:
 323              		.loc 1 81 0
 324 0208 030013E3 		mov	r3, #65536
 325              		add	r3, r3, r1
 326              		cmp	r2, r3
 327              		beq	.L60
 328              	.L44:
 329              	.LBB74:
 330              	.LBB75:
 331              		mov	r0, #0
 332 020c 0300001A 	.LBE75:
 333 0210 0120A0E1 	.LBE74:
 334              		.loc 1 85 0
 335 0214 FF3712E5 		bx	lr
 336 0218 030013E3 	.L60:
 337 021c FCFFFF0A 	.LBB76:
 338              	.LBB77:
 339              		.loc 1 50 0
 340 0220 0010E0E3 		mov	r3, #61440
 341 0224 F32711E5 		add	r3, r3, #2
 342              		.loc 1 51 0
 343              		mov	r2, #1
 344              		.loc 1 50 0
 345 0228 0138A0E3 		str	r3, [r1, #-2031]
 346 022c 013083E0 		.loc 1 51 0
 347 0230 030052E1 		str	r2, [r1, #-2039]
 348 0234 0100000A 		.loc 1 53 0
 349              		ldr	r3, [r1, #-2047]
 350              		.loc 1 54 0
 351              		tst	r3, #3
 352 0238 0000A0E3 		bne	.L46
 353              		mov	r2, r1
 354              	.L47:
 355              		ldr	r3, [r2, #-2047]
 356 023c 1EFF2FE1 		tst	r3, #3
 357              		beq	.L47
 358              	.L46:
 359              		.loc 1 57 0
 360              		mvn	r1, #0
 361 0240 0F3AA0E3 		ldr	r2, [r1, #-2035]
 362 0244 023083E2 	.LBE77:
 363              	.LBE76:
 364 0248 0120A0E3 		.loc 1 81 0
 365              		mov	r3, #65536
 366 024c EF3701E5 		add	r3, r3, r1
 367              		cmp	r2, r3
 368 0250 F72701E5 		bne	.L44
 369              	.LBB78:
 370 0254 FF3711E5 	.LBB79:
 371              		.loc 1 50 0
 372 0258 030013E3 		mov	r3, #61952
 373 025c 0300001A 		.loc 1 51 0
 374 0260 0120A0E1 		mov	r2, #1
 375              		.loc 1 50 0
 376 0264 FF3712E5 		str	r3, [r1, #-2031]
 377 0268 030013E3 		.loc 1 51 0
 378 026c FCFFFF0A 		str	r2, [r1, #-2039]
 379              		.loc 1 53 0
 380              		ldr	r3, [r1, #-2047]
 381 0270 0010E0E3 		.loc 1 54 0
 382 0274 F32711E5 		tst	r3, #3
 383              		bne	.L49
 384              		mov	r2, r1
 385              	.L50:
 386 0278 0138A0E3 		ldr	r3, [r2, #-2047]
 387 027c 013083E0 		tst	r3, #3
 388 0280 030052E1 		beq	.L50
 389 0284 EBFFFF1A 	.L49:
 390              		.loc 1 57 0
 391              		mvn	r1, #0
 392              		ldr	r2, [r1, #-2035]
 393 0288 F23CA0E3 	.LBE79:
 394              	.LBE78:
 395 028c 0120A0E3 		.loc 1 81 0
 396              		mov	r3, #65536
 397 0290 EF3701E5 		add	r3, r3, r1
 398              		cmp	r2, r3
 399 0294 F72701E5 		bne	.L44
 400              	.LBB80:
 401 0298 FF3711E5 	.LBB81:
 402              		.loc 1 50 0
 403 029c 030013E3 		mov	r3, #61952
 404 02a0 0300001A 		add	r3, r3, #2
 405 02a4 0120A0E1 		.loc 1 51 0
 406              		mov	r2, #1
 407 02a8 FF3712E5 		.loc 1 50 0
 408 02ac 030013E3 		str	r3, [r1, #-2031]
 409 02b0 FCFFFF0A 		.loc 1 51 0
 410              		str	r2, [r1, #-2039]
 411              		.loc 1 53 0
 412 02b4 0010E0E3 		ldr	r3, [r1, #-2047]
 413 02b8 F32711E5 		.loc 1 54 0
 414              		tst	r3, #3
 415              		bne	.L52
 416              		mov	r2, r1
 417 02bc 0138A0E3 	.L53:
 418 02c0 013083E0 		ldr	r3, [r2, #-2047]
 419 02c4 030052E1 		tst	r3, #3
 420 02c8 DAFFFF1A 		beq	.L53
 421              	.L52:
 422              		.loc 1 57 0
 423              		mvn	r3, #0
 424 02cc F23CA0E3 		ldr	r1, [r3, #-2035]
 425 02d0 023083E2 		mov	r2, #65536
 426              		add	r2, r2, r3
 427 02d4 0120A0E3 		cmp	r1, r2
 428              		movne	r0, #0
 429 02d8 EF3701E5 		moveq	r0, #1
 430              		bx	lr
 431 02dc F72701E5 	.LBE81:
 432              	.LBE80:
 433 02e0 FF3711E5 	.LFE5:
 435 02e4 030013E3 		.align	2
 436 02e8 0300001A 		.global	EE_Format
 438              	EE_Format:
 439 02f0 FF3712E5 	.LFB6:
 440 02f4 030013E3 		.loc 1 104 0
 441 02f8 FCFFFF0A 		@ args = 0, pretend = 0, frame = 0
 442              		@ frame_needed = 0, uses_anonymous_args = 0
 443              		@ link register save eliminated.
 444 02fc 0030E0E3 	.LBB88:
 445 0300 F31713E5 	.LBB89:
 446 0304 0128A0E3 		.loc 1 65 0
 447 0308 032082E0 		mvn	r0, #0
 448 030c 020051E1 		mov	r3, #8
 449 0310 0000A013 		.loc 1 67 0
 450 0314 0100A003 		mov	r2, #61440
 451 0318 1EFF2FE1 		.loc 1 68 0
 452              		mov	r1, #5
 453              		.loc 1 65 0
 454              		str	r3, [r0, #-2043]
 455              		.loc 1 67 0
 456              		str	r2, [r0, #-2031]
 457              		.loc 1 68 0
 458              		str	r1, [r0, #-2039]
 459              		.loc 1 69 0
 460              		ldr	r3, [r0, #-2047]
 461              		.loc 1 70 0
 462              		ands	r3, r3, #3
 463              	.LVL26:
 464              	.LBE89:
 465              	.LBE88:
 466              		.loc 1 104 0
 467              		@ lr needed for prologue
 468 031c 0000E0E3 	.LBB90:
 469 0320 0830A0E3 	.LBB91:
 470              		.loc 1 70 0
 471 0324 0F2AA0E3 		bne	.L62
 472              		mov	r2, r0
 473 0328 0510A0E3 	.L63:
 474              		ldr	r3, [r2, #-2047]
 475 032c FB3700E5 	.LVL27:
 476              		ands	r3, r3, #3
 477 0330 EF2700E5 	.LVL28:
 478              		beq	.L63
 479 0334 F71700E5 	.L62:
 480              		.loc 1 74 0
 481 0338 FF3710E5 		tst	r3, #2
 482              		.loc 1 72 0
 483 033c 033013E2 		mov	r2, #0
 484              		mvn	r3, #0
 485              	.LVL29:
 486              		str	r2, [r3, #-2043]
 487              		.loc 1 74 0
 488              		bne	.L64
 489              	.LBE91:
 490              	.LBE90:
 491              	.LBB92:
 492 0340 0300001A 	.LBB93:
 493 0344 0020A0E1 		.loc 1 30 0
 494              		mvn	r1, #0
 495 0348 FF3712E5 		mov	r3, #8
 496              		.loc 1 32 0
 497 034c 033013E2 		mov	r2, #61440
 498              		.loc 1 30 0
 499 0350 FCFFFF0A 		str	r3, [r1, #-2043]
 500              		.loc 1 32 0
 501              		str	r2, [r1, #-2031]
 502 0354 020013E3 		.loc 1 33 0
 503              		sub	r3, r3, #2
 504 0358 0020A0E3 		.loc 1 34 0
 505 035c 0030E0E3 		mov	r2, #2
 506              		.loc 1 33 0
 507 0360 FB2703E5 		str	r3, [r1, #-2035]
 508              		.loc 1 34 0
 509 0364 2700001A 		str	r2, [r1, #-2039]
 510              		.loc 1 35 0
 511              		ldr	r3, [r1, #-2047]
 512              		.loc 1 36 0
 513              		ands	r3, r3, #3
 514              	.LVL30:
 515 0368 0010E0E3 		bne	.L67
 516 036c 0830A0E3 	.L73:
 517              		mvn	r2, #0
 518 0370 0F2AA0E3 		ldr	r3, [r2, #-2047]
 519              	.LVL31:
 520 0374 FB3701E5 		ands	r3, r3, #3
 521              	.LVL32:
 522 0378 EF2701E5 		beq	.L73
 523              	.L67:
 524 037c 023043E2 		.loc 1 37 0
 525              		ands	r3, r3, #2
 526 0380 0220A0E3 	.LVL33:
 527              		bne	.L64
 528 0384 F33701E5 		.loc 1 39 0
 529              		mvn	r0, #0
 530 0388 F72701E5 		str	r3, [r0, #-2043]
 531              	.LBE93:
 532 038c FF3711E5 	.LBE92:
 533              	.LBB94:
 534 0390 033013E2 	.LBB95:
 535              		.loc 1 67 0
 536 0394 0300001A 		mov	r2, #61952
 537              		.loc 1 65 0
 538 0398 0020E0E3 		mov	r3, #8
 539 039c FF3712E5 		.loc 1 68 0
 540              		mov	r1, #5
 541 03a0 033013E2 		.loc 1 65 0
 542              		str	r3, [r0, #-2043]
 543 03a4 FBFFFF0A 		.loc 1 67 0
 544              		str	r2, [r0, #-2031]
 545              		.loc 1 68 0
 546 03a8 023013E2 		str	r1, [r0, #-2039]
 547              		.loc 1 69 0
 548 03ac 1500001A 		ldr	r3, [r0, #-2047]
 549              		.loc 1 70 0
 550 03b0 0000E0E3 		ands	r3, r3, #3
 551 03b4 FB3700E5 	.LVL34:
 552              		bne	.L69
 553              		mov	r2, r0
 554              	.L70:
 555              		ldr	r3, [r2, #-2047]
 556              	.LVL35:
 557 03b8 F22CA0E3 		ands	r3, r3, #3
 558              	.LVL36:
 559 03bc 0830A0E3 		beq	.L70
 560              	.L69:
 561 03c0 0510A0E3 		.loc 1 72 0
 562              		movs	r3, r3, lsr #1
 563 03c4 FB3700E5 	.LVL37:
 564              		mov	r2, #0
 565 03c8 EF2700E5 		mvn	r3, #0
 566              		movne	r0, #0
 567 03cc F71700E5 		moveq	r0, #1
 568              		str	r2, [r3, #-2043]
 569 03d0 FF3710E5 		bx	lr
 570              	.L64:
 571 03d4 033013E2 		mov	r0, #0
 572              		bx	lr
 573 03d8 0300001A 	.LBE95:
 574 03dc 0020A0E1 	.LBE94:
 575              	.LFE6:
 577              		.align	2
 578 03e4 033013E2 		.global	EE_Read
 580 03e8 FCFFFF0A 	EE_Read:
 581              	.LFB10:
 582              		.loc 1 273 0
 583 03ec A330B0E1 		@ args = 0, pretend = 0, frame = 0
 584              		@ frame_needed = 0, uses_anonymous_args = 0
 585 03f0 0020A0E3 	.LVL38:
 586 03f4 0030E0E3 	.LBB108:
 587 03f8 0000A013 	.LBB109:
 588 03fc 0100A003 	.LBB110:
 589 0400 FB2703E5 	.LBB111:
 590 0404 1EFF2FE1 	.LBB112:
 591              	.LBB113:
 592 0408 0000A0E3 		.loc 1 50 0
 593 040c 1EFF2FE1 		mvn	ip, #0
 594              		mov	r3, #61440
 595              		.loc 1 51 0
 596              		mov	r2, #1
 597              		.loc 1 50 0
 598              		str	r3, [ip, #-2031]
 599              		.loc 1 51 0
 600              		str	r2, [ip, #-2039]
 601              		.loc 1 53 0
 602              		ldr	r3, [ip, #-2047]
 223:EEPROM.c      **** 
 224:EEPROM.c      **** /*******************************************************************************
 225:EEPROM.c      **** * Function Name  : EE_ReadVariable
 226:EEPROM.c      **** * Description    : Returns the last stored variable data, if found, which 
 227:EEPROM.c      **** *                  correspond to the passed virtual address
 228:EEPROM.c      **** * Input          : - VirtAddress: Variable virtual address
 229:EEPROM.c      **** *                  - Read_data: Global variable contains the read variable value
 230:EEPROM.c      **** * Output         : None
 231:EEPROM.c      **** * Return         : - Success or error status: 
 232:EEPROM.c      **** *                      - 0: if variable was found
 233:EEPROM.c      **** *                      - 1: if the variable was not found
 234:EEPROM.c      **** *                      - NO_VALID_PAGE: if no valid page was found.
 235:EEPROM.c      **** *******************************************************************************/
 236:EEPROM.c      **** FLASH_Status EE_ReadVariable(u16 VirtAddress, u16* ReadData)
 237:EEPROM.c      **** {
 238:EEPROM.c      ****   FLASH_Status ValidPage;
 239:EEPROM.c      ****   u16 AddressValue;
 240:EEPROM.c      ****   u16 Address, PageStartAddress;
 241:EEPROM.c      **** 
 242:EEPROM.c      ****   // Get active Page for read operation
 243:EEPROM.c      ****   ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);
 244:EEPROM.c      **** 
 245:EEPROM.c      ****   if (ValidPage == NO_VALID_PAGE)
 246:EEPROM.c      ****     return  NO_VALID_PAGE;
 247:EEPROM.c      **** 
 248:EEPROM.c      ****   // Get the valid Page start Address
 249:EEPROM.c      ****   PageStartAddress = (EEPROM_START_ADDRESS + (ValidPage * PAGE_SIZE) + 4);
 250:EEPROM.c      ****   // Get the valid Page end Address
 251:EEPROM.c      ****   Address = (EEPROM_START_ADDRESS + ((1 + ValidPage) * PAGE_SIZE) - 2);
 252:EEPROM.c      **** 
 253:EEPROM.c      ****   // Check each active page address starting from end
 254:EEPROM.c      ****   while (Address >= (PageStartAddress + 2)) {
 255:EEPROM.c      ****     // Get the current location content to be compared with virtual address
 256:EEPROM.c      ****     AddressValue = FLASH_Load(Address);
 257:EEPROM.c      ****     // Compare the read address with the virtual address
 258:EEPROM.c      ****     if (AddressValue == VirtAddress) {
 259:EEPROM.c      ****       // Get content of Address-2 which is variable value
 260:EEPROM.c      ****       *ReadData = FLASH_Load(Address - 2);
 261:EEPROM.c      ****       return VARIABLE_EXIST;
 262:EEPROM.c      ****     }
 263:EEPROM.c      ****     else {
 264:EEPROM.c      ****       // Next address location
 265:EEPROM.c      ****       Address = Address - 4;
 266:EEPROM.c      ****     }
 267:EEPROM.c      ****   }
 268:EEPROM.c      **** 
 269:EEPROM.c      ****   return VARIABLE_DOESNOT_EXIST;
 270:EEPROM.c      **** }
 271:EEPROM.c      **** 
 272:EEPROM.c      **** Bool EE_Read(u16 VirtAddress, u16* Read_data)
 273:EEPROM.c      **** {
 603              	BE113:
 604              	.LBE112:
 605              	.LBE111:
 606              	.LBE110:
 607              	.LBE109:
 608              	.LBE108:
 609              		.loc 1 273 0
 610              		stmfd	sp!, {r4, lr}
 611              	.LCFI1:
 612              		.loc 1 273 0
 613              		mov	r4, r1
 614 0410 00C0E0E3 	.LBB114:
 615 0414 0F3AA0E3 	.LBB115:
 616              	.LBB116:
 617 0418 0120A0E3 	.LBB117:
 618              	.LBB118:
 619 041c EF370CE5 	.LBB119:
 620              		.loc 1 54 0
 621 0420 F7270CE5 		bne	.L79
 622              	.LVL39:
 623 0424 FF371CE5 		mov	r2, ip
 624              	.L80:
 625 0428 030013E3 		ldr	r3, [r2, #-2047]
 626              		tst	r3, #3
 627              		beq	.L80
 628              	.L79:
 629              		.loc 1 57 0
 630              		mvn	ip, #0
 631              	.LBE119:
 632              	.LBE118:
 633 042c 10402DE9 	.LBB120:
 634              	.LBB121:
 635              		.loc 1 50 0
 636 0430 0140A0E1 		mov	r3, #61952
 637              		.loc 1 51 0
 638              		mov	r2, #1
 639              	.LBE121:
 640              	.LBE120:
 641              	.LBB122:
 642              	.LBB123:
 643              		.loc 1 57 0
 644 0434 0300001A 		ldr	lr, [ip, #-2035]
 645              	.LVL40:
 646 0438 0C20A0E1 	.LBE123:
 647              	.LBE122:
 648 043c FF3712E5 	.LBB124:
 649 0440 030013E3 	.LBB125:
 650 0444 FCFFFF0A 		.loc 1 50 0
 651              		str	r3, [ip, #-2031]
 652              		.loc 1 51 0
 653 0448 00C0E0E3 		str	r2, [ip, #-2039]
 654              		.loc 1 53 0
 655              		ldr	r3, [ip, #-2047]
 656              		.loc 1 54 0
 657              		tst	r3, #3
 658              		bne	.L81
 659 044c F23CA0E3 		mov	r2, ip
 660              	.L82:
 661 0450 0120A0E3 		ldr	r3, [r2, #-2047]
 662              		tst	r3, #3
 663              		beq	.L82
 664              	.L81:
 665              	.LBE125:
 666              	.LBE124:
 667 0454 F3E71CE5 		.loc 1 163 0
 668              		cmp	lr, #6
 669              	.LBB126:
 670              	.LBB127:
 671              		.loc 1 57 0
 672              		mvn	r3, #0
 673              	.LBE127:
 674 0458 EF370CE5 	.LBE126:
 675              		.loc 1 163 0
 676 045c F7270CE5 		moveq	lr, #62720
 677              	.LVL41:
 678 0460 FF371CE5 		moveq	r1, #62464
 679              	.LBB128:
 680 0464 030013E3 	.LBB129:
 681 0468 0300001A 		.loc 1 57 0
 682 046c 0C20A0E1 		ldr	r3, [r3, #-2035]
 683              	.LVL42:
 684 0470 FF3712E5 	.LBE129:
 685 0474 030013E3 	.LBE128:
 686 0478 FCFFFF0A 		.loc 1 163 0
 687              		addeq	lr, lr, #254
 688              		addeq	r1, r1, #6
 689              		beq	.L96
 690              		.loc 1 166 0
 691 047c 06005EE3 		cmp	r3, #6
 692              		beq	.L102
 693              	.LBE117:
 694              	.LBE116:
 695 0480 0030E0E3 		.loc 1 254 0
 696              		mov	r0, #0
 697              	.LVL43:
 698              	.LBE115:
 699 0484 F5ECA003 	.LBE114:
 700              		.loc 1 278 0
 701 0488 3D1BA003 		ldmfd	sp!, {r4, pc}
 702              	.LVL44:
 703              	.L102:
 704              	.LBB130:
 705 048c F33713E5 	.LBB131:
 706              	.LBB132:
 707              	.LBB133:
 708              		.loc 1 166 0
 709              		mov	lr, #63232
 710 0490 FEE08E02 		mov	r1, #62976
 711 0494 06108102 		add	lr, lr, #254
 712 0498 0700000A 		add	r1, r1, #6
 713              	.LVL45:
 714 049c 060053E3 	.L96:
 715 04a0 0100000A 	.LBE133:
 716              	.LBE132:
 717              	.LBB134:
 718              	.LBB135:
 719 04a4 0000A0E3 		.loc 1 50 0
 720              		mvn	ip, #0
 721              		.loc 1 51 0
 722              		mov	r3, #1
 274:EEPROM.c      ****   u16 *DataPtr = Read_data;
 275:EEPROM.c      ****   
 276:EEPROM.c      ****   return (EE_ReadVariable(VirtAddress, DataPtr) == VARIABLE_EXIST);
 277:EEPROM.c      **** 
 278:EEPROM.c      **** }
 723              	 54 0
 724 04a8 1080BDE8 		tst	r2, #3
 725              		bne	.L88
 726              		mov	r2, ip
 727              	.L89:
 728              		ldr	r3, [r2, #-2047]
 729              		tst	r3, #3
 730              		beq	.L89
 731              	.L88:
 732 04ac F7ECA0E3 		.loc 1 57 0
 733 04b0 F61CA0E3 		mvn	ip, #0
 734 04b4 FEE08EE2 		ldr	r3, [ip, #-2035]
 735 04b8 061081E2 	.LVL47:
 736              	.LBE135:
 737              	.LBE134:
 738              		.loc 1 258 0
 739              		cmp	r0, r3
 740              		beq	.L103
 741              		.loc 1 265 0
 742              		sub	lr, lr, #4
 743 04bc 00C0E0E3 		.loc 1 254 0
 744              		cmp	r1, lr
 745 04c0 0130A0E3 		bls	.L96
 746              		mov	r0, #0
 747              	.LVL48:
 748 04c4 EFE70CE5 	.LBE131:
 749              	.LBE130:
 750 04c8 F7370CE5 		.loc 1 278 0
 751              		ldmfd	sp!, {r4, pc}
 752 04cc FF271CE5 	.LVL49:
 753              	.L103:
 754 04d0 030012E3 	.LBB136:
 755 04d4 0300001A 	.LBB137:
 756 04d8 0C20A0E1 		.loc 1 260 0
 757              		sub	r3, lr, #2
 758 04dc FF3712E5 	.LVL50:
 759 04e0 030013E3 	.LBB138:
 760 04e4 FCFFFF0A 	.LBB139:
 761              		.loc 1 51 0
 762              		mov	r2, #1
 763 04e8 00C0E0E3 		.loc 1 50 0
 764 04ec F3371CE5 		str	r3, [ip, #-2031]
 765              		.loc 1 51 0
 766              		str	r2, [ip, #-2039]
 767              		.loc 1 53 0
 768              		ldr	r3, [ip, #-2047]
 769 04f0 030050E1 	.LVL51:
 770 04f4 0400000A 		.loc 1 54 0
 771              		tst	r3, #3
 772 04f8 04E04EE2 		bne	.L92
 773              		mov	r2, ip
 774 04fc 0E0051E1 	.L93:
 775 0500 EDFFFF9A 		ldr	r3, [r2, #-2047]
 776 0504 0000A0E3 		tst	r3, #3
 777              		beq	.L93
 778              	.L92:
 779              		.loc 1 57 0
 780              		mvn	r3, #0
 781 0508 1080BDE8 		ldr	r2, [r3, #-2035]
 782              	.LBE139:
 783              	.LBE138:
 784              		.loc 1 260 0
 785              		mov	r0, #1
 786              	.LVL52:
 787 050c 02304EE2 		str	r2, [r4, #0]
 788              		ldmfd	sp!, {r4, pc}
 789              	.LBE137:
 790              	.LBE136:
 791              	.LFE10:
 793              		.align	2
 794 0514 EF370CE5 		.global	EE_Write
 796 0518 F7270CE5 	EE_Write:
 797              	.LFB12:
 798 051c FF371CE5 		.loc 1 364 0
 799              		@ args = 0, pretend = 0, frame = 0
 800              		@ frame_needed = 0, uses_anonymous_args = 0
 801 0520 030013E3 	.LVL53:
 802 0524 0300001A 		stmfd	sp!, {r4, r5, r6, r7, r8, sl, lr}
 803 0528 0C20A0E1 	.LCFI2:
 804              		.loc 1 364 0
 805 052c FF3712E5 		mov	r7, r0
 806 0530 030013E3 		mov	r5, r1
 807 0534 FCFFFF0A 		.loc 1 368 0
 808              		bl	EE_VerifyPageFullWriteVariable
 809              	.LVL54:
 810 0538 0030E0E3 	.LVL55:
 811 053c F32713E5 		.loc 1 370 0
 812              		cmp	r0, #8
 813              		beq	.L105
 814              		cmp	r0, #1
 815 0540 0100A0E3 		movne	r0, #0
 816              		moveq	r0, #1
 817 0544 002084E5 	.LVL56:
 818 0548 1080BDE8 		ldmfd	sp!, {r4, r5, r6, r7, r8, sl, pc}
 819              	.LVL57:
 820              	.L105:
 821              	.LBB166:
 822              	.LBB167:
 823              	.LBB168:
 824              	.LBB169:
 825              	.LBB170:
 826              	.LBB171:
 827              		.loc 1 50 0
 279:EEPROM.c      **** 
 280:EEPROM.c      **** /*******************************************************************************
 281:EEPROM.c      **** * Function Name  : EE_PageTransfer
 282:EEPROM.c      **** * Description    : Transfers last updated variable data from the full Page to 
 283:EEPROM.c      **** *                  an empty one.
 284:EEPROM.c      **** * Input          : - VirtAddress: 16 bit virtual address of the variable
 285:EEPROM.c      **** *                  - Data: 16 bit data to be written as variable value
 286:EEPROM.c      **** * Output         : None
 287:EEPROM.c      **** * Return         : - Success or error status: 
 288:EEPROM.c      **** *                      - FLASH_COMPLETE: on success,
 289:EEPROM.c      **** *                      - PAGE_FULL: if valid page is full
 290:EEPROM.c      **** *                      - NO_VALID_PAGE: if no valid page was found
 291:EEPROM.c      **** *                      - Flash error code: on write Flash error
 292:EEPROM.c      **** *******************************************************************************/
 293:EEPROM.c      **** FLASH_Status EE_PageTransfer(u16 VirtAddress, u16 Data)
 294:EEPROM.c      **** {
 295:EEPROM.c      ****   FLASH_Status FlashStatus;
 296:EEPROM.c      ****   u16 NewPageAddress, OldPageAddress;
 297:EEPROM.c      ****   FLASH_Status ValidPage;
 298:EEPROM.c      ****   u16 VarIdx;
 299:EEPROM.c      ****   FLASH_Status EepromStatus, ReadStatus;
 300:EEPROM.c      **** 
 301:EEPROM.c      ****   // Get active Page for read operation
 302:EEPROM.c      ****   ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);
 303:EEPROM.c      **** 
 304:EEPROM.c      ****   if (ValidPage == PAGE1) {
 305:EEPROM.c      ****     NewPageAddress = PAGE0_BASE_ADDRESS;
 306:EEPROM.c      ****     OldPageAddress = PAGE1_BASE_ADDRESS;
 307:EEPROM.c      ****   }
 308:EEPROM.c      ****   else if (ValidPage == PAGE0) {
 309:EEPROM.c      ****     NewPageAddress = PAGE1_BASE_ADDRESS;
 310:EEPROM.c      ****     OldPageAddress = PAGE0_BASE_ADDRESS;
 311:EEPROM.c      ****   }
 312:EEPROM.c      ****   else
 313:EEPROM.c      ****     return NO_VALID_PAGE;
 314:EEPROM.c      **** 
 315:EEPROM.c      ****   // Set the new Page status to RECEIVE_DATA status
 316:EEPROM.c      ****   FlashStatus = FLASH_Save(NewPageAddress, RECEIVE_DATA);
 317:EEPROM.c      ****   if (FlashStatus != FLASH_COMPLETE)
 318:EEPROM.c      ****     return FlashStatus;
 319:EEPROM.c      **** 
 320:EEPROM.c      ****   // Write the variable passed as parameter in the new active page
 321:EEPROM.c      ****   EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddress, Data);
 322:EEPROM.c      ****   if (EepromStatus != FLASH_COMPLETE)
 323:EEPROM.c      ****     return EepromStatus;
 324:EEPROM.c      **** 
 325:EEPROM.c      ****   // Transfer process: transfer variables from old to the new active page
 326:EEPROM.c      ****   for (VarIdx = 0; VarIdx < NumbOfVar; VarIdx++) {
 327:EEPROM.c      ****     // Check each variable except the one passed as parameter
 328:EEPROM.c      ****     if (VarIdx != VirtAddress) { 
 329:EEPROM.c      ****       // Read the other last variable updates
 330:EEPROM.c      ****       ReadStatus = EE_ReadVariable(VarIdx, &DataVar);
 331:EEPROM.c      ****       // In case variable corresponding to the virtual address was found
 332:EEPROM.c      ****       if (ReadStatus == VARIABLE_EXIST) {
 333:EEPROM.c      ****         // Transfer the variable to the new active page
 334:EEPROM.c      ****         EepromStatus = EE_VerifyPageFullWriteVariable(VarIdx, DataVar);
 335:EEPROM.c      ****         // If program operation was failed, a Flash error code is returned
 336:EEPROM.c      ****         if (EepromStatus != FLASH_COMPLETE) {
 337:EEPROM.c      ****           return EepromStatus;
 338:EEPROM.c      ****         }
 339:EEPROM.c      ****       }
 340:EEPROM.c      ****     }
 341:EEPROM.c      ****   }
 342:EEPROM.c      **** 
 343:EEPROM.c      ****   // Erase the old Page: Set old Page status to ERASED status
 344:EEPROM.c      ****   FlashStatus = FLASH_ErasePage(OldPageAddress);
 345:EEPROM.c      ****   if (FlashStatus == FLASH_COMPLETE)
 346:EEPROM.c      ****     FlashStatus = FLASH_Save(NewPageAddress, VALID_PAGE);
 347:EEPROM.c      **** 
 348:EEPROM.c      ****   return FlashStatus;
 349:EEPROM.c      **** }
 350:EEPROM.c      **** 
 351:EEPROM.c      **** /*******************************************************************************
 352:EEPROM.c      **** * Function Name  : EE_WriteVariable
 353:EEPROM.c      **** * Description    : Writes/upadtes variable data in EEPROM.
 354:EEPROM.c      **** * Input          : - VirtAddress: Variable virtual address
 355:EEPROM.c      **** *                  - Data: 16 bit data to be written
 356:EEPROM.c      **** * Output         : None
 357:EEPROM.c      **** * Return         : - Success or error status: 
 358:EEPROM.c      **** *                      - FLASH_COMPLETE: on success,
 359:EEPROM.c      **** *                      - PAGE_FULL: if valid page is full
 360:EEPROM.c      **** *                      - NO_VALID_PAGE: if no valid page was found
 361:EEPROM.c      **** *                      - Flash error code: on write Flash error
 362:EEPROM.c      **** *******************************************************************************/
 363:EEPROM.c      **** Bool EE_Write(u16 VirtAddress, u16 Data)
 364:EEPROM.c      **** {
 828              		r2, [r1, #-2039]
 829              		.loc 1 53 0
 830              		ldr	r3, [r1, #-2047]
 831              		.loc 1 54 0
 832 054c F0452DE9 		tst	r3, #3
 833              		bne	.L108
 834              		mov	r2, r1
 835 0550 0070A0E1 	.L109:
 836 0554 0150A0E1 		ldr	r3, [r2, #-2047]
 365:EEPROM.c      ****   FLASH_Status Status;
 366:EEPROM.c      **** 
 367:EEPROM.c      ****   // Write the variable virtual address and value in the EEPROM
 368:EEPROM.c      ****   Status = EE_VerifyPageFullWriteVariable(VirtAddress, Data);
 837              	#3
 838 0558 A8FEFFEB 		beq	.L109
 839              	.L108:
 840              		.loc 1 57 0
 369:EEPROM.c      ****   // In case the EEPROM active page is full
 370:EEPROM.c      ****   if (Status == PAGE_FULL)
 841              		r1, #0
 842 055c 080050E3 	.LBE171:
 843 0560 0300000A 	.LBE170:
 844 0564 010050E3 	.LBB172:
 845 0568 0000A013 	.LBB173:
 846 056c 0100A003 		.loc 1 50 0
 847              		mov	r3, #61952
 848 0570 F085BDE8 		.loc 1 51 0
 849              		mov	r2, #1
 850              	.LBE173:
 851              	.LBE172:
 852              	.LBB174:
 853              	.LBB175:
 854              		.loc 1 57 0
 855              		ldr	r0, [r1, #-2035]
 856              	.LVL58:
 857              	.LBE175:
 858 0574 0010E0E3 	.LBE174:
 859 0578 0F3AA0E3 	.LBB176:
 860              	.LBB177:
 861 057c 0120A0E3 		.loc 1 50 0
 862              		str	r3, [r1, #-2031]
 863 0580 EF3701E5 		.loc 1 51 0
 864              		str	r2, [r1, #-2039]
 865 0584 F72701E5 		.loc 1 53 0
 866              		ldr	r3, [r1, #-2047]
 867 0588 FF3711E5 		.loc 1 54 0
 868              		tst	r3, #3
 869 058c 030013E3 		bne	.L110
 870 0590 0300001A 		mov	r2, r1
 871 0594 0120A0E1 	.L111:
 872              		ldr	r3, [r2, #-2047]
 873 0598 FF3712E5 		tst	r3, #3
 874 059c 030013E3 		beq	.L111
 875 05a0 FCFFFF0A 	.L110:
 876              	.LBE177:
 877              	.LBE176:
 878 05a4 0010E0E3 		.loc 1 163 0
 879              		cmp	r0, #6
 880              	.LBB178:
 881              	.LBB179:
 882              		.loc 1 57 0
 883              		mvn	r3, #0
 884 05a8 F23CA0E3 		ldr	r3, [r3, #-2035]
 885              	.LVL59:
 886 05ac 0120A0E3 	.LBE179:
 887              	.LBE178:
 888              		.loc 1 163 0
 889              		moveq	r8, #61952
 890              	.LVL60:
 891              		moveq	sl, #61440
 892 05b0 F30711E5 	.LVL61:
 893              		beq	.L114
 894              		.loc 1 166 0
 895              		cmp	r3, #6
 896              		beq	.L164
 897              	.LVL62:
 898              	.L115:
 899 05b4 EF3701E5 	.LBE169:
 900              	.LBE168:
 901 05b8 F72701E5 	.LBB180:
 902              	.LBB181:
 903 05bc FF3711E5 		.loc 1 39 0
 904              		mov	r0, #0
 905 05c0 030013E3 	.LVL63:
 906 05c4 0300001A 		ldmfd	sp!, {r4, r5, r6, r7, r8, sl, pc}
 907 05c8 0120A0E1 	.LVL64:
 908              	.L164:
 909 05cc FF3712E5 	.LBE181:
 910 05d0 030013E3 	.LBE180:
 911 05d4 FCFFFF0A 	.LBB182:
 912              	.LBB183:
 913              		.loc 1 166 0
 914              		mov	r8, #61440
 915              		mov	sl, #61952
 916 05d8 060050E3 	.L114:
 917              	.LBE183:
 918              	.LBE182:
 919              	.LBB184:
 920 05dc 0030E0E3 	.LBB185:
 921 05e0 F33713E5 		.loc 1 30 0
 922              		mvn	r1, #0
 923              		mov	r3, #8
 924              	.LVL65:
 925              		str	r3, [r1, #-2043]
 926 05e4 F28CA003 		.loc 1 34 0
 927              		mov	r2, #2
 928 05e8 0FAAA003 		.loc 1 33 0
 929              		sub	r3, r3, #3
 930 05ec 0500000A 		.loc 1 32 0
 931              		str	r8, [r1, #-2031]
 932 05f0 060053E3 		.loc 1 33 0
 933 05f4 0100000A 		str	r3, [r1, #-2035]
 934              		.loc 1 34 0
 935              		str	r2, [r1, #-2039]
 936              		.loc 1 35 0
 937              		ldr	r3, [r1, #-2047]
 938              		.loc 1 36 0
 939              		ands	r3, r3, #3
 940              	.LVL66:
 941 05f8 0000A0E3 		bne	.L117
 942              		mov	r2, r1
 943 05fc F085BDE8 	.L118:
 944              		ldr	r3, [r2, #-2047]
 945              	.LVL67:
 946              		ands	r3, r3, #3
 947              	.LVL68:
 948              		beq	.L118
 949              	.L117:
 950              		.loc 1 37 0
 951 0600 0F8AA0E3 		ands	r4, r3, #2
 952 0604 F2ACA0E3 		bne	.L115
 953              		.loc 1 39 0
 954              		mvn	r6, #0
 955              	.LBE185:
 956              	.LBE184:
 957              	.LBE167:
 958              		.loc 1 321 0
 959 0608 0010E0E3 		mov	r1, r5
 960 060c 0830A0E3 		mov	r0, r7
 961              	.LVL69:
 962 0610 FB3701E5 	.LBB186:
 963              	.LBB187:
 964 0614 0220A0E3 	.LBB188:
 965              		.loc 1 39 0
 966 0618 033043E2 		str	r4, [r6, #-2043]
 967              	.LBE188:
 968 061c EF8701E5 	.LBE187:
 969              	.LBE186:
 970 0620 F33701E5 		.loc 1 321 0
 971              		bl	EE_VerifyPageFullWriteVariable
 972 0624 F72701E5 	.LVL70:
 973              	.LVL71:
 974 0628 FF3711E5 	.LBB189:
 975              		.loc 1 322 0
 976 062c 033013E2 		cmp	r0, #1
 977              		movne	r0, r4
 978 0630 0300001A 	.LVL72:
 979 0634 0120A0E1 		ldmnefd	sp!, {r4, r5, r6, r7, r8, sl, pc}
 980              		mov	r5, r4
 981 0638 FF3712E5 	.LVL73:
 982              		mov	r4, r6
 983 063c 033013E2 	.LVL74:
 984              		mov	r6, r0
 985 0640 FCFFFF0A 	.LVL75:
 986              	.L122:
 987              		.loc 1 328 0
 988 0644 024013E2 		cmp	r7, r5
 989 0648 EAFFFF1A 		beq	.L123
 990              	.LBB190:
 991 064c 0060E0E3 	.LBB191:
 992              	.LBB192:
 993              	.LBB193:
 994              	.LBB194:
 995              	.LBB195:
 996 0650 0510A0E1 		.loc 1 50 0
 997 0654 0700A0E1 		mov	r3, #61440
 998              	.LVL76:
 999              		str	r3, [r4, #-2031]
 1000              		.loc 1 51 0
 1001              		str	r6, [r4, #-2039]
 1002              		.loc 1 53 0
 1003 0658 FB4706E5 		ldr	r3, [r4, #-2047]
 1004              		.loc 1 54 0
 1005              		tst	r3, #3
 1006              		bne	.L125
 1007              		mvn	r2, #0
 1008 065c 67FEFFEB 	.L126:
 1009              		ldr	r3, [r2, #-2047]
 1010              		tst	r3, #3
 1011              		beq	.L126
 1012              	.L125:
 1013 0660 010050E3 	.LBE195:
 1014 0664 0400A011 	.LBE194:
 1015              	.LBB196:
 1016 0668 F085BD18 	.LBB197:
 1017 066c 0450A0E1 		.loc 1 50 0
 1018              		mov	r3, #61952
 1019 0670 0640A0E1 	.LBE197:
 1020              	.LBE196:
 1021 0674 0060A0E1 	.LBB198:
 1022              	.LBB199:
 1023              		.loc 1 57 0
 1024              		ldr	r1, [r4, #-2035]
 1025 0678 050057E1 	.LVL77:
 1026 067c 1D00000A 	.LBE199:
 1027              	.LBE198:
 1028              	.LBB200:
 1029              	.LBB201:
 1030              		.loc 1 50 0
 1031              		str	r3, [r4, #-2031]
 1032              		.loc 1 51 0
 1033              		str	r6, [r4, #-2039]
 1034 0680 0F3AA0E3 		.loc 1 53 0
 1035              		ldr	r3, [r4, #-2047]
 1036 0684 EF3704E5 		.loc 1 54 0
 1037              		tst	r3, #3
 1038 0688 F76704E5 		bne	.L127
 1039              		mvn	r2, #0
 1040 068c FF3714E5 	.L128:
 1041              		ldr	r3, [r2, #-2047]
 1042 0690 030013E3 		tst	r3, #3
 1043 0694 0300001A 		beq	.L128
 1044 0698 0020E0E3 	.L127:
 1045              	.LBE201:
 1046 069c FF3712E5 	.LBE200:
 1047 06a0 030013E3 		.loc 1 163 0
 1048 06a4 FCFFFF0A 		cmp	r1, #6
 1049              		moveq	r1, #62720
 1050              	.LVL78:
 1051              		moveq	r0, #62464
 1052              	.LBB202:
 1053              	.LBB203:
 1054              		.loc 1 57 0
 1055 06a8 F23CA0E3 		ldr	r3, [r4, #-2035]
 1056              	.LVL79:
 1057              	.LBE203:
 1058              	.LBE202:
 1059              		.loc 1 163 0
 1060              		addeq	r1, r1, #254
 1061 06ac F31714E5 		addeq	r0, r0, #6
 1062              		beq	.L148
 1063              		.loc 1 166 0
 1064              		cmp	r3, #6
 1065              		beq	.L165
 1066              	.LVL80:
 1067              	.L123:
 1068 06b0 EF3704E5 	.LBE193:
 1069              	.LBE192:
 1070 06b4 F76704E5 	.LBE191:
 1071              	.LBE190:
 1072 06b8 FF3714E5 		.loc 1 326 0
 1073              		add	r5, r5, #1
 1074 06bc 030013E3 		cmp	r5, #4
 1075 06c0 0300001A 		bne	.L122
 1076 06c4 0020E0E3 	.LBB204:
 1077              	.LBB205:
 1078 06c8 FF3712E5 		.loc 1 65 0
 1079 06cc 030013E3 		mvn	r1, #0
 1080 06d0 FCFFFF0A 	.LVL81:
 1081              		mov	r3, #8
 1082              	.LVL82:
 1083              		.loc 1 68 0
 1084              		mov	r2, #5
 1085 06d4 060051E3 		.loc 1 65 0
 1086 06d8 F51CA003 		str	r3, [r1, #-2043]
 1087              		.loc 1 67 0
 1088 06dc 3D0BA003 		str	sl, [r1, #-2031]
 1089              		.loc 1 68 0
 1090              		str	r2, [r1, #-2039]
 1091              		.loc 1 69 0
 1092 06e0 F33714E5 		ldr	r3, [r1, #-2047]
 1093              		.loc 1 70 0
 1094              		ands	r3, r3, #3
 1095              	.LVL83:
 1096              		bne	.L141
 1097 06e4 FE108102 		mov	r2, r1
 1098 06e8 06008002 	.L142:
 1099 06ec 2F00000A 		ldr	r3, [r2, #-2047]
 1100              	.LVL84:
 1101 06f0 060053E3 		ands	r3, r3, #3
 1102 06f4 2900000A 	.LVL85:
 1103              		beq	.L142
 1104              	.L141:
 1105              		.loc 1 74 0
 1106              		tst	r3, #2
 1107              		.loc 1 72 0
 1108              		mov	r2, #0
 1109              		mvn	r3, #0
 1110 06f8 015085E2 	.LVL86:
 1111 06fc 040055E3 		str	r2, [r3, #-2043]
 1112 0700 DCFFFF1A 		.loc 1 74 0
 1113              		bne	.L115
 1114              	.LBE205:
 1115              	.LBE204:
 1116 0704 0010E0E3 	.LBB206:
 1117              	.LBB207:
 1118 0708 0830A0E3 		.loc 1 30 0
 1119              		mvn	r1, #0
 1120              		mov	r3, #8
 1121 070c 0520A0E3 		str	r3, [r1, #-2043]
 1122              		.loc 1 34 0
 1123 0710 FB3701E5 		mov	r2, #2
 1124              		.loc 1 33 0
 1125 0714 EFA701E5 		sub	r3, r3, #2
 1126              		.loc 1 32 0
 1127 0718 F72701E5 		str	r8, [r1, #-2031]
 1128              		.loc 1 33 0
 1129 071c FF3711E5 		str	r3, [r1, #-2035]
 1130              		.loc 1 34 0
 1131 0720 033013E2 		str	r2, [r1, #-2039]
 1132              		.loc 1 35 0
 1133 0724 0300001A 		ldr	r3, [r1, #-2047]
 1134 0728 0120A0E1 		.loc 1 36 0
 1135              		ands	r3, r3, #3
 1136 072c FF3712E5 	.LVL87:
 1137              		bne	.L145
 1138 0730 033013E2 	.L149:
 1139              		mvn	r2, #0
 1140 0734 FCFFFF0A 		ldr	r3, [r2, #-2047]
 1141              	.LVL88:
 1142              		ands	r3, r3, #3
 1143 0738 020013E3 	.LVL89:
 1144              		beq	.L149
 1145 073c 0020A0E3 	.L145:
 1146 0740 0030E0E3 		.loc 1 37 0
 1147              		ands	r2, r3, #2
 1148 0744 FB2703E5 		.loc 1 39 0
 1149              		mvneq	r3, #0
 1150 0748 AAFFFF1A 	.LVL90:
 1151              		moveq	r0, #1
 1152              		streq	r2, [r3, #-2043]
 1153              		.loc 1 37 0
 1154              		ldmeqfd	sp!, {r4, r5, r6, r7, r8, sl, pc}
 1155              		b	.L115
 1156 074c 0010E0E3 	.LVL91:
 1157 0750 0830A0E3 	.L165:
 1158 0754 FB3701E5 	.LBE207:
 1159              	.LBE206:
 1160 0758 0220A0E3 	.LBB208:
 1161              	.LBB209:
 1162 075c 023043E2 	.LBB210:
 1163              	.LBB211:
 1164 0760 EF8701E5 		.loc 1 166 0
 1165              		mov	r1, #63232
 1166 0764 F33701E5 		mov	r0, #62976
 1167              		add	r1, r1, #254
 1168 0768 F72701E5 		add	r0, r0, #6
 1169              	.LVL92:
 1170 076c FF3711E5 	.L148:
 1171              	.LBE211:
 1172 0770 033013E2 	.LBE210:
 1173              	.LBB212:
 1174 0774 0300001A 	.LBB213:
 1175              		.loc 1 50 0
 1176 0778 0020E0E3 		str	r1, [r4, #-2031]
 1177 077c FF3712E5 		.loc 1 51 0
 1178              		str	r6, [r4, #-2039]
 1179 0780 033013E2 		.loc 1 53 0
 1180              		ldr	r3, [r4, #-2047]
 1181 0784 FBFFFF0A 	.LVL93:
 1182              		.loc 1 54 0
 1183              		tst	r3, #3
 1184 0788 022013E2 		bne	.L133
 1185              		mvn	r2, #0
 1186 078c 0030E003 	.L134:
 1187              		ldr	r3, [r2, #-2047]
 1188 0790 0100A003 		tst	r3, #3
 1189 0794 FB270305 		beq	.L134
 1190              	.L133:
 1191 0798 F085BD08 		.loc 1 57 0
 1192 079c 95FFFFEA 		mvn	r2, #0
 1193              		ldr	r3, [r2, #-2035]
 1194              	.LVL94:
 1195              	.LBE213:
 1196              	.LBE212:
 1197              		.loc 1 258 0
 1198              		cmp	r5, r3
 1199              		beq	.L166
 1200              		.loc 1 265 0
 1201              		sub	r1, r1, #4
 1202 07a0 F71CA0E3 		.loc 1 254 0
 1203 07a4 F60CA0E3 		cmp	r0, r1
 1204 07a8 FE1081E2 		bls	.L148
 1205 07ac 060080E2 		b	.L123
 1206              	.L166:
 1207              		.loc 1 260 0
 1208              		sub	r3, r1, #2
 1209              	.LVL95:
 1210              	.LBB214:
 1211              	.LBB215:
 1212              		.loc 1 50 0
 1213 07b0 EF1704E5 		str	r3, [r2, #-2031]
 1214              		.loc 1 51 0
 1215 07b4 F76704E5 		str	r6, [r2, #-2039]
 1216              	.L163:
 1217 07b8 FF3714E5 		.loc 1 53 0
 1218              		ldr	r3, [r2, #-2047]
 1219              	.LVL96:
 1220 07bc 030013E3 		.loc 1 54 0
 1221 07c0 0300001A 		tst	r3, #3
 1222 07c4 0020E0E3 		beq	.L163
 1223              		.loc 1 57 0
 1224 07c8 FF3712E5 		ldr	r2, [r4, #-2035]
 1225 07cc 030013E3 	.LBE215:
 1226 07d0 FCFFFF0A 	.LBE214:
 1227              		.loc 1 260 0
 1228              		ldr	r3, .L167
 1229 07d4 0020E0E3 	.LBE209:
 1230 07d8 F33712E5 	.LBE208:
 1231              	.LBE189:
 1232              		.loc 1 334 0
 1233              		mov	r1, r2
 1234              	.LVL97:
 1235 07dc 030055E1 		mov	r0, r5
 1236 07e0 0300000A 	.LBB216:
 1237              	.LBB217:
 1238 07e4 041041E2 	.LBB218:
 1239              		.loc 1 260 0
 1240 07e8 010050E1 		str	r2, [r3, #0]
 1241 07ec EFFFFF9A 	.LBE218:
 1242 07f0 C0FFFFEA 	.LBE217:
 1243              	.LBE216:
 1244              		.loc 1 334 0
 1245 07f4 023041E2 		bl	EE_VerifyPageFullWriteVariable
 1246              	.LBB219:
 1247              		.loc 1 336 0
 1248              		cmp	r0, #1
 1249              		beq	.L123
 1250 07f8 EF3702E5 		b	.L115
 1251              	.L168:
 1252 07fc F76702E5 		.align	2
 1253              	.L167:
 1254              		.word	DataVar
 1255 0800 FF3712E5 	.LBE219:
 1256              	.LBE166:
 1257              	.LFE12:
 1259 0808 FCFFFF0A 		.global	DataVar
 1260              		.bss
 1261 080c F32714E5 		.align	2
 1264              	DataVar:
 1265 0810 18309FE5 		.space	4
 1266              		.comm	IRQ,4,4
 1267              		.comm	SWI,4,4
 1268              		.comm	FIQ,4,4
 1269              		.comm	UNDEF,4,4
 1270 0814 0210A0E1 		.comm	PABORT,4,4
 1271              		.comm	DABORT,4,4
 1272 0818 0500A0E1 		.section	.debug_frame,"",%progbits
 1273              	.Lframe0:
 1274              		.4byte	.LECIE0-.LSCIE0
 1275              	.LSCIE0:
 1276              		.4byte	0xffffffff
 1277 081c 002083E5 		.byte	0x1
 1278              		.ascii	"\000"
 1279              		.uleb128 0x1
 1280              		.sleb128 -4
 1281              		.byte	0xe
 1282 0820 F6FDFFEB 		.byte	0xc
 1283              		.uleb128 0xd
 1284              		.uleb128 0x0
 1285 0824 010050E3 		.align	2
 1286 0828 B2FFFF0A 	.LECIE0:
 1287 082c 71FFFFEA 	.LSFDE0:
 1288              		.4byte	.LEFDE0-.LASFDE0
 1289              	.LASFDE0:
 1290              		.4byte	.Lframe0
 1291 0830 00000000 		.4byte	.LFB8
 1292              		.4byte	.LFE8-.LFB8
 1293              		.byte	0x4
 1294              		.4byte	.LCFI0-.LFB8
 1295              		.byte	0xe
 1296              		.uleb128 0xc
 1297              		.byte	0x8e
 1298              		.uleb128 0x1
 1299              		.byte	0x85
 1300              		.uleb128 0x2
 1301              		.byte	0x84
 1302 0000 00000000 		.uleb128 0x3
 1303              		.align	2
 1304              	.LEFDE0:
 1305              	.LSFDE2:
 1306              		.4byte	.LEFDE2-.LASFDE2
 1307              	.LASFDE2:
 1308              		.4byte	.Lframe0
 1403              	.LLST3:
DEFINED SYMBOLS
                            *ABS*:00000000 EEPROM.c
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:12     .text:00000000 EE_VerifyPageFullWriteVariable
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:24     .text:00000000 $a
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:304    .text:000001f0 EE_Erased
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:459    .text:0000031c EE_Format
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:601    .text:00000410 EE_Read
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:826    .text:0000054c EE_Write
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:1291   .text:00000830 $d
C:\DOCUME~1\user\LOCALS~1\Temp/ccD6Ngjk.s:1301   .bss:00000000 DataVar
                            *COM*:00000004 IRQ
                            *COM*:00000004 SWI
                            *COM*:00000004 FIQ
                            *COM*:00000004 UNDEF
                            *COM*:00000004 PABORT
                            *COM*:00000004 DABORT

NO UNDEFINED SYMBOLS
