TMS320C32 DSP的中断编程方法及BOOT功能实现
(凹丫丫范文网fanwen.oyaya.net收集整理)
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功能实现
在程序调试完毕后就可把最终的COFF可执行文件
《TMS320C32 DSP的中断编程方法及BOOT功能实现(第2页)》