EDA365电子论坛网

标题: DSP 的 C 语言的特殊性 [打印本页]

作者: three    时间: 2021-9-18 15:30
标题: DSP 的 C 语言的特殊性
大家在使用 51 系列 C 语言时已经注意到,控制器的 C 语言和 PC 机上使用的 C 有一个显著 的特点:经常要对硬件操作,程序中有大量针对控制器内部资源进行操作的语句。所以,开 发者要明白怎样用 C 语言来操纵控制器的内部资源,即怎样用C语句操作寄存器和内部存 储器等。- E! Y. i3 Y; O1 |  Z6 P7 `
4 J1 s2 _: ]8 G$ G6 i3 u2 q& U
举个例子:在 51 汇编中我们写 MOV A,#20H;汇编程序能够识别 A 是指累加器;而在 51 的 C 程序中我们写 ACC=32;,编译器能够识别 ACC 是指累加器而不是一般的变量。即 每一个寄存器都有一个专有名字供开发者使用,它们定义在一个头文件 reg51.h 中,程序 员只需在程序的开始部分用#include“reg51.h”语句将该文件包含进来即可。注意:这些 寄存器的名字不能用作变量名。8 x% _/ a4 m0 M0 E: g* K$ ]

: ?, Q! _  o. S! x! ^3 L* [0 D同样,在 TMS320F240 的 C 语言中也有一个头文件 C240.H 定义各个寄存器的名称,这里 摘录几条语句进行介绍。) W  z/ a" j! O9 ?' d( E; d& f9 w

- Z) M7 a1 m. L/ N: p( o3 J& W6 S2 m比如:#define IMR((PORT)0x0004) #define XINTI_CR((PORT) 0x07070); w# K0 e# u* s) V1 S* g

: c) Q7 `# O8 [+ `0 v2 O& A' qIMR、XINT1_CR 就对应两个寄存器,实际是寄存器的地址,用高级语言的说法是指针。我 们也在程序的开始部分用#include“c240.h”语句将该文件包含进来。这样,在 DSP 的 C 语言中使用它们只需在前面加一个星号(*),例如,
' M. u* t0 }8 ^9 R% _7 Q! [1 T
: v3 }5 j% Z( ~4 i*IMR=0X1010;/*将十六进制数 1010H 赋给 IMR 寄存器*/ *XINT1_CR=0X0A0B0;/*将十六进制数 A0B0H 赋给 XINT1_CR 寄存器*/, E& _. r0 d2 U/ Q, j% a

5 _  o/ y, z' \& J开发者最好将 c240.h 这个文件打印出来,弄清楚各个寄存器的定义名称。至于不涉及硬件 的语法和 ANSI 语法一样。需要注意的是,有些 ANSI 标准中的函数在 DSP 的编译器中不提 供,读者可以参考 DSP 编译器的 C 语言手册。搞清楚了这些特殊性,由汇编语言转到C语言开发是很容易的事。当然,没有汇编语言编程基础的人同样可以用 C 语言开发 DSP 应用 系统。

6 i3 E" Q. x6 a) l- x) `
作者: xiananUZI    时间: 2021-9-18 17:05
要弄清楚各个寄存器的定义名称




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2