Anda di halaman 1dari 3

化工自动化及仪表 , 2004 , 31 (6) :36~38  

计算机技术                    Control and Instruments in Chemical    


Industry

MSP430 系列 C 语言环境下的软件设计实用技巧
李文炜

( 杭州师范学院 信息工程学院 ,浙江 杭州 310036)

  摘要 :  介绍 MSP430 系列 Flash 型单片机内部的 Flash 控制器的结构 ,以 MSP430F149 为例介绍如何在 C 编译


环境下对 Flash 存储器进行在线擦除和编程操作 ,并且就实际现场的基于裸机的首次参数保存提出了实用建议 ,
给出了数组结构参数保存的实际 C 语言例程 。
  关键词 :  MSP430 ;Flash ;C 编译 ; 擦除程序 ; 设计技巧
  中图分类号 : TP311  文献标识码 : B  文章编号 : 100023932 (2004) (06) 20036203

1  引  言[1~2 ] 在系统产品化以后软件设计中要求 : 系统第一次上


MSP430 系列 Flash 型单 片 机 内 部 集 成 有 Flash 电时出现诸如图 2 所示的相关图形界面 , 要求用户
控制器 ,可以采用外部编程器进行烧写 ,也可以利用 输入所有参与计算和可能需要人为设定的相关参
自己的程序修改 Flash 的内容 , 且不用外加编程电 数。
压 。Flash 的可自编程性表示 : 用 Flash 存储器中的
驻留软件或程序对 Flash 存储器进行擦除/ 编程 , 但
是要求运行程序代码的存储区与待编程的存储区不
在同一模块中 。由于 MSP430 系列单片机只有一个
片上 Flash 存储器模块的微处理器 ,因此不能同时进
行擦除/ 编程 Flash 的操作 。目前 ,在擦除/ 编程 Flash
的过程中 ,通常将 CPU 置于空闲状态 。因此在进行 图 1  基于裸机的编程结构
系统设计时 ,可以利用片内的 Flash 保存一些运行数
据 ,实现掉电保护 ; 还可以修改 Flash 中的整个程序
或局部程序 ,实现系统升级 。
本文详细举例介绍了在嵌入式系统设计应用过
程中积累的 MSP430 系列 C 语言环境下的软件设计 图 2  产品化出厂后系统第一次上电时的参数初始设置界面

实用技巧 。
  需要指出的是 : 基于裸机软件设计的密码保护
2  基于裸机的微处理器软件设计思想
功能 ,可以非常有效地防止人为蓄意破坏参数和重
以微处理器为核心的系统开发 , 其系统的实时
要数据 。但是 ,如果在系统第一次上电的时候 , 不采
性 ,可靠性和使用的人性化与设计人员的水平和经
取如图 2 界面的提示输入密码保存方式 , 而直接进
验密切相关 。如图 1 所示 , 基于裸机的编程核心实 入循环 ,那么可以说该系统是无法使用的 , 因为在主
际上就是应用系统在上电以后不断地做一个循环 , 循环中需要修改参数时必须先进入密码保护功能模
在有外部响应的的条件下根据响应级别的高低 , 完 块 ,而在每次进入该模块时由于未事先设置密码 ,
成相应的功能操作 。 Flash 密码存储空间内存储的是乱码 , 手动输入密码
3  微处理器在 C 语言环境下的软件设计技巧 必须和 Flash 空间的随机密码相匹配时才可以进入
3. 1  基于裸机的首次上电操作 功能操作模式 , 这可以说是基本不可能实现的 。此
由图 1 可以看出 , 基于裸机开发出来的产品在 外 ,如果采用事先软件内部设置出厂初始密码 ,可以
第一次出厂时 MSP430F149 微处理器内部的 Flash 存
储空间是一堆乱码 ,那么如果直接进入循环程序 , 利   收稿日期 :2004207228
  基金项目 : 湖南省科委资助项目 (03CTY3036)
用内部随机参数计算出来的数据是无效的 。因此 ,

© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
 第 6 期          李文炜 . MSP430 系列 C 语言环境下的软件设计实用技巧 ・37 ・

解决上述问题 , 但是设置初始密码的模式从实际应 算方式选择”的软件技巧) :


用角度来说也是不安全的 。从图 1 可以看出 , 对于 void Keypad-Array- ToData ( void)
初始密码设置模式 ,在现场修改 、
保 存 新 密 码 以后 , {  dot- bit = key- setting[ n0 ] ;/ / 记录显示小数位
在系统不掉电的情况下新密码会起到保护功能 , 如 in-1para = key- setting[ n1 ] ;/ / 仪表常数低四位
果采用人为断电操作 , 系统将恢复至出厂初始密码 in-2para = key- setting[ n2 ] ;/ / 仪表常数高三位
状态 ,因此也是不安全的 。因此 , 从确保安全的角 sum-1 = key- setting[ n3 ] ;/ 累计计数低位
度 ,软件设计中要求系统第一次上电输入 、
保存保护 sum-2 = key- setting[ n4 ] ;/ / 累计计数高位
密码是最为合理和安全有效的 。   … }
[ 3 ,4]
3. 2  Flash 存储器的擦除和编程操作原理 3. 4  基于 C 语言环境下归一化处理的数组结构的
以 MSP430F149 为例 ,Flash 存储器模块包含 3 个 参数保存
控制寄存器 、
时序发生器 、
提供编程及擦除电压的电 参数修改在工业现场是常有的人为操作 , 而修
压发生器和存储器本身 。Flash 存储器绝大多数时 改的参数直接涉及到系统计算的精确程度 , 因此对
间工作在读模式 。这时数据 、
地址锁存器是透明的 , 于修改参数保存的软件设计必须简明无误 。根据
时序发生器和电压发生器关闭 。当数据写入 Flash MSP430 微处理器存储器的特殊结构和存储要求 , 参
存储器模块 , 或者它的全体或部分被擦除时 , Flash 照 3. 3 中的处理 , 同时为了以后程序版本升级的方
存储器改变它的工作模式 。这时需要在控制寄存器 便 ,在系统软件设计时采用数组结构的存储方式 , 即
FCTL1 、
FCTL2 和 FCTL3 中设置适当的参数以保证编 在实际设计中预设了 n 个存储单元 , 将这 n 个存储
程/ 擦除操作的正确执行 。一旦控制寄存器设置后 , 单元作为一个数组 , 将数组中每一个数组变量与一
编程/ 擦除操作开始 ,时序发生器即控制全部执行过 个特定的需要保存的参数变量相对应 , 在每次修改
程 ,产生全部内部控制信号 。如果 BUSY 位为“1 ”, 完所需要修改的参数时 , 将新的参数赋予数组中相
就表明时序发生器还在工作 ,编程/ 擦除操作正在进 对应的元素 ,所有参数修改完毕以后 , 先对 Flash 存
行 。对于段编程还有第二个控制位 WAIT。 储空间内的参数存储单元段进行整段擦除 , 再将新
编程/ 擦除操作有 3 个基本阶段 : 准备编程/ 擦 的数组变量以数组的形式把所有的没有修改的元素
除电压阶段 、
时序控制编程/ 擦除操作及关闭编程/ 和已经修改的元素对数据保存段进行擦写 。
擦除电压 。一旦编程/ 擦除操作开始 , 在 BUSY 位变 以 MSP430F149 为例的 C 语言环境下保存参数
为“0 ”之前无法对 Flash 存储器访问 。若有异常情 程序如下 :
况 ,则正在进行的编程/ 擦除操作要立即停止 , 可以 void Keypad- Write- Setting- To- Flash ( void)
用紧急退出位 EMEX 置位来实现 。但是 , 这时操作 {  unsigned char I ;
并未完成 ,结果可能是不正确的 。 unsigned int 3 tp , 3 write-ptr ;
MSP430 系列芯片中只集成了一个 Flash 模块用 tp = ( unsigned int 3 ) 0x1000 ;/ / 指向 informa2
作程序和数据存储器 。这就意味着在对 Flash 进行 tion flash 首地址 ,segmentB
编程时 ,中断向量是不起作用的 ,任何中断请求都得    -DINT() ;
不到响应 。所有可能的中断源 ( 包括看门狗) 在对    FCTL1 = FWKEY + ERASE ;/ / 写键值和允
Flash 进行擦除/ 编程操作前 ,都应该被屏蔽掉 。 许擦除
3. 3  参数设置的提取和保存的数据的归一化处理    FCTL3 = FWKEY;/ / 写键值 ,lock = 0 ,
基于裸机的嵌入式系统设计中对于系统的精确    3 tp = 0 ;/ / 空写入 ,确定段号
计算要求非常高 , 而精确的计算离不开各项相关参    FCTL1 = FWKEY + LOCK;/ / lock = 1 ,当前
数的提取 、
人为参数修改的保存和再提取 。在程序 段擦除完毕
设计中为了节省程序的空间和提高程序编写的效    FCTL3 = FWKEY;/ / 写键值 ,lock = 0
率 ,规范地设置参数类型和地址空间往往可以达到    write-ptr = ( unsigned int 3 ) 0x1000 ;
事半功倍的效果 。因此根据系统性能的要求 , 计算 、    FCTL1 = FWKEY+ WRT;/ / 写参数
选取 、
设定合适的数组元素个数 ,以数组变量的形式    FCTL3 = FWKEY;
归一化处理需要提取和保存的数据 , 具体如下所示      for ( i = 0 ;i < = n ;i + + )
( 该设定直接关联到下面“参数提取 、
参数保存和计    3 ( write-ptr + + ) = key- setting[ i ] ;/ / 逐个

© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
・38 ・ 化 工 自 动 化 及 仪 表               第 31 卷  

往 Flash 中写数组中的元素 量全部定义为整型 , 在内部计算中全部采用整型计


   FCTL1 = FWKEY;/ / 不写 算 ,仅仅在最后的显示模块对此做相应的变换技术
   FCTL3 = FWKEY+ LOCK; 处理 。
    - EINT() ;  } {  …
3. 5  计算相关的参数提取   unsigned int in-1para ;/ / 记录低位输入
绝大多数基于裸机的嵌入式系统应用 , 系统软   unsigned int in-2para ;/ / 记录高位输入
件从功能上都会划分出采样模块 、
计算模块和显示  unsigned long input-para = 0 ;/ / 计算中间量
模块 。软件人员通常在主循环中设置定时中断 , 在 in-1para = dispnum5 3 1000 + dispnum4 3 100 +
中断响应时读取采样模块的结果 , 再从数据存储区 dispnum3 3 10 + dispnum2 ;
读取相关计算参数 ,调用计算模块 ,最终将计算结果 in-2para = dispnum8 3 100 + dispnum7 3 10 + disp2
送入显示模块完成人机接口界面的刷新 。在现场 , num6 ;
操作人员根据实际情况常需要修改各类参数 , 因此   input-para = in-1para 3 10000 + in-1para ;
由 3. 3 中的归一化处理 , 在每次计算的时候直接调   … }
用读数据函数 ,将数组结构的保存参数从 Flash 存储 采用该方式 , 不仅避免了在程序设计过程中由
区中读取并且将值赋给相应的计算变量 。因此 , 无 于 C 语言和汇编语言嵌套编写所带来的繁琐步骤 ,
论外部参数如何修改 ,在程序段中只体现在 Flash 参 也为整体程序设计节省了浮点包所要占用的程序空
数存储空间的内容变化 , 而软件上无需任何的繁琐 间 ( 约为 5 KB) 。而且采用该方式在程序交流中也简
处理 。 单明了 。
void Keypad- Read- Setting- FormFlash ( void )    / / 4  总  结
从 Flash 中读数据 本文在介绍了 MSP430 系列单片机内部集成的
{  unsigned char i ; Flash 控制器结构的基础上 , 以该系列的 MSP430F149
 unsigned int 3 tp ; 为例 ,本文详细地介绍了对该系列单片机的 Flash 存
  tp = ( unsigned int 3 ) 0x1000 ;/ / 数据起始地址 储器 的 操 作 , 包 括 基 于 裸 机 程 序 设 计 的 思 想 , 对
   for ( i = 0 ;i < = 16 ;i + + ) MSP430 系列微处理器 Flash 存储器的擦除操作和对
    key- setting[ i ] = 3 ( tp + + ) ; Flash 存储器的编程/ 写操作过程 , 并且对实际现场
  Keypad-Array- ToData () ;/ / 读出后赋给相应变 的基于裸机的首次参数保存和密码功能的设计提出
量} 了实用建议 ,其后也介绍了参数提取和设计过程中
3. 6  计算方式的选择 对内部计算方式的选择 。在相关的介绍中均给出了
对于 MSP430 系列的微处理器在实际计算应用 以 MSP430F149 为例的实际应用中的例程 。
时有 二 种 计 算 处 理 方 式 : 一 是 直 接 加 载 、调 用 [ 参 考 文 献 ]
MSP430 系列自带的浮点运算包 ; 二是通过内部软件 [1 ]  潘卫江 , 胡大可 . 新一代超低功耗单片机 :MSP430F13x/ F14x
处理完成 。对于计算方式的选择要根据实际情况从 系列 [J ] . 单片机与嵌入式系统应用 ,2001 , (3) :56259.
[2 ]  胡大可 . MSP430 系列超低功 耗 16 位 单 片 机 原 理 及 应 用
程序运行速度 、
整体程序占用空间大小和软件设计
[M] . 北京 : 北京航空航天大学出版社 ,2000.
繁琐程度综合考虑 。由于本系统采用并行点阵式液
[ 3 ]  魏小龙 . MSP430 系列单片机接口技术及系统设计实例 [ M] .
晶显示模块 ,人机接口部分程序已占用了较大的处 北京 : 北京航空航天大学出版社 ,2002.
理器程序空间 , 因此在计算软件设计的部分没有采 [4 ]  潘卫江 ,胡大可 . MSP430 单片机 Flash 存储器的特性及应用
用加载 、
调用浮点运算包的方式 ,而是将所有计算变 [J ] . 单片机与嵌入式系统应用 ,2001 , (4) :38241.

Practicable Skill of Soft ware Design for MSP430 Series on C Language


LI Wen2wei
( College of Information , Hangzhou Teachers College , Hangzhou 310036 , China)
Abstract :The Flash memory construction of the Flash2type microcontroller belongs to TI MSP430 series is introduced. How
to complete the memory write operation is presented in IAR Systems C2Compiler. An advice to save the important parameters
at the first time base on the bare machine ,including the partial software ,is proposed.
Key words :MSP430 ;Flash ;C2Compiler ;memory clear subroutine ;skill of design

© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.

Anda mungkin juga menyukai