wuyouwuyou

c语言中对于汇编的调用

0
阅读(2569)

首先是对系统参数的设置,包括DP指针,矢量表的起始地址,定时器的参数设置。这些设置过程,实际上就是对每个相关的寄存器的值的设定。为了正确的设置这些值,一是要理解每个寄存器的每个比特代表什么意思,而是要通过分析设计的要求,计算出这些值的大小。如果对寄存器的比特位的意思不是很理解,可以使用CCS的Help菜单。CCS的Help功能非常强大,几乎包含了编程时候需要的关于DSP的一切信息。对于这些寄存器赋值的方法有两种,一种是使用C语言中嵌套汇编语句的方法,因为这样可以利用各个寄存器的助记符,直接赋值给这些助记符;二是可以使用C语言的指针功能。我们知道,DSP的所谓每一个寄存器,实际上都是存储器映射寄存器,他们本质上都是DSP位于数据区开始的一些存储空间。用指针的方法对这些地址赋值,实际上就是对寄存器赋值。同学们可以使用两种方法分别尝试,在数据空间观察两种方法结果的异同。 

C语言文件的第二部分是中断服务程序。服务程序的子程序名称要和中断矢量表中跳转指令的标号一样,只是没有了下划线。指令的内容就是根据前面的推导,使用递推的方法,每次执行一次中断函数就产生一个数据。程序的原理前面已经讲解了。C程序代码如下:

main()

{

int *dest;

  dest = (int *)IMR;

  *dest = 0;

 

  dest = (int *)PMST;

  *dest = 0x1020;       /*  interrupt vector at 0x1000 */

 

  dest = (int *)TCR;

  *dest = 0x0010;

 

  dest = (int *)PRD;

  *dest = 2499;

 

  dest = (int *)IMR;

  *dest = 0x0008;           /* enable timer0 TINT0  */

 

  dest = (int *)TCR;

  *dest = 0x0030;

  *dest = 0x0000;

 

  asm (" rsbx intm");

}