2 F28335数字输入/输出单元的学习与应用
复位信号,最简单的处理方法是禁用Watchdog,这通过对WDCR寄存器的bit6置1实现。当然,这不是一个明智的决定,因为Wachdog是一种安全措施,在实际的工程中,应当尽量包括进去。
Wachdog预分频器可以用来增大Watchdog的溢出周期。逻辑检测位(WDCHK)是另一个安全位域,所有对WDCR寄存器的写操作都必须先向该3位写入“101”,否则写操作将被拒绝,而且一个复位信号将会立即被触发。
Wacthdog状态位(WDFLAG)可以用来区分一个正常的上电复位操作(WDFLAG=0)和一个Watchdog复位操作(WDFLAG=1)。注意:软件操作时,改位写1清零。如下图所示。
在Watchdog计数器溢出之前,我们可以通过如下的指令序列对其进行清零: EALLOW;
SysCtrlRegs.WDKEY = 0x55; SysCtrlRegs.WDKEY = 0xAA; EDIS;
2.1.6 系统控制和状态寄存器(SCSR)
SCSR寄存器控制复位操作由Watchdog触发(WDENINT==0)还是由外部中断请求触发(WDENINT=1)。WDOVERRIDE位是一个仅能清零的位,一旦向此位写1关闭了该开关,将不能在将其打开。这种情况下,无法再禁用Watchdog。Bit2(WDINTS)是一个标志Wacthdog中断的只读位。下图是SCSR寄存器框图。
49
3 F28335中断系统的学习与应用
2.2 应用实验
2.2.1 实验基本功能
使用LED1——LED4进行二进制点灯计数,使用PB1和PB2控制计数的启动和停止。
当第一次按下PB1时,LED计数开始;随后按下PB2,计数暂停;再次按下PB1时,LED接着从之前停止的位置开始计数。
计数间隔由延时子程序来实现,在延时子程序的每个循环中,清零看门狗定时器,以防其计数溢出产生复位信号。
2.2.2 相关引脚分配
各个LED和PB所对应的引脚如下表。
LED1 LED2 LED3 LED4 PB1 PB2
GPIO9 GPIO11 GPIO34 GPIO49 GPIO17 GPIO48
2.2.3 关键程序说明
延时子程序delay_loop()
对延时子程序关键语句注释说明如下:
2 F28335数字输入/输出单元的学习与应用
void delay_loop(long end) { long i; static unsigned int run = 0; // 控制标志 for (i = 0; i < end; i++) { do { EALLOW; SysCtrlRegs.WDKEY = 0x55; SysCtrlRegs.WDKEY = 0xAA; // 喂狗操作 EDIS; if(FUN1 == 0 && FUN2 == 1) run = 1; // 当按下PB1时,开始执行控代码 } while(!run); // run=0一直在do-while中循环;run=1做for循环 if(FUN2 == 0) run = 0; }
2.2.4 源程序
完整源程序见正文后附录1。
2.2.5 实验结果
运行程序后,按下PB1,LED开始二进制计数,当按下PB2时,计数停止;再次按下PB1,计数继续进行。与设计目标相一致。
以下是实验现场的两幅照片,相关视频已放入所提交的文件夹中。
49
3 F28335中断系统的学习与应用
3 F28335中断系统的学习与应用
首先,中断由如下基本定义:
(1) 中断的发生时“突然的”:用术语来说,中断是“异步”的; (2) 中断具有优先级,即各个中断重要性不同; (3) 中断必须立即被处理;
(4) 中断以后要恢复现场,即恢复到中断产生前的状态; (5) 中断延迟越小越好。 对该术语总结如下:
中断是由外部或者内部的硬件单元产生的异步事件,该事件导致控制器打断当前程序的执行,转去执行一段该事件特定的服务程序,执行完中断服务程序之后,被打断的程序恢复执行。
一个CPU执行该“任务切换”的速度越快,就越适用于实时控制。
3.1 F28335中断系统简介
3.1.1 F28335的中断线
F28335总共有16条中断线,如下图所示。其中RESET和NMI为两个不可屏蔽中断,另外14条中断线都是可屏蔽的——编程者可以允许或者禁用这14条中断线。
所有16条中断线都被连接到中断向量表,每个中断有32位内存位。
3 F28335中断系统的学习与应用
3.1.2 F28335的复位
外部“RESET”引脚的一个下跳沿会触发DSC的复位,该引脚上的下一个上升沿会强制CPU从程序存储器地址0x3F FFC0读代码的起始地址。从旧程序会被恢复的角度来讲,复位不算是一个“中断”。DSC在上电时会产生复位。
另一个复位信号源是看门狗定时器的计数溢出。如下图所示。
复位还会清零内部所有的运行寄存器、复位一组CPU状态位至初始状态和禁用所有16条中断线。
3.1.3 复位引导
在一个复位信号被释放后,CPU开始执行ROM中第一个代码段,叫作“引导装载程序(boot loader)”。这个功能下一步操作由四个GPIO引脚(GPIO87,86,85和84)的状态决定。如下两图所示。
49