《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 如何利用好MSP430芯片內的information memory 作為掉電數據保存(EEPROM)
如何利用好MSP430芯片內的information memory 作為掉電數據保存(EEPROM)
摘要: 我們用的MSP430時, 內部有幾十個字節information memory 可以當EEPROM來用, 無需再外擴EEPROM芯片, 用量保存一下系數的掉電保存的數據. 我一直用這個, 很好用.
關鍵詞: 軟件 MSP430
Abstract:
Key words :

我們用的MSP430時,  內部有幾十個字節information memory 可以當EEPROM來用, 無需再外擴EEPROM芯片,  用量保存一下系數的掉電保存的數據. 我一直用這個, 很好用.      

     特別說明:

     1.說明我用的是IAR編譯器,  在IAR上一定能通過 

    2. 利用information memory 作為EEPROM 掉電保存數據,這是這段程序第一個亮點;

    3. 寫information memory 必須在RAM中運行程序.  將程序從flash 跑到RAM中運行, 很有意思. 這是第二個亮點.

    4. 源文件,下載 7824.flash.h2555.flash.c

 

 

#include "MSP430x16x.h"
#include "string.h"
#include"stdlib.h"
#include"flash.h"


/************************************************************************************
** 函數名稱: flashWrite
** 功能描述: 在MSP430flash中寫數據
**
** 輸  入: td:寫入地址, sd:源數據指針, size:寫入字節數
** 輸  出: 無
** 返 回 值: 返回需要發送給其他任務處理的數據塊的指針。
** 全局變量:
** 調用模塊:
** 作  者: 陳文浩
** 日  期: 2010年07月12日
************************************************************************************/
void flashWrite(unsigned char * td, unsigned char *sd, unsigned char size)
{
typedef void(*funp)(unsigned char*,unsigned char *, unsigned char); //定義函數指針類型
funp FLASHBLK;
char ramcode[100]; //ram內程序及數組地址指針
_DINT();
//ramcode=(char *)malloc(sizeof(char)*100); //為放入內存的子程分配空間(需先將heap值設為180)
FLASHBLK = flashWriteBlock; //函數指針賦值
memcpy(ramcode,(char *)FLASHBLK,100); //將塊寫子程放入ram中已分配空間
FLASHBLK=*(funp)ramcode; //將函數指針指向ram中的塊寫子程
flashErase(td); //段擦
(FLASHBLK)(td,sd, size); //塊寫(調用的是ram中的塊寫子程)
//free(ramcode); //釋放空間
_EINT(); //開放中斷
}


void flashWriteBlock(unsigned char * td,unsigned char *sd, unsigned char size)
{
int i;

while((FCTL3&BUSY)!=0x00); //檢測busy位
FCTL2=FWKEY+FSSEL_1+20; //flash模塊時鐘源為MCLK 分頻2
FCTL3=FWKEY; //解鎖
FCTL1=FWKEY+BLKWRT+WRT; //塊寫
for(i=0;i{
*td++=*sd++; //寫入
while((FCTL3&WAIT)==0); //檢測wait位 是否寫入該字
}
FCTL1=FWKEY; //BLKWRT WRT位復位
while((FCTL3&BUSY)!=0x00); //檢測BUSY位
FCTL3=FWKEY+LOCK; //鎖定

}
/*******************************************************************************/
/* 段擦除子程序 */
/*******************************************************************************/
void flashErase(unsigned char *td)
{
FCTL2=FWKEY+FSSEL_1+10; //flash模塊時鐘源位MCLK 分頻2
FCTL3=FWKEY; //解鎖
FCTL1=FWKEY+ERASE; //段擦除
*td=0; //在欲進行操作的段中空寫,啟動擦除操作
FCTL3=FWKEY+LOCK; //鎖定
}

//功能:FLASH操作 BYTE數據寫入
//編程時鐘:257KHZ~476KHZ
void flashWriteByte(unsigned char * pdata, unsigned char data)
{
//WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
_DINT(); //關閉總中斷
FCTL2 = FWKEY+FSSEL1+12; //3686400/300K=12
FCTL3 = FWKEY; //LOCK=0;
FCTL1=FWKEY+WRT; //WRT=1;
*pdata = data;
FCTL3 = FWKEY+LOCK; //
//開通看門狗
_EINT(); //開放中斷
}

void flashWriteWord(unsigned short * pdata, unsigned short data)
{
//WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
_DINT(); //關閉總中斷
FCTL2 = FWKEY+FSSEL1+12;
FCTL3 = FWKEY; //LOCK=0;
FCTL1=FWKEY+WRT; //WRT=1;
*pdata = data;
FCTL3 = FWKEY+LOCK; //
//開通看門狗
_EINT(); //開放中斷
}

補充一點,部分MSP430中A區中存有部分芯片調校數據,如果需要利用A區,需要仔細看一下DATASHEET. 

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 狠狠色丁香婷婷久久综合蜜芽| 国产欧美日韩综合精品一区二区| 好看的中文字幕在线| 影视先锋AV资源噜噜 | 欧美多人性受xxxx喷水| 五月天亚洲色图| 羞羞视频在线观看入口| 东京加勒比中文字幕波多野结衣| 一本色道久久88—综合亚洲精品| japanese成熟丰满熟妇| 97久人人做人人妻人人玩精品| **肉体一级毛片| 黑料不打烊tttzzz网址入口| 蜜臀av性久久久久蜜臀aⅴ麻豆| 精品视频免费在线| 狠狠久久精品中文字幕无码| 欧美激情一区二区三区蜜桃视频| 李宗60集奇奥网全集| 日本aⅴ日本高清视频影片www| 日本xxx片免费高清在线| 成人a视频片在线观看免费| 在线观看国产精美视频| 国产成人无码专区| 免费日本黄色片| 久久综合桃花网| www.tube8.com日本| 99rv精品视频在线播放| 男朋友想吻我腿中间的部位 | 精品无码成人久久久久久| 欧美日韩在线不卡| 无码专区国产精品视频| 国产韩国精品一区二区三区| 国产mv在线天堂mv免费观看| 亚洲成人中文字幕| 一级毛片免费播放视频| 久久伊人色综合| 狠狠色综合网久久久久久| 日本中文字幕电影| 国产精品免费综合一区视频| 冬日恋歌国语版20集中文版| 二区三区在线观看|