亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rack_iap.c

?? 關于遠程升級
?? C
字號:
/* 移值IAP演示程序  劉國兵 2006-7-4 */
/*
在IAP程序中,應注意以下問題
    1. IAP服務代碼是Thumb指令,所以調用時要進行處理器狀態切換或使用BX指令調用,若使用C程序直接調用,請設置編譯參數-apcs /interwork
    2. IAP占用片內RAM的最高端的32字節空間,如果用戶要使用IAP功能,那么請保留這部分RAM 
      (此項目中我已修改"Startup.s"文件 " MSR     CPSR_c, #0xdf  
                                          LDR     SP, =StackUsr-32")"
    3. 調用IAP功能前,要關閉PLL、MAM部件及所有中斷
*/

#include  "Rack_PrjHead.h"


/* 定義函數指針 */
//void (*IAP_Entry)(uint32 param_tab[], uint32 result_tab[]);

uint32  paramin[8];                         // IAP入口參數緩沖區
uint32  paramout[8];                        // IAP出口參數緩沖區

    
//    IAP_Entry = (void(*)())IAP_ENTER_ADR;           // 初始化函數指針IAP_Entry
    
/*
*********************************************************************************************************
** 函數名稱:SelSector()
** 函數功能:IAP操作扇區選擇,命令代碼50。
** 入口參數:sec1        起始扇區
**           sec2        終止扇區
** 出口參數:IAP操作狀態碼
**           IAP返回值(paramout緩沖區)
*******************************************************************************************************
*/
uint32  SelSector(uint8 sec1, uint8 sec2)
{  
    paramin[0] = IAP_SELECTOR;               // 設置命令字
    paramin[1] = sec1;                       // 設置參數
    paramin[2] = sec2;
    iap_entry(paramin, paramout);         	// 調用IAP服務程序
   
    return(paramout[0]);                     // 返回狀態碼
}

/*
*******************************************************************************************************
** 函數名稱:RamToFlash()
** 函數功能:復制RAM的數據到FLASH,命令代碼51。
** 入口參數:dst        目標地址,即FLASH起始地址。以512字節為分界
**           src        源地址,即RAM地址。地址必須字對齊
**           no         復制字節個數,為512/1024/4096/8192
** 出口參數:IAP操作狀態碼
**           IAP返回值(paramout緩沖區)
*******************************************************************************************************
*/
uint32  RamToFlash(uint32 dst, uint32 src, uint32 no)
{  
    paramin[0] = IAP_RAMTOFLASH;             // 設置命令字
    paramin[1] = dst;                        // 設置參數
    paramin[2] = src;
    paramin[3] = no;
    paramin[4] = IAP_FCCLK;
    iap_entry(paramin, paramout);         	// 調用IAP服務程序
    
    return(paramout[0]);                     // 返回狀態碼
}

/*
*******************************************************************************************************
** 函數名稱:EraseSector()
** 函數功能:扇區擦除,命令代碼52。
** 入口參數:sec1       起始扇區
**           sec2       終止扇區
** 出口參數:IAP操作狀態碼
**           IAP返回值(paramout緩沖區)
*******************************************************************************************************
*/
uint32  EraseSector(uint8 sec1, uint8 sec2)
{  
    paramin[0] = IAP_ERASESECTOR;            // 設置命令字
    paramin[1] = sec1;                       // 設置參數
    paramin[2] = sec2;
    paramin[3] = IAP_FCCLK;
    iap_entry(paramin, paramout);         	// 調用IAP服務程序
   
    return(paramout[0]);                     // 返回狀態碼
}

/*
*******************************************************************************************************
** 函數名稱:BlankCHK()
** 函數功能:扇區查空,命令代碼53。
** 入口參數:sec1       起始扇區
**           sec2       終止扇區
** 出口參數:IAP操作狀態碼
**           IAP返回值(paramout緩沖區)
*******************************************************************************************************
*/
uint32  BlankCHK(uint8 sec1, uint8 sec2)
{  
    paramin[0] = IAP_BLANKCHK;               // 設置命令字
    paramin[1] = sec1;                       // 設置參數
    paramin[2] = sec2;
    iap_entry(paramin, paramout);         	// 調用IAP服務程序

    return(paramout[0]);                     // 返回狀態碼
}

/*
*******************************************************************************************************
** 函數名稱:ReadParID()
** 函數功能:扇區查空,命令代碼53。
** 入口參數:無
** 出口參數:IAP操作狀態碼
**           IAP返回值(paramout緩沖區)
*******************************************************************************************************
*/
uint32  ReadParID(void)
{  
    paramin[0] = IAP_READPARTID;             // 設置命令字
    iap_entry(paramin, paramout);         	// 調用IAP服務程序

    return(paramout[0]);                     // 返回狀態碼
}

/*
*******************************************************************************************************
** 函數名稱:BootCodeID()
** 函數功能:讀取boot代碼版本號,命令代碼55。
** 入口參數:無
** 出口參數:IAP操作狀態碼
**           IAP返回值(paramout緩沖區)
*******************************************************************************************************
*/
uint32  BootCodeID(void)
{  
    paramin[0] = IAP_BOOTCODEID;             // 設置命令字
    iap_entry(paramin, paramout);         	// 調用IAP服務程序

    return(paramout[0]);                     // 返回狀態碼
}

/*
*******************************************************************************************************
** 函數名稱:Compare()
** 函數功能:校驗數據,命令代碼56。
** 入口參數:dst        目標地址,即RAM/FLASH起始地址。地址必須字對齊
**           src        源地址,即FLASH/RAM地址。地址必須字對齊
**           no         復制字節個數,必須能被4整除
** 出口參數:IAP操作狀態碼
**           IAP返回值(paramout緩沖區)
*******************************************************************************************************
*/
uint32  Compare(uint32 dst, uint32 src, uint32 no)
{  
    paramin[0] = IAP_COMPARE;                // 設置命令字
    paramin[1] = dst;                        // 設置參數
    paramin[2] = src;
    paramin[3] = no;
    iap_entry(paramin, paramout);         	// 調用IAP服務程序

    return(paramout[0]);                     // 返回狀態碼
}

/*
*******************************************************************************************************
** 函數名稱:main()
** 函數功能:IAP函數調用,演示程序
** 因LPC22xx與LPC2132扇區不同,其程序中 IAP_MARK1 與 IAP_MARK2處做適當修改
** 注:LPC2132 flash扇區分布
**      共8個扇區,每扇區4KB
**      如:
**          扇區號 0  0x0000 0000 -> 0x0000 0fff
**          扇區號 7  0x0000 7000 -> 0x0000 7fff
**     LPC22xx每扇區8KB(注:當 flash size >= 256KB 時,扇區大小不一至)
*******************************************************************************************************
*/
uint8 Rack_IAP_Ready(void)
{  
    uint8 err;
    //uint32 i;
    
    MAMCR = 0;         // 關閉MAM
    PLLCON = 0;        // 關閉PLL
    PLLFEED = 0xaa;
    PLLFEED = 0x55;
   
    SelSector(IAP_Sector_Start,IAP_Sector_End);                                 // 選擇扇區
    EraseSector(IAP_Sector_Start,IAP_Sector_End);                               // 擦除扇區
    BlankCHK(IAP_Sector_Start,IAP_Sector_End) ;                                 // 查空扇區
   
    SelSector(IAP_Sector_Start,IAP_Sector_End);                                 // 選擇扇區
    
//IAP_MARK1 用此句代替下一句可實現用現有開發板實驗
    //RamToFlash(0x00002000, 0x40001000, 512);        // 寫數據到扇區1 (LPC2214)
    RamToFlash(IAP_RAM_Start, IAP_Flash_Start, IAP_Number);          // 寫數據到扇區1 (LPC2132)

//IAP_MARK2 用此句代替下一句可實現用現有開發板實驗
    //err = Compare(0x00002000, 0x40001000, 512);     // 比較數據      (LPC2214)
    err = Compare(IAP_RAM_Start, IAP_Flash_Start, IAP_Number);       // 比較數據      (LPC2132)
    
//    if(err == CMD_SUCCESS)
//    {	/* 成功,蜂鳴一聲 */
//        IO0CLR = BEEP;
//        for (i=0; i<0x3FFFFF; i++);
//        IO0SET = BEEP;
//    }
//    else
//    {	/* 失敗,一直蜂鳴 */
//        IO0CLR = BEEP;
//    }
   
    while(1);
    return(0);
}


/*
*******************************************************************************************************
** 函數名稱:IAP_Write_SADDR()
** 函數功能:IAP函數調用,對flash進行program。
** 因LPC22xx與LPC2132扇區不同,其程序中 IAP_MARK1 與 IAP_MARK2處做適當修改
** 注:LPC2103 flash扇區分布
**      共8個扇區,每扇區4KB
**      如:
**          扇區號 0  0x0000 0000 -> 0x0000 0fff
**          扇區號 7  0x0000 7000 -> 0x0000 7fff
**     LPC22xx每扇區8KB(注:當 flash size >= 256KB 時,扇區大小不一至)
*******************************************************************************************************
*/
uint8 IAP_Write_SADDR(void)
{
	uint8 err;
	uint32 VICIntEnable_bak;
	
	VICIntEnable_bak = VICIntEnable;		//屏蔽所有中斷
	VICIntEnClr = 0xffff;
	
    MAMCR = 0;         // 關閉MAM
    PLLCON = 0;        // 關閉PLL
    PLLFEED = 0xaa;
    PLLFEED = 0x55;
	
    SelSector(IAP_Sector_Start,IAP_Sector_End);                                 // 選擇扇區
    EraseSector(IAP_Sector_Start,IAP_Sector_End);                               // 擦除扇區
    BlankCHK(IAP_Sector_Start,IAP_Sector_End) ;                                 // 查空扇區
   
    SelSector(IAP_Sector_Start,IAP_Sector_End);                                 // 選擇扇區
    
//IAP_MARK1 用此句代替下一句可實現用現有開發板實驗
    //RamToFlash(0x00002000, 0x40001000, 512);        // 寫數據到扇區1 (LPC2214)
    RamToFlash(IAP_Flash_Start, IAP_RAM_Start, IAP_Number);          // 寫數據到扇區 (LPC2132)

//IAP_MARK2 用此句代替下一句可實現用現有開發板實驗
    //err = Compare(0x00002000, 0x40001000, 512);     // 比較數據      (LPC2214)
    err = Compare(IAP_Flash_Start, IAP_RAM_Start, IAP_Number);       // 比較數據      (LPC2132)
    
    //重新開啟MAM and PLL
    // 設置系統各部分時鐘 
	// Set system timers for each component 
	    PLLCON = 1;
	#if (Fpclk / (Fcclk / 4)) == 1
	    VPBDIV = 0;
	#endif
	#if (Fpclk / (Fcclk / 4)) == 2
	    VPBDIV = 2;
	#endif
	#if (Fpclk / (Fcclk / 4)) == 4
	    VPBDIV = 1;
	#endif

	#if (Fcco / Fcclk) == 2	
	    PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
	#endif
	#if (Fcco / Fcclk) == 4
	    PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
	#endif
	#if (Fcco / Fcclk) == 8
	    PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
	#endif
	#if (Fcco / Fcclk) == 16
	    PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
	#endif
	    PLLFEED = 0xaa;
	    PLLFEED = 0x55;
	    while((PLLSTAT & (1 << 10)) == 0);
	    PLLCON = 3;
	    PLLFEED = 0xaa;
	    PLLFEED = 0x55;
	    
	    /* 設置存儲器加速模塊 */
	    /* Set memory accelerater module*/
	    MAMCR = 0;
	#if Fcclk < 20000000
	    MAMTIM = 1;
	#else
	#if Fcclk < 40000000
	    MAMTIM = 2;
	#else
	    MAMTIM = 3;
	#endif
	#endif
	    MAMCR = 2; 
	    
	VICIntEnable = VICIntEnable_bak;
	    
	return(err);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩亚洲一区| 日韩激情中文字幕| 国产91高潮流白浆在线麻豆| 91在线观看下载| 欧美xxxxx牲另类人与| 老汉av免费一区二区三区| 日韩欧美久久一区| 成人污污视频在线观看| 欧美三级韩国三级日本一级| 日韩精品电影在线| 亚洲精品一区二区三区蜜桃下载 | 91在线一区二区| 亚洲欧美视频在线观看| av在线综合网| 中文字幕中文字幕中文字幕亚洲无线| 成人午夜免费av| 亚洲午夜羞羞片| 久久综合国产精品| 色综合久久久久综合99| 亚洲一本大道在线| 99精品在线免费| 午夜av一区二区| 欧美tk—视频vk| 97超碰欧美中文字幕| 国产成人精品免费在线| 成人18视频日本| 亚洲国产日韩在线一区模特| 精品少妇一区二区三区在线播放 | 91在线高清观看| 亚洲超丰满肉感bbw| 欧美电影精品一区二区| 91亚洲永久精品| 国产精品美女视频| 欧美日韩国产综合一区二区| 国内精品久久久久影院色 | 美女视频免费一区| 久久精品亚洲精品国产欧美kt∨| 97精品久久久久中文字幕 | 日韩高清在线电影| 日本一区二区三级电影在线观看 | 图片区小说区区亚洲影院| 久久影音资源网| 欧美亚洲综合色| 懂色av一区二区夜夜嗨| 最新国产精品久久精品| 97久久精品人人做人人爽| 久久国产欧美日韩精品| 亚洲午夜久久久久久久久久久| 精品国产青草久久久久福利| 国产精品2024| 亚洲欧美乱综合| 久久综合色婷婷| 欧美一级片在线看| 欧美综合在线视频| 国产91在线|亚洲| 亚洲品质自拍视频| 久久一夜天堂av一区二区三区| 欧美午夜电影网| 色婷婷亚洲综合| 久久久精品蜜桃| 亚洲天堂精品在线观看| 久久一日本道色综合| 欧美日韩不卡一区| 欧美艳星brazzers| 91啪亚洲精品| www.在线成人| 亚洲超丰满肉感bbw| 亚洲精品免费一二三区| 国产精品二三区| 亚洲国产精品精华液2区45| 欧美三级午夜理伦三级中视频| 天天综合日日夜夜精品| 一级精品视频在线观看宜春院| 亚洲国产成人午夜在线一区 | 久久美女高清视频| av在线不卡网| av中文一区二区三区| 99精品在线观看视频| 99re这里只有精品6| 成人激情免费网站| 国产91综合网| 国产精品一区不卡| 亚洲一线二线三线久久久| 亚洲欧美日韩久久精品| 亚洲女厕所小便bbb| 亚洲精品菠萝久久久久久久| 亚洲精品欧美综合四区| 成人黄色免费短视频| 久久久亚洲午夜电影| 久久这里只有精品首页| www久久精品| 久久精品欧美日韩精品| 欧美激情在线观看视频免费| 国模少妇一区二区三区| 欧美亚洲一区二区在线观看| 色综合久久综合网欧美综合网 | 亚洲成av人片在线观看| 成人手机在线视频| 成人永久看片免费视频天堂| thepron国产精品| 欧美做爰猛烈大尺度电影无法无天| 91国偷自产一区二区开放时间| 一区二区三区免费观看| 国产成人精品免费看| jlzzjlzz欧美大全| 欧美日韩aaaaaa| 久久综合色天天久久综合图片| 中文字幕一区二区三区在线观看| 亚洲精品视频在线观看网站| 五月综合激情婷婷六月色窝| 久久精品国产久精国产| 日本色综合中文字幕| 激情久久五月天| 色乱码一区二区三区88| 日韩一区二区三区电影 | 亚洲成人动漫av| 日韩欧美在线影院| 国产精品青草综合久久久久99| 亚洲美腿欧美偷拍| 美国十次了思思久久精品导航| 成人一区二区三区视频| 亚洲国产精品一区二区久久恐怖片| 国产91对白在线观看九色| 欧美色手机在线观看| 欧美精品一区二区三区在线| 日韩理论片网站| 国产又黄又大久久| 欧美日韩国产影片| 91麻豆.com| www成人在线观看| 亚洲国产欧美在线人成| 国产精品自拍在线| 欧美日韩中文一区| 国产精品久久久久桃色tv| 久久狠狠亚洲综合| 国产一区在线观看麻豆| 欧美色手机在线观看| 国产精品久久久久毛片软件| 老司机精品视频导航| 欧美三级韩国三级日本三斤| 日本一区二区三区在线不卡 | 久久久99久久精品欧美| 午夜精品久久久久久久99水蜜桃| eeuss国产一区二区三区| 精品国产网站在线观看| 日韩中文字幕91| 成人av动漫网站| 欧日韩精品视频| 亚洲欧洲韩国日本视频| 国产一区二区精品在线观看| 91精品国产欧美一区二区| 一区二区久久久| 日韩欧美电影一区| 日本韩国一区二区三区| 国产精品久久久久久一区二区三区 | 婷婷国产在线综合| 91麻豆自制传媒国产之光| 中文字幕欧美区| 国产精品一区免费在线观看| 欧美一二区视频| 国产精品久久99| 粗大黑人巨茎大战欧美成人| 久久精品在线免费观看| 精品一区二区免费在线观看| 欧美大片顶级少妇| 国产在线播放一区三区四| 日韩欧美资源站| 专区另类欧美日韩| 99麻豆久久久国产精品免费优播| 国产欧美日韩视频一区二区| 国产传媒久久文化传媒| 国产午夜亚洲精品羞羞网站| 国产精品白丝jk白祙喷水网站| 久久品道一品道久久精品| 亚洲欧美日韩一区二区三区在线观看 | 精品国产乱码久久久久久蜜臀 | 日韩电影一二三区| 亚洲h精品动漫在线观看| 欧美午夜电影网| 免费视频一区二区| 欧美一区二区免费视频| 精品一区二区在线免费观看| 精品国产伦一区二区三区观看方式 | 精品国产成人在线影院| 免费日本视频一区| 精品动漫一区二区三区在线观看| 久久国产成人午夜av影院| 2024国产精品| 成人av综合一区| a美女胸又www黄视频久久| 国产一区二区在线看| 国产精品美女久久福利网站| 99精品视频一区二区| 亚洲一区二区欧美激情| 欧美一区二区三区四区久久| 久久成人免费电影| 日本一区二区三区四区在线视频| 色婷婷综合激情| 极品少妇xxxx精品少妇偷拍| 欧美一区二区免费观在线|