您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

TMS320C32 DSP的中断编程方法及BOOT功能实现

时间:2007-1-20栏目:电子通信论文

c_int00是个特殊函数,是C程序的入口点,是为系统复位中断保留的,其功能是用于系统初始化和调用main函数。这个函数包含在运行支持库中,必须与其它的C目标模块相链接。在链接时,使用-CR选项,并包含RTS30.LIB,则c_int00就自动接入。链路C程序时,链接器将可执行模块的入口点设置为c_int00。
(范文先生网www.fwsir.com收集整理)
3 程序设计实例

本程序采取定时器中断方式对0x8100

50口取返,控制外部驱动的LED管闪烁,同时运行AD采样子程序,进行数据采集。由于篇幅所限,采样子程序不加详述,用户可以根据需要自行编写。具体程序如下:

/*led ioport address 810050h,810040H-81005FH.*/

#define vec_addr (volatile int)0x880100;

/*定义中断向量表表首*/

void c_int09(); /*声明中断处理函数*/

volatile int *io_in =(volatile int *)0x810050; /*定义LED接口地址指针*/

volatile int *io_add = (volatile int *)0x808000; /*定义C32控制寄存器表表首*/

volatile int *intvec =(volatile int *)0x880100; /*中断向量表表首指针*/

main()

{

asm("ldi 8801h,r0"); /*8801H送R0*/

asm("lsh 16,r0"); /*左移16位,变成88010000H*/

asm("ldi r0,if"); /*88010000H送IF,定位中断向量表,并清除所有中断标志*/

io_add[0x28] = 0x3ffff; /*给定时器0周期寄存器赋值*/

io_add[0x20] = 0x301; /*设置定时器的控制寄存器*/

intvec[9]=(volatile int)c_int09; /*设置定时器中断向量*/

asm("or 300h,ie"); /*使能定时器中断*/

*io_in = 0x00; /*LED控制口赋初值,LED亮*/

io_add[0x20] = 0x3c1; /*启动定时器*/

asm("or 2000h,st"); /*全局中断使能*/

for(;;); /*等待中断*/

}

void c_int09()

{ *io_in = ~(*io_in); /*取反,LED闪烁*/

ad_convert(); /*用户的采样子程序*/

}

在使用ASM嵌入语句时,要注意引导后应有空格或者一定的缩进量,否则编译器会把指令当成标号,出现编译错误;同时编译控制项要用-V32,而不要用-V30,否则链接器会把文件按照TMS320C3X的其它型号而不是TMS320C32来链接,这样生成的BOOT文件就不能在TMS320C32下运行了。

4 BOOT功能实现

上一页  [1] [2] [3] [4] 下一页

下页更精彩:1 2 3 4 下一页

★相关文章: