/**************************************************************************/ /*! @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; }