EmbeddedRelated.com
Forums

about IAP

Started by supriya albal April 15, 2010
I am using LPC2148. Interfacing LM35, I am getting temperature readings from ADC. I want to store these readings in the flash. Later I have to retrieve them.I have referred an example code for writing data into FLASH. Given below -

typedef void (*IAP)(unsigned int [],unsigned int []);
IAP iap_bypointer;
void iap_byfunction (unsigned *cmd,unsigned *rslt,unsigned entry);

unsigned command[5];
unsigned result[5];
char Ram_Arry[] = "Hello World";
char *Ram_Pointer;
void main (void) __arm //Compile this in ARM instruction set
{
unsigned char index;

iap_bypointer = (IAP) 0x7FFFFFF1; //set IAP entry address in function pointer

Ram_Pointer = 0x40000100; //Set pointer to RAM
for (index = 0; index<0x0B; index++) //Copy data to be written to flash into the RAM
{
*Ram_Pointer = Ram_Arry[index];
Ram_Pointer++;
}

command[0] = 0x36; //command code for "Read part ID"
iap_byfunction(command,result,0x7FFFFFF0); //Call IAP functions by function method
command[0] = 50; //Prepare sector five for a write operayion
command[1] = 5;
command[2] = 5;
iap_bypointer(command,result);

command[0] = 52; //erase sector five
command[1] = 5;
command[2] = 5;
command[3] = 12000; //Cclk == 12Mhz Pll is disabled in startup code
iap_bypointer(command,result);

command[0] = 50; //Prepare sector five for a write operayion
command[1] = 5;
command[2] = 5;
iap_bypointer(command,result);

command[0] = 51; //write 512 bytes from address 0x40000100
command[1] = 0x0000A000; //to 0x0000A000 in flash memory;
command[2] = 0x40000100;
command[3] = 512;
command[4] = 12000; // see erase comment above
iap_byfunction(command,result,0x7FFFFFF0);

while(1)
{
;
}

}

void iap_byfunction (unsigned *cmd,unsigned *rslt,unsigned entry) __thumb //compile this in Thumb instruction set
{
__asm { mov r15,r2; } //move entry address into PC

}

Is it right?
If I want to retrieve data from flash, how should I do it? I tried using pointers but could not do it.
Sorry my fundas are uncleared about IAP. I am not aware of assembly for LPC2148.
Please help me!

An Engineer's Guide to the LPC2100 Series

Hi

The IAP interface looks like the standard stuff. Once written to FLASH the data can be read as any other data stored in FLASH, by addressing it by its memory location (pointer).

Check the following for more details and restricts of using the FLASH in the LPC devices:

http://www.utasker.com/forum/index.php?topic6.0

Regards

Mark

http://www.uTasker.com

--- In l..., supriya albal wrote:
>
> I am using LPC2148. Interfacing LM35, I am getting temperature readings from ADC. I want to store these readings in the flash. Later I have to retrieve them.I have referred an example code for writing data into FLASH. Given below -
>
> typedef void (*IAP)(unsigned int [],unsigned int []);
> IAP iap_bypointer;
> void iap_byfunction (unsigned *cmd,unsigned *rslt,unsigned entry);
>
> unsigned command[5];
> unsigned result[5];
> char Ram_Arry[] = "Hello World";
> char *Ram_Pointer;
> void main (void) __arm //Compile this in ARM instruction set
> {
> unsigned char index;
>
> iap_bypointer = (IAP) 0x7FFFFFF1; //set IAP entry address in function pointer
>
> Ram_Pointer = 0x40000100; //Set pointer to RAM
> for (index = 0; index<0x0B; index++) //Copy data to be written to flash into the RAM
> {
> *Ram_Pointer = Ram_Arry[index];
> Ram_Pointer++;
> }
>
> command[0] = 0x36; //command code for "Read part ID"
> iap_byfunction(command,result,0x7FFFFFF0); //Call IAP functions by function method
> command[0] = 50; //Prepare sector five for a write operayion
> command[1] = 5;
> command[2] = 5;
> iap_bypointer(command,result);
>
> command[0] = 52; //erase sector five
> command[1] = 5;
> command[2] = 5;
> command[3] = 12000; //Cclk == 12Mhz Pll is disabled in startup code
> iap_bypointer(command,result);
>
> command[0] = 50; //Prepare sector five for a write operayion
> command[1] = 5;
> command[2] = 5;
> iap_bypointer(command,result);
>
> command[0] = 51; //write 512 bytes from address 0x40000100
> command[1] = 0x0000A000; //to 0x0000A000 in flash memory;
> command[2] = 0x40000100;
> command[3] = 512;
> command[4] = 12000; // see erase comment above
> iap_byfunction(command,result,0x7FFFFFF0);
>
> while(1)
> {
> ;
> }
>
> }
>
> void iap_byfunction (unsigned *cmd,unsigned *rslt,unsigned entry) __thumb //compile this in Thumb instruction set
> {
> __asm { mov r15,r2; } //move entry address into PC
>
> }
>
> Is it right?
> If I want to retrieve data from flash, how should I do it? I tried using pointers but could not do it.
> Sorry my fundas are uncleared about IAP. I am not aware of assembly for LPC2148.
> Please help me!
>