<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用C語言編程操作SPMC75內(nèi)部Flash的方法

          用C語言編程操作SPMC75內(nèi)部Flash的方法

          作者: 時間:2011-10-21 來源:網(wǎng)絡(luò) 收藏
          1引言
            支持C語言幾乎是所有微控制器程序設(shè)計的一項基本要求,當(dāng)然系列單片機(jī)也不例外。μ'nSPTM 指令結(jié)構(gòu)的設(shè)計就著重考慮對C語言的支持,GCC就是一種針對μ'nSPTM 操作平臺的ANSI-C編譯器。但是在應(yīng)用中對于程序的設(shè)計,特別是C和ASM混合使用的時候有些地方是需要注意的,在C中如何嵌入ASM也是一個不可回避的問題。

          2單片機(jī)FLASH硬件資源分析
            系列微控制器Flash分為兩區(qū):信息區(qū)和通用區(qū),在同一時間只能訪問其中的一區(qū)。信息區(qū)包含64個字,尋址空間為0x8000 ~ 0x803F。地址0x8000為系統(tǒng)選項寄存器P_System_Option。其他地址空間可由用戶自定義重要信息比如:版本控制、日期、版權(quán)、項目名稱等等。信息區(qū)的內(nèi)容只有在仿真或燒錄的狀態(tài)下才能改變。
            32k字的內(nèi)嵌Flash(embedded Flash)被劃分為16個頁,每頁2K字,每頁可分為8塊,這樣32K的Flash就可以分成128個塊。只有位于00F000 ~00F7FF區(qū)域的頁在自由運行模式下可以設(shè)置為只讀或可讀可寫,其他頁均為只讀。SPMC75系列微控制器的32K字的內(nèi)嵌式閃存結(jié)構(gòu)入下圖2-1和圖2-2。

          圖2-1信息區(qū)結(jié)構(gòu)      圖2-2頁和幀結(jié)構(gòu)

          2.1 FLASH操作
          ◆ FLASH相關(guān)寄存器
            Flash有兩個控制寄存器:P_Flash_RW ($704D)和P_Flash_Cmd ($7555).。
            P_Flash_RW ($704D)是Flash訪問控制接口,用連續(xù)兩次寫操作進(jìn)行設(shè)置,這樣避免誤寫入。首先向該寄存器寫入$5a5a,然后在16個CPU時鐘周期內(nèi)再向該寄存器寫入設(shè)置字。

          表 2-1 Flash寄存器和系統(tǒng)寄存器

          地址

          寄存器

          名稱

          704Dh

          P_Flash_RW

          內(nèi)嵌 Flash 的訪問控制寄存器

          7555h

          P_Flash_Cmd

          內(nèi)嵌 Flash 的控制寄存器

            P_Flash_RW ($704D):內(nèi)嵌的Flash訪問控制寄存器
            P_Flash_RW ($704D)是Flash訪問控制接口,用連續(xù)兩次寫操作進(jìn)行設(shè)置,這樣避免誤寫入:首先向該寄存器寫入$5a5a,然后在16個CPU時鐘周期內(nèi)再向該寄存器寫入設(shè)置字。

          B15

          B14

          B13

          B12

          B11

          B10

          B9

          B8

          R

          R/W

          R

          R

          R

          R

          R

          R

          1

          0

          1

          1

          1

          1

          1

          1

          保留

          BK14WENB

          BK13WENB

          BK12WENB

          BK11WENB

          BK10WENB

          BK9WENB

          BK8WENB


          B7

          B6

          B5

          B4

          B3

          B2

          B1

          B0

          R

          R

          R

          R

          R

          R

          R

          R

          1

          1

          1

          1

          1

          1

          1

          1

          BK7WENB

          BK6WENB

          BK5WENB

          BK4WENB

          BK3WENB

          BK2WENB

          BK1WENB

          BK0WENB

            用控制寄存器將頁設(shè)置內(nèi)嵌FLASH為只讀或可讀可寫模式。

          類型 ( 默認(rèn) )

          描述

          B[15]

          保留

          B[14]

          R/W (0)

          Bank 14

          Frame 112~119

          F000h-F7FFh 訪問控制

          1= 只讀

          0= 讀 / 寫

          B[13:0]

          保留

            P_Flash_Cmd ($7555):內(nèi)嵌的Flash訪問控制寄存器
            用于處理Flash的指令,見表2-3

          B15

          B14

          B13

          B12

          B11

          B10

          B9

          B8

          W

          W

          W

          W

          W

          W

          W

          W

          0

          0

          0

          0

          0

          0

          0

          0

          FlashCtrl


          B7

          B6

          B5

          B4

          B3

          B2

          B1

          B0

          W

          W

          W

          W

          W

          W

          W

          W

          0

          0

          0

          0

          0

          0

          0

          0

          FlashCtrl

          表 2-2 指令功能和操作流程

          塊擦除

          單字寫模式

          連續(xù)多字寫模式

          第一步

          P_Flash_CMD = 0xAAAA

          第二步

          [ P_Flash_CMD ] = 0x5511

          [ P_Flash_CMD ] = 0x5533

          [ P_Flash_CMD ] = 0x5544

          第三步

          設(shè)置擦除地址

          寫數(shù)據(jù)

          寫數(shù)據(jù)

          第四步

          自動等待 20ms 后結(jié)束

          自動等待 40us 后結(jié)束

          自動等待 40us

          未寫完則轉(zhuǎn)向第二步

          [ P_Flash_CMD ]= 0xFFFF à 操作結(jié)束令

          2.2 FLASH操作使用舉例
          ◆Flash塊擦除操作

          //擦除Flash的第14頁的第0塊
          P_Flash_CMD->W = 0xAAAA; //寫控制命令
          P_Flash_CMD->W = 0x5511; //寫入塊擦除命令
          //要檫除的塊任一地址寫入任意數(shù)據(jù),則擦除此塊
          P_WordAdr = (unsigned int *)0xF000;
          *P_WordAdr = 0x5555;

          ◆ Flash單字寫操作

          //擦除Flash的第14頁的第0塊
          //寫控制命令
          P_Flash_CMD->W = 0xAAAA;
          //寫入塊擦除命令
          P_Flash_CMD->W = 0x5511;
          //0xF000單元寫入數(shù)據(jù)0x5555
          P_WordAdr = (unsigned int *)0xF000;
          *P_WordAdr = 0x5555;

            Flash的特點是編程數(shù)據(jù)寫入時只能將1變成0,不能從0變成1。因此,用戶在對Flash編程之前,必須首先執(zhí)行Flash塊擦除或者頁擦除命令,這樣就可以將數(shù)據(jù)從0"擦除"為1。

          ◆ Flash連續(xù)寫操作
          采用連續(xù)編程模式向Flash的0xF000 到 0xF060地址空間連續(xù)寫入數(shù)據(jù)。

          // 寫數(shù)據(jù)到 0xF001~0xF060的連續(xù)單元中,設(shè)這段空間已經(jīng)擦//除過。
          P_WordAdr = (unsigned int *)0xF001;
          uiData = 11;
          P_Flash_CMD->W = 0xAAAA; //寫控制命令
          for(i = 1;i = 96;i ++)
          {
             P_Flash_CMD->W = 0x5544; //寫入連續(xù)數(shù)據(jù)寫命令
             *P_WordAdr = uiData; //寫入數(shù)據(jù)
             uiData ++;
             P_WordAdr ++;
          }
          P_Flash_CMD->W = 0xFFFF; //結(jié)束數(shù)據(jù)寫入操作



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();