<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 用C語(yǔ)言編程操作SPMC75內部Flash的方法

用C語(yǔ)言編程操作SPMC75內部Flash的方法

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

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

圖2-1信息區結構      圖2-2頁(yè)和幀結構

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

表 2-1 Flash寄存器和系統寄存器

地址

寄存器

名稱(chēng)

704Dh

P_Flash_RW

內嵌 Flash 的訪(fǎng)問(wèn)控制寄存器

7555h

P_Flash_Cmd

內嵌 Flash 的控制寄存器

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

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

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

類(lèi)型 ( 默認 )

頁(yè)

描述

B[15]

保留

B[14]

R/W (0)

Bank 14

Frame 112~119

F000h-F7FFh 訪(fǎng)問(wèn)控制

1= 只讀

0= 讀 / 寫(xiě)

B[13:0]

保留

  P_Flash_Cmd ($7555):內嵌的Flash訪(fǎng)問(wèn)控制寄存器
  用于處理Flash的指令,見(jiàn)表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 指令功能和操作流程

塊擦除

單字寫(xiě)模式

連續多字寫(xiě)模式

第一步

P_Flash_CMD = 0xAAAA

第二步

[ P_Flash_CMD ] = 0x5511

[ P_Flash_CMD ] = 0x5533

[ P_Flash_CMD ] = 0x5544

第三步

設置擦除地址

寫(xiě)數據

寫(xiě)數據

第四步

自動(dòng)等待 20ms 后結束

自動(dòng)等待 40us 后結束

自動(dòng)等待 40us

未寫(xiě)完則轉向第二步

[ P_Flash_CMD ]= 0xFFFF à 操作結束令

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

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

◆ Flash單字寫(xiě)操作

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

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

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

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>