|  | 
 
| 
本帖最后由 cjsb37 于 2013-4-29 09:05 编辑
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册  
 
 | hotpower 发表于 2008-6-14 03:06 德州仪器(TI) ←返回版面 |  | 楼主: DSP之裸奔框架C++程序源码(菜农C++裸奔大法之二)
 |  | 
 | /*----------------------------------------------------------------------------------- DSP之裸奔框架C++程序源码(菜农C++裸奔大法之二)
 本程序主要表现了C++多文件系统的DSP构建方法,任何支持C++的MCU/ARM/DSP都可用
 此法构建。
 特别要注意变量的重复定义问题:
 最好每个C/CPP文件包含与自己同名的H头文件,在其H头文件中再包含一个中间
 起桥梁作用的H头文件,我一般喜欢main.h
 变量或函数要在C/CPP中定义,绝对不要在H头文件中定义!
 但一定要在H头文件中用extern加变量或函数声明。
 C++中要切记全局的类的构造函数肯定要在main()前运行.
 一般类的成员函数是不能作为中断服务程序ISR()的,但Cortex-M3确是一个意外
 总之中断程序要用__interrupt修饰的ISR()的,其类成员函数不能为ISR()
 最好用一个单独的文件interrupt.cpp来编写所有中断服务程序ISR(),可能其
 H头文件什么都没有也最好加上。
 每个头文件的构成结构基本如下:
 #include "main.h"
 
 #ifndef __DSP5402_INTERRUPT_H
 #define __DSP5402_INTERRUPT_H
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 //在此添加C++代码
 extern "C" interrupt void Timer0Isr();
 #ifdef __cplusplus
 }
 #endif
 #endif//__DSP5402_INTERRUPT_H
 
 "桥梁"H头文件要包含所有用到的H头文件!!!否则"桥梁"倒塌~~~
 
 DSP也特别注意cmd文件的配置,因为它和板子的硬件有直接的联系,故其最为重要!!!
 
 DSP5402的最小配置的裸奔cmd文件:
 MEMORY
 {
 
 PAGE 0: /* Program Space */
 MMRS    (RW ) : o="000000h" l="000060h" /* Memory-mapped registers  */
 SCRATCH (RW ) : o="000060h" l="000020h" /* scratch-pad DARAM        */
 VECS    (RWX) : o="000080h" l="000080h" /* Interrupt Vector Table   */
 IPROG   (RWX) : o="000100h" l="001f00h" /* On-Chip DARAM            */
 PAGE 1: /* Data Space */
 IDATA   (RWX) : o="002000h" l="002000h" /* On-Chip DARAM            */
 }
 
 SECTIONS
 {
 .vectors    : > VECS    PAGE 0/* interrupt vector table            */
 
 .text       : > IPROG   PAGE 0 /* User code                         */
 .rtdx_text  : > IPROG   PAGE 0 /* RTDX code                         */
 .cinit      : > IPROG   PAGE 0 /* initialization tables             */
 .pinit      : > IPROG   PAGE 0 /* initialization functions          */
 .switch     : > IPROG   PAGE 0 /* for C-switch tables               */
 
 /* Normally, data would go to DMEM0, but OVLY="1" so put data in      */
 /* PMEM0 to keep loader from overwriting program with data.         */
 .sysmem     : > IDATA   PAGE 1 /*fill = 0DEADh*/ /* dynamic heap        */
 .stack      : > IDATA   PAGE 1 /*fill = 0BEEFh*/ /* system stack        */
 .const      : > IDATA   PAGE 1 /* C constant tables                 */
 .cio        : > IDATA   PAGE 1 /* C-IO Buffer                       */
 .bss        : > IDATA   PAGE 1 /* global & static vars              */
 .data       : > IDATA   PAGE 1 /* asm data area                     */
 .rtdx_data  : > IDATA   PAGE 1 /* RTDX data area                    */
 }
 适当地调节IPROG/IDATA即可玩转DSP5402的最小系统~~~
 今天特殊节日心情好,本包特别奉送SST39LF400A的驱动flash.h/flash.cpp.
 并特别注意C5402CFG.H也更新了~~~如下:
 //下列3句是IAR的习惯~~~
 #define __disable_interrupt() asm(" ssbx intm");//关中断
 #define __enable_interrupt()  asm(" rsbx intm");//开中断
 #define __no_operation() asm(" nop");//空操作
 
 //有点DSP/BIOS的味道~~~
 #define SWI_Reset()  asm(" TRAP 0");//DSP软中断复位
 
 参见包内带的gif文件就知道菜农要玩耍什么了~~~
 
 菜农HotPower@126.com   2008.6.14 2:28 作于特殊的节日来奉贤给大家~~~
 -----------------------------------------------------------------------------------*/
 
 下图是DSP/BIOS的,不属于裸奔系列,但里面的FLASH操作就是用本包内的
 
 flash.h/flash.cpp.
 
 
 
 点击下载: rtdxflash.rar
 
 | 
 | 
 
 
 
 
 
 
 
 
 | 
 |