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

DSP 的 C 语言的特殊性

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
大家在使用 51 系列 C 语言时已经注意到,控制器的 C 语言和 PC 机上使用的 C 有一个显著 的特点:经常要对硬件操作,程序中有大量针对控制器内部资源进行操作的语句。所以,开 发者要明白怎样用 C 语言来操纵控制器的内部资源,即怎样用C语句操作寄存器和内部存 储器等。
1 J4 J' U1 @& O( P
1 d% @( T! g* H0 L% @" J6 k6 U8 M& Z举个例子:在 51 汇编中我们写 MOV A,#20H;汇编程序能够识别 A 是指累加器;而在 51 的 C 程序中我们写 ACC=32;,编译器能够识别 ACC 是指累加器而不是一般的变量。即 每一个寄存器都有一个专有名字供开发者使用,它们定义在一个头文件 reg51.h 中,程序 员只需在程序的开始部分用#include“reg51.h”语句将该文件包含进来即可。注意:这些 寄存器的名字不能用作变量名。
5 q1 v# y2 D, t, ^8 x; H" |9 o7 D1 q! \
同样,在 TMS320F240 的 C 语言中也有一个头文件 C240.H 定义各个寄存器的名称,这里 摘录几条语句进行介绍。& T" [' Z6 e  |( b& |4 T
; u% i% _8 U4 `. w: Q) C4 `
比如:#define IMR((PORT)0x0004) #define XINTI_CR((PORT) 0x07070)
# q1 ^" s4 i5 b( p2 @% k6 d
( N4 ]3 w/ v+ w+ s! NIMR、XINT1_CR 就对应两个寄存器,实际是寄存器的地址,用高级语言的说法是指针。我 们也在程序的开始部分用#include“c240.h”语句将该文件包含进来。这样,在 DSP 的 C 语言中使用它们只需在前面加一个星号(*),例如,
7 A" w+ T; W& _- |. }3 I, g
- `+ a5 p% I, Y6 A+ X( e9 {*IMR=0X1010;/*将十六进制数 1010H 赋给 IMR 寄存器*/ *XINT1_CR=0X0A0B0;/*将十六进制数 A0B0H 赋给 XINT1_CR 寄存器*/
# |( u0 p$ c) A6 g5 w( {8 F- f, n# C) \- I4 @
开发者最好将 c240.h 这个文件打印出来,弄清楚各个寄存器的定义名称。至于不涉及硬件 的语法和 ANSI 语法一样。需要注意的是,有些 ANSI 标准中的函数在 DSP 的编译器中不提 供,读者可以参考 DSP 编译器的 C 语言手册。搞清楚了这些特殊性,由汇编语言转到C语言开发是很容易的事。当然,没有汇编语言编程基础的人同样可以用 C 语言开发 DSP 应用 系统。

8 E. O& P4 S- n5 g! K

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-13 04:37 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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