首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

哈工大DSP精品讲义!!!(连载)

所有浮点型(float,double和long double)相似,在TMS320C2x/C2xx/C5x中都是用32位浮点格式来表示。long和float类型以低有效字存储在低端的存储地址。

注:在TMS320C2x/C2xx/C5x C语言中,字节长度为16位,sizeof操作符返回的对象长度是以16位为字节长度的字节数。例如sizeof(int) = 1。

13.1.3 寄存器变量

C编译器在一个函数中最多只能用两个寄存器变量, 而且必须在参数表或函数的开始处声明。在嵌套块中的寄存器变量定义被认为是一般的变量。

编译器用AR6和AR7作寄存器变量: AR6被指定为第一个寄存器变量。 AR7被指定为第二个寄存器变量。

变量的地址放在指定的寄存器中,访问起来更加容易。16位的字节变量(char,short,int和pointer)

可以用作寄存器变量。在运行时,设置每一个寄存器变量需要四条指令为了有效地利用这种方式,只有在一个变量被多次访问时,才使用寄存器变量。 程序优化编译器也会定义寄存器变量,但使用方式不同。编译器会自己决定哪些变量作为寄存器变量,程序中声明的寄存器变量会全部被忽略。


13.1.4 asm语句

TMS320C2x/C2xx/C5x的C编译器可以在编译器输出的汇编语言中直接嵌入汇编语言指令。这种能力是C语言的扩展—

—asm语句。asm语句能够实现一些C无法实现的功能。

/*******************************************************/

asm(" clrc INTM");

/******************************************************/

对于嵌入的汇编指令,编译器不会进行语法检查, 编程者必须确认嵌入的指令合理有效。使用asm指令的时候应小心不要破坏C语言的环境。如果C代码中插入跳转指令和标识符可能会引起不可预料的操作结果。能够改变块或其它影响汇编环境的指令也可能引起麻烦。 对带asm语句的代码使用优化器时要特别小心。尽管优化器不能删除asm指令,但它可以重新安排asm 指令附近的代码顺序,这样就可能会引起不期望的结果。

13.1.5 访问I/O空间

I/O空间地址声明

要在程序中访问io空间地址,必须首先用关键字

“ ioport”对要访问的地址进行定义。

语法:ioport type porthex_num

ioport 声明io空间端口变量的关键字;

type 变量类型,可以为char, short, int或

unsigned int;

type 变量类型,可以为char, short, int或

unsigned int;

porthex_num 端口号,port后面接16进制数字。

/*******************************************/

ioport unsigned int port10;

/****************************************/

注:声明io空间地址必须在C文件起始声明,不允许

在函数中使用ioport声明io空间地址。


----------------------- Page 14-----------------------

I/O空间地址访问

访问用ioport关键字声明的I/O端口变量和访问一般变量没有区别。

/***********************************************************/

ioport unsigned int port10; /* 访问I/O端口10h的变量 */

int func ()

{

...

port10 = a; /* 写 a到端口 10h */

...

b = port10; /* 读取端口10h的值到 b */

} /***********************************************************/

I/O端口变量的使用不仅仅局限于赋值,和其他变

量同样也可以应用于其它的表达式。

/***********************************************************/

call (port10); /* read port 10h and pass to call */

a = port10 + b; /* read port 10h, add b, assign to a */

port10 += a; /* read port 10h, add a, write to port 10h */

/***********************************************************/

程序中访问的任何一个IO地址都必须在C语言程序

起始处用ioport关键字声明!

13.1.6 访问数据空间

访问数据空间不需要对要访问的单元预先声明,访问是通过指针的方法

实现的。

/***********************************************************/

unsigned int org,cnt,block,offset,tmp,i;

org = *(unsigned int *) 0x8000;

cnt = *(unsigned int *) 0x8001;

block = *(unsigned int *) 0x8002;

offset = *(unsigned int *) 0x8003;

for (i=0; i<cnt; i++)

tmp = *(unsigned int *) (org + i);

*(unsigned int *) (org + offset +i) = tmp;

/***********************************************************/

cnt = *(unsigned int *) 0x8001;

block = *(unsigned int *) 0x8002;

offset = *(unsigned int *) 0x8003;

for (i=0; i<cnt; i++)

tmp = *(unsigned int *) (org + i);

*(unsigned int *) (org + offset +i) = tmp;

/***********************************************************/

*(unsigned int *) (org + offset +i) = tmp;

/***********************************************************/


13.1.7 中断处理

(1)中断处理方法

(1)中断处理方法

查询法

程序通过查询中断标志位来判断是否有中断发生,并 进行相应的处理。

优点:流程易于控制,不会发生中断嵌套的问题,一 般也不会发生丢失中断的问题。

缺点:中断实时性差。

回调法

为中断指定一个回调函数,即中断服务程序。将中断服务程序的入口地址放在中断向量处。

优点:中断实时性好,程序结构简洁,类似于windows操作系统下事件驱动的编程方式。 缺点:处理不好容易造成中断嵌套或丢失中断。

返回列表