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