(1)实验平台:普中DSP28335开发板
在前面章节那些实验我们都是将程序烧写到芯片 RAM 中运行调试的, 我们知道 RAM 中存储的东西在掉电后是会丢失的, 也就是说程序烧入到 RAM 中运行, 如果系统电源关闭后再开启, 之前下载的程序是不会再运行的。 如果我们做好的产品给客户不可能还让客户像我们这样使用 DSP 仿真器去烧录程序运行, 所以非常有必要学习如何将程序烧入到芯片 FLASH 中, 这样即使掉电也不会丢失。 本章就来介绍如何将程序烧入到芯片 FLASH 中。 本章所要实现的功能是: 在串口通信实验程序基础上改成 FLASH 模式, 在定时器 0 中断中控制 D1 指示灯间隔 200ms 闪烁。 本章分为如下几部分内容:
31.1 配置成 FLASH 模式步骤
31.2 硬件设计
31.3 软件设计
31.3.1 主函数
31.4 实验现象
31.1 配置成 FLASH 模式步骤
①将前面定时器实验章节的程序“Example24_DSP2833x_SCI_echoback” 复制一份, 重新命名为“Example43_DSP2833x_Flash_led” 。 如下:
②打开 CCS 软件, 导入工程“Example43_DSP2833x_Flash_led” , 并将 CCS软件工程名修改为实验名称, 这个在最开始实验章节就有介绍。 如下所示:
③将工程目录“DSP2833x_Libraries” 下的 28335_RAM_lnk.cmd 删除, 然后从 TI 提供 给我 们的 库文件 中把 “ F28335.cmd” 拷贝 到现 在实 验文件 夹“DSP2833x_Libraries” 目录下。 如下:
在工程目录下自动将“F28335.cmd” 文件更新进来, 如下:
该文件是对 FLASH 模式的配置, TI 公司已经给我们配置好了, 一般我们不需要更改。
④在 main 函数开始处添加 FLASH 模式配置的必须代码, 如下:
//复制对时间敏感代码和 FLASH 配置代码到 RAM 中 // 包括 FLASH 初始化函数 InitFlash(); // 链 接 后 将 产 生 RamfuncsLoadStart, RamfuncsLoadEnd, 和 RamfuncsRunStart // 参数. 请参考 F28335.cmd 文件 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); // 调用 FLASH 初始化函数来设置 flash 等待状态 // 这个函数必须在 RAM 中运行 InitFlash();上述两条语句是在使用 FLASH 模式必要的, 通过这两条语句以及 F28335.cmd文件即可将程序烧入到芯片的 FLASH 中, 这样程序断电后也不会丢失。
至此, 我们就介绍完了如何将 RAM 调试程序修改成 FLASH 程序, 大家只要按照上述步骤完成即可, 重点是第 3、 4 步。
31.2 硬件设计
本实验使用到硬件资源如下:
(1) D1 指示灯
(2) TIM0
(3) RS232 模块
LED 灯、 RS232 模块电路在前面章节已介绍, 这里就不多说, 至于 TIM0 它是F28335 芯片内部外设资源, 只需通过软件配置即可使用。
31.3 软件设计
31.3.1 主函数
其他代码与串口通信实验一样, 只是在 main 函数开始处增加了 FLASH 初始化代码, main 函数代码如下:
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File #include "leds.h" #include "time.h" #include "uart.h" #include "stdio.h" /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { Uint16 i=0; InitSysCtrl(); InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); //复制对时间敏感代码和FLASH配置代码到RAM中 // 包括FLASH初始化函数 InitFlash(); // 链接后将产生 RamfuncsLoadStart, RamfuncsLoadEnd, 和RamfuncsRunStart // 参数. 请参考 F28335.cmd 文件 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); // 调用FLASH初始化函数来设置flash等待状态 // 这个函数必须在RAM中运行 InitFlash(); LED_Init(); TIM0_Init(150,200000);//200ms UARTa_Init(4800); while(1) { } }31.4 实验现象
使用仿真器将开发板和电脑连接成功后, 把编写好的程序编译后, 如果没有报错即可将点击仿真调试, 程序即会写入到芯片的 FLASH 内, 运行结果是: D1指示灯间隔 200ms 闪烁。 当系统断电后再打开, 程序仍然会运行, 因为我们已经将程序烧入到芯片内 FLASH 中。