UM10850
All information provided in this document is subject to legal disclaimers.
© NXP B.V. 2016. All rights reserved.
User manual
Rev. 2.4 — 13 September 2016
433 of 464
NXP Semiconductors
UM10850
Chapter 31: LPC5410x Flash API
31.6 IAP commands
For in application programming the IAP routine should be called with a word pointer in
register r0 pointing to memory (RAM) containing command code and parameters. The
result of the IAP command is returned in the result table pointed to by register r1. The user
can reuse the command table for result by passing the same pointer in registers r0 and r1.
The parameter table should be big enough to hold all the results in case the number of
results are more than number of parameters. Parameter passing is illustrated in the
.
The number of parameters and results vary according to the IAP command. The
maximum number of parameters is 5, passed to the "Copy RAM to FLASH" command.
The maximum number of results is 5, returned by the "ReadUID" command. The
command handler sends the status code INVALID_COMMAND when an undefined
command is received. The IAP routine resides at 0x0300 0204 location and it is thumb
code, therefore called as 0x03000205 by the Cortex-M4 to insure Thumb operation.
The IAP function could be called in the following way using C:
Define the IAP location entry point. Since the least significant bit of the IAP location is set
there will be a change to Thumb instruction set if called by the Cortex-M4.
#define IAP_LOCATION 0x03000205
Define data structure or pointers to pass IAP command table and result table to the IAP
function:
unsigned int command_param[5];
unsigned int status_result[5];
or
unsigned int * command_param;
unsigned int * status_result;
command_param = (unsigned int *) 0x...
status_result =(unsigned int *) 0x...
Define pointer to function type, which takes two parameters and returns void. Note the IAP
returns the result with the base address of the table residing in R1.
typedef void (*IAP)(unsigned int [],unsigned int[]);
IAP iap_entry;
Setting the function pointer:
#define IAP_LOCATION 0x0300 0204
iap_entry=(IAP) IAP_LOCATION;
To call the IAP use the following statement.
iap_entry (command_param,status_result);