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;
}
/***********************************************************/
13.1.7 中断处理
(1)中断处理方法
?查询法程序通过查询中断标志位来判断是否有中断发生,并进行相应的处理。
优点,流程易于控制,不会发生中断嵌套的问题,一般也不会发生丢失中断的问题。
缺点,中断实时性差。
?回调法为中断指定一个回调函数,即中断服务程序。将中断服务程序的入口地址放在中断向量处。
优点,中断实时性好,程序结构简洁,类似于
windows操作系统下事件驱动的编程方式。
缺点,处理不好容易造成中断嵌套或丢失中断。
(2)回调法处理中断的一般性问题
?中断服务函数可以和一般函数一样访问全局变量、分配局部变量和调用其它函数等。
?进入中断服务函数,编译器将自动产生程序保护所有必要的寄存器,并在中断服务函数结束时恢复运行环境。
?c_int0是保留的复 位中断处理函数,不会被调用,也不需要保护任何寄存器。
?要将中断服务函数入口地址放在中断向量处以使中断服务函数可以被正确调用。
?中断服务函数要尽量短小,避免中断嵌套等问题。
(3)用C编写中断服务函数有两种方式定义中断服务函数:a)任何具有名为c_int d 的函数( d为0到
9的数),都被假定为一个中断程序,c _int0函数留作系统复位中断用。
b)利用中断关键词interrupt进行定义。举例如下:
/***********************************************************/
void c_int1 ()
{
......
}
/***********************************************************/
interrupt void isr ()
{
......
}
/***********************************************************/
(4)C语言编写中断处理函数注意事项:
?中断处理函数必须是void类型,而且不能有任何输入参数。
?进入中断服务程序,编译器只保护与运行上下文相关的寄存器,而不是保护所有的寄存器。中断服务程序可以任意修改不被保护的寄存器,如外设控制寄存器等。
?要注意IMR、INTM等中断控制量的设置。
?中断处理函数可以被其他C程序调用,但是效率较差。
?多个中断可以共用一个中断处理函数,除了c_int0。
?使用中断处理函数和一些编译选项冲突,注意避免对包含中断处理函数的C程序采用这些编译选项。
13.2 C语言与汇编语言混合编程
C语言编写DSP程序对底层的了解要 求较低,流程控制灵活,开发周期短。
程序可读性、可移植性好,程序修改、升级方便。
某些硬件控制功能不如汇编语言灵活,程序实时性不理想,很多核心程序可能仍然需要利用汇编语言来实现。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-48.html