新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 混合信号嵌入式设计实验指南-数字实验之:实验2—中断

混合信号嵌入式设计实验指南-数字实验之:实验2—中断

作者:时间:2013-12-26来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/256987.htm

1.2.1 实验2A—发布

使用INT_CLRx 寄存器访问发布的。通过INT_CLR0 寄存器的第6 比特位来控制休眠定时器发布。当该位的值为“1”时,将发布一个定时器的中断。将该位设置为“0”时,将清除所发布的中断。

步骤1:创建新的工程。

工程名字为Lab2A

—选择C 选项;

—用于器件类型及其设置的标准实验设置;

—转到互联界面,将全局参数Sleep_Timer 设置为1Hz (这将使得休眠定时器每一秒钟产生一个等待处理的中断);

—按表1.3 设置四个端口引脚。

1.3 端口驱动设置

名字(Name)

端口(Port)

选择(Select)

驱动(Drive)

LedOut1

P1[0]

StdCPU

Strong

LedOut2

P1[1]

StdCPU

Strong

LedOut3

P1[2]

StdCPU

Strong

LedOut4

P1[3]

StdCPU

Strong

步骤2:在Eval1 板子上添加跳线。

使用跳线进行下面的连接—P10 到LED1 —P11 到LED2 —P12 到LED3

P13 到LED4 。生成应用。步骤3:写软件。转到应用程序编辑器,打开如图1.14 所示的main.c 文件。如图1.15 所示,添加代码。该程序应注意:bShadow 定义成一个全局单字节变量。INT_CLR0 寄存器用来监视和清除休眠定时器已经发布的中断。

图1.14 main.c 原型

图1.15 Lab2A 控制软件

练习2A-2 :这段代码的作用是什么?

步骤4:下载并运行。建立工程,并验证工程没有错误;下载程序到Eval1,并且运行;用LED 的输出来验证操作。练习2A-3:LED 的操作和练习2 中预测的一样吗? 返回互联视图,将休眠定时器参数改为8Hz 。练习2A-4 :当休眠定时器的参数为8Hz 时,对LED 的输出有什么影响? 重新生成应用,重新建立工程,下载到Eval1 板子,并且运行。

练习2A-5 :观察结果是否确认了练习2A-4 的预测?

1.2.2 实验2B—待处理的中断

步骤1:复制Lab2A。打开Lab2A。将工程保存为Lab2B。打开这个新的工程,并转到布局视图。保持当前Eval1 板上的跳线状态。重新生成应用。CPU_SCR0 是一个寄存器,当第3 位设置为高时,系统处于低功耗休眠模式。在这个模式下,禁止系统时钟。为了唤醒时钟,必须清除该位的设置。因为CPU 没有操作,因此通过定义CPU 不能清除该位。只有出现任何待处理的中断时,才能清除该位。在其中的一个INT_MSKx 寄存器中,对合适的位进行设置,将使能一个待处理的中断。当INT_MSK0 寄存器的第6 位设置为高时,使能休眠定时器中断。

对于更多可读的代码,系统定义了M8C_Sleep 为(CPU_SCR0|=0x08)。这将引起系统进入休眠模式。步骤2:修改代码。转到应用程序编辑器,打开main.c 。进行下面的修改。

—使用INT_MSK0 ,使能休眠定时器中断。

—使用休眠命令代替代码中用于等待一个已发布中断的部分。重新建立工程,下载到Eval1 板子,并且运行。验证程序正确的工作。

练习2B-1:为什么你想使用休眠模式来代替轮询已发布的休眠定时器中断?练习2B-2:为什么你想轮询,而不是将系统进入到休眠模式?

1.2.3 实验2C—全局中断

步骤1:创建新的工程。

复制Lab2B,将其命名为Lab2C。

所有参数和跳线连接保持一样。

重新生成应用。

可以使用两种不同的方法清除已经发布的中断。正如以前给出的那样,通过清除INT_CLR0 的第6 比特位来强迫清除。另一个方法是服务中断。最小的中断服务例程被放置在中断向量地址的“reti” 。所有这个例程将CPU 的操作返回到原来的程序。用于这个中断服务程序的术语称为“stub” (存根)。

打开boot.asm ,并且验证在休眠定时器向量位置存在一个存根。

练习2C-1:在这个向量位置有多少代码空间可以使用?

练习2C-2:假设需要更多的空间,你将如何做?

设置标志“F”寄存器的第0 比特位,使能全局中断。相反清除该位将禁止全局中断。对于更多的可读代码,系统定义了M8C_EnableGInt 为asm“or F,01h”。它使能全局中断。“asm() ”是一个函数,其允许在C 程序中嵌入汇编命令。

步骤2:修改代码。

转到应用程序编辑器中,打开main.c 。

进行下面的修改。

—添加代码使能全局中断。

—删除用于清除休眠定时器中断的代码。

重新建立工程,下载到Eval1,并运行。

像前面一样验证程序。



评论


相关推荐

技术专区

关闭