完整的工程
需要.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中。下面链接是我整理的源出处,写的很好。