DSP中的 - c - int00的问题

更新时间:2024-03-19 01:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

_c_int00是c语言程序的入口。 我们知道,在DSP启动后,系统会进入复位中断,此时复位中断服务函数为c_init00,此函数用于建立C环境,为进入main()函数进行系统初始化,主要工作是建立堆栈,初始化全局变量等。 全局变量的初始化:如果程序在链接时采用-c选项,则编译链接后的可执行程序会将全局变量的初始化放在c_init00()函数中进行,在此函数中会调用_auto_init(CINIT)函数,将.cinit段的内容拷入.bss中相应的变量中,此过程是在系统上电后进入main()函数之前执行的。 如果程序在链接时采用-cr选项,则编译后的可执行程序中全局变量需要使用loader进行初始化,这种方法一般用于在JTAG调试时,CCS即为loader。 系统上电复位后,首先执行reset矢量代码,如果这个代码是我们写的话,我们就令CPU转到c_int00,这段程序为c语言运行做准备。准备工作完成后,就转到c语言的main()。 如果reset矢量代码不是我们写的,是TI公司写的那么就执行bootloader程序,该程序将从某个外部得到的真正程序放在规定的地方,改后转过去执行该代码。 那么如何决定reset矢量代码是ti写的还是我们写的,那就看复位后mp/mc脚的电平。要是调试的时候我们的mp/mc脚选择了我们不希望的方式,怎么办?(在调试的时候一般不管bootloader的,只有项目最后成功了才管),用jtag来控制。 C程序开始运行时,必须首先初始化C运行环境,这是通过_c_int00函数来完成的,这个函数在运行支持库(rts.lib)中。连接器会将这个函数的入口地址放在复位中断向量中,使其可以在初始化时被调用。 _c_int00函数为建立C运行环境,需完成以下工作: l 为系统堆栈产生.stack块,并初始化堆栈指针; l 从.cinit块将初始化数据拷贝到.bss块中相应的变量; l 调用main函数,开始运行C程序; l 用户可以对c_int00函数进行修改,但修改后的函数必须完成以上任务。 关于C6000的引导过程: CPU复位后首先把系统程序加载到内部RAM或者外部高速RAM中,然后在RAM中运行, bootloader就是完成加载的过程。 C6000有3钟引导方式(1)无引导(2)ROM引导 (3)主机引导 我只用过ROM引导。 ROM引导加载过程: (1)当CPU的Reset引脚处于低电平状态时,BOOTMODE的引脚状态根据预设设定(我的目标版 上面有这几个开关可设置),RESET信号处于上升沿的时候,相应加载方式启动。 (2)ROM加载方式是通过DMA控制器,将外部ROM的一段固定大小的代码复制到内部RAM中(加 载时CPU处于stall状态),对于不同型号芯片,复制的代码大小不同。67X的应该是1KB (3)加载完毕后,CPU开始从0地址执行。 想象一下,有的程序都很大,1K是不能解决问题的,所以,一般在0地址处建立一个叫做 “bootloader”的段(代码小于1KB),这一小段程序也叫“引导程序”,上电或者重启后首 先执行它,完成将其余程序(真正完成用户要求算法的程序)加载,然后跳转到主程序入口 地址运行。 举例: 我的目标版FLASH地址为0x9000 0000, 在完成源代码编写,编译,连接后生成*.out文件,通 过hex6x.exe工具转换成*.hex文件(16进制数据文件),然后使用Flashburn工具烧写到外部 Flash Rom中。 程序boot.asm ,功能:完成数据大小为FLASH_SIZE 的数据搬移,源地址FLASH_START,目的 地址RAM_START,搬移结束后跳转的主程序入口点_c_int00运行 FLASH_START .set 0x90000400 ;DMA已经加载可1KB(400H),所以地址从0x90000400开 始 RAM_START .set 0x400 FLASH_SIZE .set 0x40000 .ref _c_int00 .def start .sect \start: mvkl FLASH_START,A4 mvkh FLASH_START,A4 mvkl RAM_START,B4 mvkh RAM_START,B4 mvkl FLASH_SIZE,B5 mvkh FLASH_SIZE,B5 zero A1 loop ldw *A4++,B0 nop 5 stw B0,*B4++ add 1,A1,A1 cmplt A1,B5,B0 nop [B0] b loop nop 5 b _c_int00 nop 5

本文来源:https://www.bwwdw.com/article/bhv8.html

Top