DSP_2812学习记录1

完整的工程

需要.h文件.lib文件.c文件.cmd文件(移植不同的DSP也需要这几个文件)

在不同文件夹下分别放好cmd/头文件、源文件时,需要配置include的路径,直接放一个文件夹时不需要配置include文件。

寄存器的访问

2812具有32位的数据地址和22位的程序地址

1个字是32位=4个字节(一个字节是8位)----不同的DSP是不同的需要取查一下实际是多少位的。

比如SCICCR 地址是0x0000 7050,占的空间是16位(用来两个字节)---寄存器宽度是16位的。实际使用中只用了低8位,高八位保留了。

 

一般我们操作的时候这个就是直接操作位了,或者整体操作,和stm32寄存器操作是类似的。

综上所有的寄存器都是这样看的。

 寄存器定义好了以后---->需要分配到数据空间DATA_SECTION---->SECTION(一般是自己修改这里的东西)加载实际的物理地址---实际的地址都在memory中定义好了。

实际编写自己想定义的cmd文件步骤

1、在主程序开始前编写---个人是放在主程序的

_RamfuncsLoadStart这个在头文件定义了,因为我是修改的

这个定义在global的头文件中了。

#pragma CODE_SECTION(cpu_timer0_isr(自己起的名字), "ramfuncs");

//将CPU中断函数分配到段ramfuncs,用的时候把红色部分删除。

2、找到cmd文件,找到SECTION文件,写在SECTION任何地方都可以

修改相对应的ramfuncs加载方式

   ramfuncs       : LOAD = FLASHD,  /*Section ramfucs to go in flashD and copy to RAML4L5*/
                         RUN = RAML4L5,(这个部分是我自己想放在这个RAM中)
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         LOAD_SIZE(_RamfuncsLoadSize),
                         PAGE = 0

意思是,我cpu_timer0_isr的程序放在了ramfuncs中,存储的区域为FLASHD,初始化后运行的区域为RAML4L5。(这个部分是我自己想放在这个RAM中)需要删除

整理一个别人的例子。

比如我想定义一个函数放在一个ram中,本身是程序烧录在flash中,但是我想让他运行快一点。

第一步:这个在主函数之前定义,也是main函数之前

extern Uint16 MyspaceLoadStart;
extern Uint16 MyspaceLoadEnd;
extern Uint16 MyspaceRunStart;
 
//define user Functions
void beep();
#pragma CODE_SECTION(beep,"Myspace")

这个external uint16这几个是我自己定义的,也可用人家现成的

声明了CMD文件中拥有的地址,并为定义的函数beep()划分了相应的存储运行空间,也就是上面定义的Myspace

第二步,在main函数调用初始化,

void main()
{
    InitSysCtrl();
 
    MemCopy(&MyspaceLoadStart, &MyspaceLoadEnd, &MyspaceRunStart);
 
    InitFlash();
    Gpio_init();
    while(1)
    {
        //SRAM中程序运行速度是flash中的两倍
        beep();
    }
}

在主函数中加入MemCopy()InitFlash()函数,后者确保了函数烧写在了Flash中,并且Flash可以正常工作。前者则是将Flash中的介于MyspaceLoadStart, MyspaceLoadEnd之间的代码搬运到RAM中进行初始化。

第3步,在SECTIONS中加入我定义的这会函数的绝对位置

SECTIONS
{
  /*其余的我没加上,表明这个自己编写的可以放在任意位置*/
   /* User Define areas below: */
   Myspace       	   : LOAD = FLASHH,
                         RUN = RAML3,
                         LOAD_START(_MyspaceLoadStart),
                         LOAD_END(_MyspaceLoadEnd),
                         RUN_START(_MyspaceRunStart),
                         LOAD_SIZE(_MyspaceLoadSize),
                         PAGE = 0
   /* User Define areas above: */
   
}

从图中可以看出,划分的区域叫作Myspace,存储的区域为FLASHH,初始化后运行的区域为RAML3

      其中的_MyspaceLoadStart等地址划分不用管,CCS会自动生成相应的地址区域,名称可以任意,注意格式即可

第4步,memory中的不需要修改。

以上就完成了我的函数下载到flash,运行到RAM中。下面链接是我整理的源出处,写的很好。

第一篇

第二篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值