找回密码
 注册
关于网站域名变更的通知
查看: 317|回复: 1
打印 上一主题 下一主题

DSP 的 C 语言的特殊性

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-18 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
大家在使用 51 系列 C 语言时已经注意到,控制器的 C 语言和 PC 机上使用的 C 有一个显著 的特点:经常要对硬件操作,程序中有大量针对控制器内部资源进行操作的语句。所以,开 发者要明白怎样用 C 语言来操纵控制器的内部资源,即怎样用C语句操作寄存器和内部存 储器等。- F  t4 A( j) I9 N' x8 L
$ ^+ N; @8 n" c2 A+ c+ B
举个例子:在 51 汇编中我们写 MOV A,#20H;汇编程序能够识别 A 是指累加器;而在 51 的 C 程序中我们写 ACC=32;,编译器能够识别 ACC 是指累加器而不是一般的变量。即 每一个寄存器都有一个专有名字供开发者使用,它们定义在一个头文件 reg51.h 中,程序 员只需在程序的开始部分用#include“reg51.h”语句将该文件包含进来即可。注意:这些 寄存器的名字不能用作变量名。
; a8 ~' q4 H5 |" w& ~' O! L
' u4 a2 D$ x/ l8 k- o$ c2 ^9 q# j同样,在 TMS320F240 的 C 语言中也有一个头文件 C240.H 定义各个寄存器的名称,这里 摘录几条语句进行介绍。
6 O+ _7 w/ G, c) @
! G% q7 n$ q; ?# F, [0 {比如:#define IMR((PORT)0x0004) #define XINTI_CR((PORT) 0x07070), Z: p& F/ I# g* h; f* b. d

1 b3 d7 ?: A2 P* V8 C: \+ u- ^2 VIMR、XINT1_CR 就对应两个寄存器,实际是寄存器的地址,用高级语言的说法是指针。我 们也在程序的开始部分用#include“c240.h”语句将该文件包含进来。这样,在 DSP 的 C 语言中使用它们只需在前面加一个星号(*),例如,
- T% R$ s) ?4 M  v. @9 K3 y; |8 V1 u# ?
*IMR=0X1010;/*将十六进制数 1010H 赋给 IMR 寄存器*/ *XINT1_CR=0X0A0B0;/*将十六进制数 A0B0H 赋给 XINT1_CR 寄存器*/
4 ?* E4 K: [- @! ?
) B, l3 {# i( g, [开发者最好将 c240.h 这个文件打印出来,弄清楚各个寄存器的定义名称。至于不涉及硬件 的语法和 ANSI 语法一样。需要注意的是,有些 ANSI 标准中的函数在 DSP 的编译器中不提 供,读者可以参考 DSP 编译器的 C 语言手册。搞清楚了这些特殊性,由汇编语言转到C语言开发是很容易的事。当然,没有汇编语言编程基础的人同样可以用 C 语言开发 DSP 应用 系统。

# q. p3 O$ S2 N1 `+ t+ z4 o

该用户从未签到

2#
发表于 2021-9-18 17:05 | 只看该作者
要弄清楚各个寄存器的定义名称
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-11 18:20 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表