對于在應用編程( IAP) 來說,應當通過寄存器 r0 中的字指針指向包含命令代碼和參數(shù)的存儲器(RAM)來調(diào)用 IAP 程序。 IAP 命令的結(jié)果返回到寄存器 r1 所指向的結(jié)果表( resulttable)。用戶可通過傳遞寄存器 r0 和 r1 中的相同指針來重新使用命令表以獲取結(jié)果。參數(shù)表應當大到足夠存放所有的結(jié)果以防結(jié)果的數(shù)目大于參數(shù)的數(shù)目。參數(shù)傳遞的過程如下圖所示。
參數(shù)和結(jié)果的數(shù)目根據(jù) IAP 命令而有所不同。參數(shù)的最大數(shù)目為 5, 被傳遞給“將RAM 內(nèi)容復制到 Flash”命令。結(jié)果的最大數(shù)目為 2,由“扇區(qū)查空”命令返回。命令處理程序在接收到一個未定義的命令時發(fā)送狀態(tài)代碼 INVALID_COMMAND。 IAP 程序是 thumb代碼,位于地址 0x7FFF FFF0 處。
IAP 功能可用下面的 C 代碼來調(diào)用。定義 IAP 程序的入口地址。由于 IAP 地址的第 0 位是 1,因此,當程序計數(shù)器轉(zhuǎn)移到該地址時會引起 Thumb 指令集的變化。下面附上IAP函數(shù)代碼:
/**************************************************
名稱:宏定義(Flash操作)
**************************************************/
#defineIAP_LOCATION0x7FFFFFF1//定義IAP程序的入口地址
#defineIapGetAddr(addr)(volatileuint16*)(0x80000000|(addr