2011-05-15 11:27:49 +00:00
|
|
|
/**************************************************************************/
|
|
|
|
/*!
|
|
|
|
@file iap.c
|
|
|
|
Source: http://knowledgebase.nxp.com/showthread.php?t=1594
|
|
|
|
*/
|
|
|
|
/**************************************************************************/
|
|
|
|
#include "iap.h"
|
|
|
|
|
|
|
|
IAP_return_t iap_return;
|
|
|
|
|
|
|
|
#define IAP_ADDRESS 0x1FFF1FF1
|
|
|
|
uint32_t param_table[5];
|
|
|
|
|
|
|
|
/**************************************************************************/
|
|
|
|
/*!
|
|
|
|
Sends the IAP command and stores the result
|
|
|
|
*/
|
|
|
|
/**************************************************************************/
|
|
|
|
void iap_entry(uint32_t param_tab[], uint32_t result_tab[])
|
|
|
|
{
|
|
|
|
void (*iap)(uint32_t[], uint32_t[]);
|
|
|
|
iap = (void (*)(uint32_t[], uint32_t[]))IAP_ADDRESS;
|
|
|
|
iap(param_tab,result_tab);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************/
|
|
|
|
/*!
|
|
|
|
Returns the CPU's unique 128-bit serial number (4 words long)
|
|
|
|
|
|
|
|
@section Example
|
|
|
|
|
|
|
|
@code
|
|
|
|
#include "core/iap/iap.h"
|
|
|
|
|
|
|
|
IAP_return_t iap_return;
|
|
|
|
iap_return = iapReadSerialNumber();
|
|
|
|
|
|
|
|
if (iap_return.ReturnCode == 0)
|
|
|
|
{
|
|
|
|
printf("Serial Number: %08X %08X %08X %08X %s",
|
|
|
|
iap_return.Result[0],
|
|
|
|
iap_return.Result[1],
|
|
|
|
iap_return.Result[2],
|
|
|
|
iap_return.Result[3],
|
|
|
|
CFG_PRINTF_NEWLINE);
|
|
|
|
}
|
|
|
|
@endcode
|
|
|
|
*/
|
|
|
|
/**************************************************************************/
|
|
|
|
IAP_return_t iapReadSerialNumber(void)
|
|
|
|
{
|
|
|
|
// ToDo: Why does IAP sometime cause the application to halt when read???
|
|
|
|
param_table[0] = IAP_CMD_READUID;
|
|
|
|
iap_entry(param_table,(uint32_t*)(&iap_return));
|
|
|
|
return iap_return;
|
|
|
|
}
|
|
|
|
|