⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 支持ti的dsp 5402的基本运行的c程序,简洁好用
💻 CPP
字号:
/*-----------------------------------------------------------------------------------
                  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 作于特殊的节日来奉贤给大家~~~
-----------------------------------------------------------------------------------*/

#include "main.h"

class SystemObj System;
class TimerObj Timer;
class FlashObj Flash;

RTDX_CreateInputChannel(ichan);
RTDX_CreateOutputChannel(ochan);
int main(void)
{
int state;
unsigned short data;
	__disable_interrupt();
	SWI_Reset();//软件中断复位
	Flash.ChipErase();//
    RTDX_enableOutput(&ochan);
	RTDX_enableInput(&ichan);
	state = RTDX_read( &ichan, &data, sizeof(data));
	while(1)
	{
		__no_operation();
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -