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

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

?? flash.c

?? 《嵌入式系統-使用HCS12微控制器的設計與應用》在CodeWarrior開發環境下的源程序。
?? C
字號:
//[Flash.c]Flash擦寫-------------------------------------------------------*
//本文件包含:                                                              *
//    (1)Flash_Erase_Sector:擦除一個指定的扇區                             *
//    (2)Flash_Write_Nword:向一個指定的區域寫入若干個字                    *
//    (3)Flash_unsecured:使用后門機制解除Flash的安全狀態                   *
//    (4)Flash_SetKey:設置后門鑰匙                                         *
//    (5)Flash_SetStatus:設置Flash的安全狀態                               *
//-------------------------------------------------------------------------*

//頭文件
#include  "Flash.h"    //Flash擦寫頭文件

//內部調用函數聲明
void Erase_Write_Pretreat(INT8U page);   //擦寫子函數內部調用的函數聲明

//頁所對應的塊對照表
//兩個flash塊,每塊4頁           flash0                flash1        
const INT8U pagetable[2][4] = {{0x3C,0x3D,0x3E,0x3F},{0x38,0x39,0x3A,0x3B}};

//Flash_Erase_Sector:擦除指定的扇區----------------------------------------*
//功  能:對頁號為page,扇區首地址為addr的一個扇區進行擦除                   *
//參  數:page--頁號(0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F)               *
//       addr--扇區首地址(偶數)                                            *
//返  回:無                                                                *
//注  意:調用該函數之前,必須確定要擦除的區域可擦除                         *
//-------------------------------------------------------------------------*
void Flash_Erase_Sector(INT8U page,INT16U addr)
{
    //1 判斷是否已分頻、清相關錯誤標志、根據頁號選擇相應的flash塊 
    Erase_Write_Pretreat(page);    //擦寫子函數共同調用的內部子函數
    //2 向要擦除的扇區首地址寫任意值(注意:經實驗證實,不可以寫0x0000)
    *(INT16U *)addr = 0xFFFF;
    //3 向命令寄存器寫扇區擦除命令
    FCMD = 0x40; 
    //4 在加高壓期間,調用RAM區的機器碼,相當于兩條語句:
    //  FSTAT=0x80; 
    //  while(!(FSTAT&0x40));
    asm("JSR PrgOfRam");
}

//Flash_Write_Nword:向指定的扇區寫入若干個字-------------------------------*
//功  能:將從address_source開始的len個字,寫入頁號為 page,起始地址為        *
//       address_destination的扇區                                         *
//參  數:page--頁映射地址(0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F)         *
//       address_destination--目標扇區首地址(偶數)                         *
//       address_source--源地址                                            *
//       len--字數(一次最多寫入一行,即128個字)                             *
//返  回:無                                                                *
//注  意:調用該函數之前,必須確定要寫入的區域可寫入                         *
//-------------------------------------------------------------------------*
void Flash_Write_Nword(INT8U page,INT16U address_destination,
                              INT16U address_source,INT8U len)
{
    INT8U m;
    //1 判斷是否已分頻、清相關錯誤標志、根據頁號選擇相應的flash塊 
    Erase_Write_Pretreat(page);   //擦寫子函數共同調用的內部子函數
    //2 寫入若干個字
    for (m=0; m<len; m++)
    {
        //(1) 將源地址的一個字寫入目標地址
        *(INT16U  *)address_destination = *(INT16U  *)address_source;
        //(2) 向命令寄存器寫字寫入命令
        FCMD = 0x20;
        //(3) 在加高壓期間,調用RAM區的機器碼,相當于兩條語句:
        //    FSTAT=0x80; 
        //    while(!(FSTAT&0x40));
        asm("JSR PrgOfRam");
        //(4) 源地址和目標地址同時向后移一個字
        address_destination = address_destination+2;
        address_source = address_source+2;
    }
}

//Erase_Write_Pretreat:開始擦除或寫入前的公共操作序列子函數----------------*
//功  能:判斷是否已分頻;清相關錯誤標志;根據頁號選擇相應的flash塊;如果頁號不*
//       為0,則設置PPAGE寄存器                                             *
//參  數:page--頁映射地址(0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F)         *
//返  回:無                                                                *
//-------------------------------------------------------------------------*
void Erase_Write_Pretreat(INT8U page)
{
    INT8U i,j;
    //1 判斷是否設置時鐘分頻,若無分頻,則先分頻
    if ((FCLKDIV&0x80) == 0) FCLKDIV |= 0x03;
    //2 清保護錯誤和訪問錯誤標志位
    FCNFG |= 0x01;    //FCNFG的第0位置1,選擇BLOCK1
    FSTAT |= 0x30;    //清保護錯誤和訪問錯誤標志位   
    FCNFG &= 0xFE;    //FCNFG的第0位置0,選擇BLOCK0
    FSTAT |= 0x30;    //清保護錯誤和訪問錯誤標志位
    //3 查表、選擇塊號,如果頁號不為0就設置頁寄存器
    if (page != 0)
    {
        for (i = 0;i < 2;i++)
        {
            for (j = 0;j < 4;j++)
            {
                if (page == pagetable[i][j])
                    break;
            }
            if (j < 4)
                break;
        }
        if (i == 0)  FCNFG &= 0xFE;    //頁號3C~3F,選擇BLOCK0
        if (i == 1)  FCNFG |= 0x01;    //頁號38~3B,選擇BLOCK1
        PPAGE = page;    //設置頁寄存器
    }
}

//Flash_unsecured:使用后門機制解除Flash的安全狀態--------------------------*
//功  能:使用后門鑰匙解除Flash的安全狀態                                   *
//參  數:key[8]--8個字節的后門鑰匙                                         *
//返  回:無                                                                *
//-------------------------------------------------------------------------*
void Flash_unsecured(INT8U key[8])
{
    //1 判斷是否設置時鐘分頻,若無分頻,則先分頻
    if ((FCLKDIV&0x80) == 0)
        FCLKDIV |= 0x03;
    //2 輸入密碼進行匹配
    FCNFG |= 0x20;
    Flash_Write_Nword(0x00,0xFF00,(INT16U)key,4);
    FCNFG &= 0xCF;
}

//Flash_SetKey:設置后門鑰匙------------------------------------------------*
//功  能:設置后門鑰匙                                                      *
//參  數:key[8]--8個字節的后門鑰匙                                         *
//返  回:無                                                                *
//-------------------------------------------------------------------------*
void Flash_SetKey(INT8U key[8])
{
    INT8U i;
    INT8U Sbyte[2];
    INT8U vec[128];
    //1 判斷是否設置時鐘分頻,若無分頻,則先分頻
    if ((FCLKDIV&0x80) == 0)
        FCLKDIV |= 0x03;
    //2 將安全字節保存到Sbyte
    Sbyte[1]=*(INT8U  *)0xFF0F;
    //3 將向量區的字節搬到vector數組中
    for(i=0;i<128;i++)
        vec[i]=*(INT8U  *)(0xFF80+i);
    //4 擦除后門鑰匙所在的扇區
    Flash_Erase_Sector(0X00,0xFF0E);
    //5 將要設置的后門機制密碼寫入到0xFF00開始的8個字節中
    Flash_Write_Nword(0x00,0xFF00,(INT16U)key,4);
    //6 將Sbyte中的值重新寫入到Flash的安全字節中
    Flash_Write_Nword(0x00,0xFF0E,(INT16U)Sbyte,1);
    //7 將vector數組中的向量字節重新寫入到Flash的向量區
    Flash_Write_Nword(0x00,0xFF80,(INT16U)vec,64);
}

//Flash_SetStatus:設置Flash的安全狀態--------------------------------------*
//功  能:設置Flash的安全狀態                                               *
//參  數:Sbyte[2]--其中Sbyte[1]中放的是安全字節,Sbyte[0]中放0xFF          *
//返  回:無                                                                *
//-------------------------------------------------------------------------*
void Flash_SetStatus(INT8U Sbyte[2])
{
    INT8U i;
    INT8U vec[128];
    INT8U key[8];
    //1判斷是否設置時鐘分頻,若無分頻,則先分頻
    if ((FCLKDIV&0x80) == 0)
        FCLKDIV |= 0x03;
    //2 將安全字節搬到key數組中
    for(i=0;i<8;i++)
        key[i]=*(INT8U  *)(0xFF00+i);
    //3 將向量區的字節搬到vector數組中
    for(i=0;i<128;i++)
        vec[i]=*(INT8U  *)(0xFF80+i);
    //4 擦除安全字節所在的扇區
    Flash_Erase_Sector(0X00,0xFF0E);
    //5 設置安全字節
    Flash_Write_Nword(0x00,0xFF0E,(INT16U)Sbyte,1);
    //6 將key數組中的數據重新寫入Flash的0xFF00開始的8個安全字節中
    Flash_Write_Nword(0x00,0xFF00,(INT16U)key,4);
    //7 將vector數組中的向量字節重新寫入到Flash的向量區
    Flash_Write_Nword(0x00,0xFF80,(INT16U)vec,64);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品国产99久久久久久白柏 | 国产精品一区二区免费不卡| 国产成人免费视| 在线观看日韩精品| 久久人人爽爽爽人久久久| 一区二区久久久| 国产精品77777| 精品国产一区二区三区久久影院| 亚洲另类一区二区| 国产激情视频一区二区三区欧美 | 天天射综合影视| av在线这里只有精品| xvideos.蜜桃一区二区| 午夜电影网亚洲视频| 99精品欧美一区二区蜜桃免费| 日韩欧美亚洲国产精品字幕久久久| 亚洲与欧洲av电影| 91同城在线观看| 国产精品久久久久久久久免费丝袜| 精品在线免费观看| 欧美一区二区视频观看视频| 亚洲国产精品一区二区久久| 成人动漫精品一区二区| 国产肉丝袜一区二区| 精品一区二区免费| 欧美哺乳videos| 蜜臀久久99精品久久久画质超高清| 在线视频国内自拍亚洲视频| 亚洲欧美日韩国产成人精品影院 | 欧美中文一区二区三区| 国产精品成人一区二区艾草 | 国产精品不卡一区二区三区| 国产99久久精品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 精品国产1区2区3区| 免费欧美日韩国产三级电影| 欧美一区二区三区在线观看| 蜜桃视频在线观看一区二区| 日韩精品一区二区三区中文精品| 久久国产精品区| 2023国产精品| 国产精品综合二区| 中文天堂在线一区| 99re6这里只有精品视频在线观看| 中文字幕一区二区三区蜜月| 色综合视频一区二区三区高清| 亚洲欧美日韩中文字幕一区二区三区 | 日本欧美久久久久免费播放网| 555夜色666亚洲国产免| 麻豆精品精品国产自在97香蕉| 精品日本一线二线三线不卡| 国产毛片精品国产一区二区三区| 欧美国产一区在线| 91蜜桃视频在线| 天天色图综合网| 久久久久久久久一| 日本精品视频一区二区三区| 亚洲成人免费影院| 久久这里只有精品6| 国产福利91精品| 一区二区三区欧美激情| 日韩欧美国产三级| 成人av资源站| 日本午夜精品一区二区三区电影 | 欧美军同video69gay| 久久精工是国产品牌吗| 国产精品美女www爽爽爽| 在线观看成人小视频| 免费久久精品视频| 亚洲免费av观看| 久久久久久久久久久久久夜| 91免费看视频| 国产在线视视频有精品| 亚洲综合在线第一页| 26uuu亚洲| 欧美亚洲综合色| 国产91露脸合集magnet| 日日夜夜精品视频免费| 中文字幕亚洲不卡| 精品日韩一区二区| 欧美日韩中文字幕精品| 成人一区二区三区在线观看| 日韩黄色一级片| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美日韩成人在线一区| 成人免费观看男女羞羞视频| 免费人成网站在线观看欧美高清| 一区二区三区中文字幕在线观看| 久久久久久一级片| 欧美成人bangbros| 91超碰这里只有精品国产| 91视频免费看| 成人永久免费视频| 国产精品综合网| 日韩av成人高清| 洋洋av久久久久久久一区| 欧美国产激情一区二区三区蜜月 | 色婷婷亚洲婷婷| 国产精品一区二区男女羞羞无遮挡| 婷婷综合久久一区二区三区| 亚洲特级片在线| 国产精品久久久久久久久晋中 | 中文字幕欧美三区| 精品日韩成人av| 日韩午夜小视频| 欧美一区二区三区小说| 欧美午夜电影网| 色网站国产精品| 91在线高清观看| eeuss国产一区二区三区| 国产黄色精品视频| 国产美女在线精品| 韩国精品主播一区二区在线观看| 日韩在线一区二区| 奇米精品一区二区三区在线观看 | 亚洲夂夂婷婷色拍ww47| 亚洲天堂2014| 一级特黄大欧美久久久| 自拍av一区二区三区| 国产精品黄色在线观看| 亚洲欧洲日产国码二区| 亚洲色图都市小说| 亚洲蜜臀av乱码久久精品| 亚洲黄色小视频| 亚洲一二三四在线| 亚洲国产精品久久不卡毛片| 五月婷婷综合网| 免费观看一级欧美片| 九一九一国产精品| 国产成人欧美日韩在线电影| 成人一区二区三区| 92精品国产成人观看免费| 91黄色在线观看| 欧美日韩免费在线视频| 欧美一二三区精品| 久久蜜桃av一区精品变态类天堂| 欧美国产一区视频在线观看| 亚洲日本乱码在线观看| 亚洲成人www| 精品一区二区久久久| 99麻豆久久久国产精品免费| 在线免费视频一区二区| 538在线一区二区精品国产| 久久午夜羞羞影院免费观看| 国产精品你懂的| 亚洲一区二区影院| 老司机午夜精品| 不卡一区在线观看| 欧美日韩国产高清一区二区| 精品国产91乱码一区二区三区| 国产精品高清亚洲| 奇米亚洲午夜久久精品| 粉嫩一区二区三区在线看| 欧美综合久久久| 久久久久青草大香线综合精品| 一区二区三区不卡视频在线观看| 日本不卡在线视频| av在线不卡观看免费观看| 欧美另类z0zxhd电影| 国产人成亚洲第一网站在线播放| 一区二区免费看| 国产成人在线免费观看| 欧美日韩亚洲综合| 日本一区二区免费在线观看视频 | 九九热在线视频观看这里只有精品| 懂色中文一区二区在线播放| 欧美人xxxx| 中文字幕一区在线观看视频| 青青青爽久久午夜综合久久午夜| 成人免费毛片app| 日韩亚洲欧美综合| 亚洲国产中文字幕| 成人动漫精品一区二区| 日韩精品一区二| 天天影视涩香欲综合网| 色综合久久六月婷婷中文字幕| 精品国产成人系列| 日韩综合一区二区| 色综合天天视频在线观看| 国产亚洲精品aa| 日本色综合中文字幕| 日本乱人伦aⅴ精品| 中文字幕精品综合| 国产在线视频一区二区| 日韩一区二区电影在线| 午夜精品aaa| 欧美无乱码久久久免费午夜一区| 亚洲国产成人午夜在线一区| 国产激情一区二区三区| 精品国产第一区二区三区观看体验 | 一区二区三区四区不卡在线 | 欧美日韩视频第一区| 中文字幕在线不卡视频| 成人国产免费视频| 国产亚洲一本大道中文在线| 六月婷婷色综合| 欧美成人一级视频| 精品一区二区影视| 精品日产卡一卡二卡麻豆| 精品亚洲欧美一区|