?? rack_iap.h
字號(hào):
#define Rack_IAP_Def
/* 移值IAP演示程序 劉國(guó)兵 2006-7-4 */
/*
在IAP程序中,應(yīng)注意以下問(wèn)題
1. IAP服務(wù)代碼是Thumb指令,所以調(diào)用時(shí)要進(jìn)行處理器狀態(tài)切換或使用BX指令調(diào)用,若使用C程序直接調(diào)用,請(qǐng)?jiān)O(shè)置編譯參數(shù)-apcs /interwork
2. IAP占用片內(nèi)RAM的最高端的32字節(jié)空間,如果用戶(hù)要使用IAP功能,那么請(qǐng)保留這部分RAM
(此項(xiàng)目中我已修改"Startup.s"文件 " MSR CPSR_c, #0xdf
LDR SP, =StackUsr-32")"
3. 調(diào)用IAP功能前,要關(guān)閉PLL、MAM部件及所有中斷
*/
//#define IAP_ENTER_ADR 0x7FFFFFF1 // IAP入口地址定義
/* 定義IAP命令字 */
// 命令 參數(shù)
#define IAP_SELECTOR 50 // 選擇扇區(qū) 【起始扇區(qū)號(hào)、結(jié)束扇區(qū)號(hào)】
#define IAP_RAMTOFLASH 51 // 拷貝數(shù)據(jù) 【FLASH目標(biāo)地址、RAM源地址、寫(xiě)入字節(jié)數(shù)、系統(tǒng)時(shí)鐘頻率】
#define IAP_ERASESECTOR 52 // 擦除扇區(qū) 【起始扇區(qū)號(hào)、結(jié)束扇區(qū)號(hào)、系統(tǒng)時(shí)鐘頻率】
#define IAP_BLANKCHK 53 // 查空扇區(qū) 【起始扇區(qū)號(hào)、結(jié)束扇區(qū)號(hào)】
#define IAP_READPARTID 54 // 讀器件ID 【無(wú)】
#define IAP_BOOTCODEID 55 // 讀Boot版本號(hào) 【無(wú)】
#define IAP_COMPARE 56 // 比較命令 【Flash起始地址、RAM起始地址、需要比較的字節(jié)數(shù)】
/* 定義IAP返回狀態(tài)字 */
#define CMD_SUCCESS 0
#define INVALID_COMMAND 1
#define SRC_ADDR_ERROR 2
#define DST_ADDR_ERROR 3
#define SRC_ADDR_NOT_MAPPED 4
#define DST_ADDR_NOT_MAPPED 5
#define COUNT_ERROR 6
#define INVALID_SECTOR 7
#define SECTOR_NOT_BLANK 8
#define SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 9
#define COMPARE_ERROR 10
#define BUSY 11
//IAP address define
#define IAP_Sector_Start 7
#define IAP_Sector_End 7
#define IAP_RAM_Start 0x40000500
#define IAP_Flash_Start 0x00007000
#define IAP_Number 256
/* 定義CCLK值大小,單位為KHz */
#define IAP_FCCLK (Fosc/1000)
/* 定義函數(shù)指針 */
//extern void (*IAP_Entry)(uint32 param_tab[], uint32 result_tab[]);
extern uint32 paramin[8]; // IAP入口參數(shù)緩沖區(qū)
extern uint32 paramout[8]; // IAP出口參數(shù)緩沖區(qū)
/*
*******************************************************************************************************
** 函數(shù)名稱(chēng):IAP_Write_SADDR()
** 函數(shù)功能:IAP函數(shù)調(diào)用,對(duì)flash進(jìn)行program。
** 因LPC22xx與LPC2132扇區(qū)不同,其程序中 IAP_MARK1 與 IAP_MARK2處做適當(dāng)修改
** 注:LPC2103 flash扇區(qū)分布
** 共8個(gè)扇區(qū),每扇區(qū)4KB
** 如:
** 扇區(qū)號(hào) 0 0x0000 0000 -> 0x0000 0fff
** 扇區(qū)號(hào) 7 0x0000 7000 -> 0x0000 7fff
** LPC22xx每扇區(qū)8KB(注:當(dāng) flash size >= 256KB 時(shí),扇區(qū)大小不一至)
*******************************************************************************************************
*/
extern uint8 IAP_Write_SADDR(void);
/*
*********************************************************************************************************
** 函數(shù)名稱(chēng):SelSector()
** 函數(shù)功能:IAP操作扇區(qū)選擇,命令代碼50。
** 入口參數(shù):sec1 起始扇區(qū)
** sec2 終止扇區(qū)
** 出口參數(shù):IAP操作狀態(tài)碼
** IAP返回值(paramout緩沖區(qū))
*******************************************************************************************************
*/
extern uint32 SelSector(uint8 sec1, uint8 sec2);
/*
*******************************************************************************************************
** 函數(shù)名稱(chēng):RamToFlash()
** 函數(shù)功能:復(fù)制RAM的數(shù)據(jù)到FLASH,命令代碼51。
** 入口參數(shù):dst 目標(biāo)地址,即FLASH起始地址。以512字節(jié)為分界
** src 源地址,即RAM地址。地址必須字對(duì)齊
** no 復(fù)制字節(jié)個(gè)數(shù),為512/1024/4096/8192
** 出口參數(shù):IAP操作狀態(tài)碼
** IAP返回值(paramout緩沖區(qū))
*******************************************************************************************************
*/
extern uint32 RamToFlash(uint32 dst, uint32 src, uint32 no);
/*
*******************************************************************************************************
** 函數(shù)名稱(chēng):EraseSector()
** 函數(shù)功能:扇區(qū)擦除,命令代碼52。
** 入口參數(shù):sec1 起始扇區(qū)
** sec2 終止扇區(qū)
** 出口參數(shù):IAP操作狀態(tài)碼
** IAP返回值(paramout緩沖區(qū))
*******************************************************************************************************
*/
extern uint32 EraseSector(uint8 sec1, uint8 sec2);
/*
*******************************************************************************************************
** 函數(shù)名稱(chēng):BlankCHK()
** 函數(shù)功能:扇區(qū)查空,命令代碼53。
** 入口參數(shù):sec1 起始扇區(qū)
** sec2 終止扇區(qū)
** 出口參數(shù):IAP操作狀態(tài)碼
** IAP返回值(paramout緩沖區(qū))
*******************************************************************************************************
*/
extern uint32 BlankCHK(uint8 sec1, uint8 sec2);
/*
*******************************************************************************************************
** 函數(shù)名稱(chēng):ReadParID()
** 函數(shù)功能:扇區(qū)查空,命令代碼53。
** 入口參數(shù):無(wú)
** 出口參數(shù):IAP操作狀態(tài)碼
** IAP返回值(paramout緩沖區(qū))
*******************************************************************************************************
*/
extern uint32 ReadParID(void);
/*
*******************************************************************************************************
** 函數(shù)名稱(chēng):BootCodeID()
** 函數(shù)功能:讀取boot代碼版本號(hào),命令代碼55。
** 入口參數(shù):無(wú)
** 出口參數(shù):IAP操作狀態(tài)碼
** IAP返回值(paramout緩沖區(qū))
*******************************************************************************************************
*/
extern uint32 BootCodeID(void);
/*
*******************************************************************************************************
** 函數(shù)名稱(chēng):Compare()
** 函數(shù)功能:校驗(yàn)數(shù)據(jù),命令代碼56。
** 入口參數(shù):dst 目標(biāo)地址,即RAM/FLASH起始地址。地址必須字對(duì)齊
** src 源地址,即FLASH/RAM地址。地址必須字對(duì)齊
** no 復(fù)制字節(jié)個(gè)數(shù),必須能被4整除
** 出口參數(shù):IAP操作狀態(tài)碼
** IAP返回值(paramout緩沖區(qū))
*******************************************************************************************************
*/
extern uint32 Compare(uint32 dst, uint32 src, uint32 no);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -