前两天用德州仪器的TMS320F28335芯片,试着实现了一个走马灯,感觉挺好; 但后来,发现,这里面有个 ”坑“;【报告: 2024.2.23 这个坑终于填平了 ,下电后再上电,走马灯依然正常跑了】
一、”坑“ 的现象:
发现这个走马灯的控制板正常带电的时候,下载完程序 运行 的时候,运行的很正常;但是一但控制板下电,再重新上电,哎? 不运行了,走马灯不跑了。 嘻嘻嘻嘻!
二、分析这个“坑”
为什么呢? 一脑袋的 Question Mark, 不过瞬间就想明白了,DSP芯片运行的程序(二进制执行码), 这个执行码应该可以存在RAM中,也可以存在FLASH,两个地方 啊,是不是程序下载的地方错了。
另:说说RAM和FLASH的特性:
RAM 一旦掉电,保存在RAM中的东西就 ”丢了“
FLASH 保存在这里的东西,下电后这个东西一直会保存着, 不会丢
三、开始解决(填坑):(写这篇小字的时候,这个坑还没填上)
1、看看这个芯片的存储空间:ROM在哪里,RAM在哪里,FLASH在哪里: 查资料截图如下:
看上面图:
红色框部分-ROM 只读的 掉电不丢失,也不可以写(这里面安装的是DSP基础程序 类似 BIOS)
绿色框部分-SARAM 读写 数据或程序 掉电会丢失;
蓝色框部分-FLASH 读写 数据或程序 写入后 掉电不会丢失;
”是不是我下载的程序 下载到了 RAM中, 应该下载到FLASH里就对了“
再看看德州仪器的这款芯片的内存、IO、等设备与地址映射图: 下面哈
从德州仪器这款芯片设计可以看出:
地址: 0x00XXXX-(0X000800-1) 这一段是RAM 掉电就丢失了;32*32 +1K*16+1K*16
地址: 0x008000-(0X010000-1) 这一段是RAM 掉电就丢失了;8*4K*16
地址:0x30XXXX-(0x33FFF8-1) 这一段是FLASH 掉电不丢失;256K [靠 !运行码应该下载到这里吧]
地址: 0x3FXXXX-(0X3FC000-1)这一段是RAM 掉电就丢失了;
地址:0x3FE000-(0x3FFFC0-1) 这一段是ROM 掉电 不丢失 但也写不进去 芯片出厂被写死写,类似BIOS
2、 找找这个芯片编程手册、直接写下结论、手册说在编译源程序是有下载配置文件,nonBIOS 一共有三个
【1】DSP2833x_Headers_nonBIOS.cmd【2】 28335_RAM_lnk.cmd 【3】F28335.cmd 这是德州仪器编译系统给的。
1) 如果运行码在RAM运行 使用 文件【1】和【2】
2) 如果运行码在FLASH运行 使用 文件 【1】和【3】
一般放在项目目录下,我放在了这里(这个是运行在RAM)
3、DSP2833x_Headers_nonBIOS.cmd的内容:
/*
// TI File $Revision: /main/5 $
// Checkin $Date: May 11, 2007 13:43:46 $
//###########################################################################
//
// FILE: DSP2833x_Headers_nonBIOS.cmd
//
// TITLE: DSP2833x Peripheral registers linker command file
//
// DESCRIPTION:
//
// This file is for use in Non-BIOS applications.
//
// Linker command file to place the peripheral structures
// used within the DSP2833x headerfiles into the correct memory
// mapped locations.
//
// This version of the file includes the PieVectorTable structure.
// For BIOS applications, please use the DSP2833x_Headers_BIOS.cmd file
// which does not include the PieVectorTable structure.
//
//###########################################################################
*/
MEMORY
{
PAGE 0: /* Program Memory */
PAGE 1: /* Data Memory */
DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */
FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */
CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */
ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */
XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */
CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */
CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/
CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/
PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */
PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */
DMA : origin = 0x001000, length = 0x000200 /* DMA Rev 0 registers */
MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */
MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */
ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */
ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */
ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */
ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */
ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */
ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */
ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */
ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */
ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */
ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */
EPWM1 : origin = 0x006800, length = 0x000022 /* Enhanced PWM 1 registers */
EPWM2 : origin = 0x006840, length = 0x000022 /* Enhanced PWM 2 registers */
EPWM3 : origin = 0x006880, length = 0x000022 /* Enhanced PWM 3 registers */
EPWM4 : origin = 0x0068C0, length = 0x000022 /* Enhanced PWM 4 registers */
EPWM5 : origin = 0x006900, length = 0x000022 /* Enhanced PWM 5 registers */
EPWM6 : origin = 0x006940, length = 0x000022 /* Enhanced PWM 6 registers */
ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */
ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */
ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */
ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */
ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */
ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */
EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */
EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */
GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */
GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */
GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */
SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */
SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */
SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */
XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */
ADC : origin = 0x007100, length = 0x000020 /* ADC registers */
SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */
SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */
I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */
CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */
PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */
}
SECTIONS
{
PieVectTableFile : > PIE_VECT, PAGE = 1
/*** Peripheral Frame 0 Register Structures ***/
DevEmuRegsFile : > DEV_EMU, PAGE = 1
FlashRegsFile : > FLASH_REGS, PAGE = 1
CsmRegsFile : > CSM, PAGE = 1
AdcMirrorFile : > ADC_MIRROR, PAGE = 1
XintfRegsFile : > XINTF, PAGE = 1
CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1
CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1
CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1
PieCtrlRegsFile : > PIE_CTRL, PAGE = 1
DmaRegsFile : > DMA, PAGE = 1
/*** Peripheral Frame 3 Register Structures ***/
McbspaRegsFile : > MCBSPA, PAGE = 1
McbspbRegsFile : > MCBSPB, PAGE = 1
/*** Peripheral Frame 1 Register Structures ***/
ECanaRegsFile : > ECANA, PAGE = 1
ECanaLAMRegsFile : > ECANA_LAM PAGE