浙江工业大学 嵌入式系统原理 实验6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统实验六
6.1
#include "config.h"
#define LED1 1 << 18 // P0.18 控制LED1
/************************************************************************************* ******
** 函数名称:IRQ_Eint0()
** 函数功能:外部中断0服务程序
************************************************************************************** *****/
void __irq IRQ_Eint0 (void)
{ uint32 i;
i = IO0SET; // 读取当前LED1的控制值
if ((i & LED1) == 0) IO0SET = LED1;
else IO0CLR = LED1;
while ((EXTINT & 0x01) != 0)// 等待外部中断信号恢复为高电平
{ EXTINT = 0x01; // 清除EINT0中断标志
}
VICVectAddr = 0; // 向量中断结束
}
/************************************************************************************* ******
** 函数名称:main()
************************************************************************************** *****/
int main (void)
{
PINSEL1 = 0x00000001; // P0.16 连接EINT0
IO0DIR = LED1; // 设置LED1 控制口为输出,其余输入
EXTMODE = 0x00; // 设置EINT0为电平触发,极性寄存器使用默认值0
IO0SET = LED1;
IRQEnable(); // 使能IRQ中断
/* 打开EINT0中断(使用向量中断) */
VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断
VICVectCntl0 = 0x20 | 0x0e; // 分配外部中断0到向量中断0
VICVectAddr0 = (uint32)IRQ_Eint0; // 设置中断服务程序地址
EXTINT = 0x01; // 清除EINT0中断标志
VICIntEnable = 1 << 0x0e; // 使能EINT0中断
while (1); // 等待中断
}
#include "config.h"
#define LED1 1 << 18 // P0.18 控制LED1
#define EINT0 14 // EINT0 中断号
/************************************************************************************* ******
** 函数名称:main()
** 函数功能:初始化外部中断0 为FIQ 中断。
************************************************************************************** *****/
int main (void)
{ PINSEL1 = 0x00000001; // 设置管脚连接,P0.16 为EINT0
IO0DIR = LED1; // 设置LED1控制口为输出,其余输入
EXTMODE = 0x00; // 设置EINT0为电平触发, 极性寄存器使用默认值0
FIQEnable(); // FIQ中断使能
/* 打开EINT0中断(使用FIQ中断) */
VICIntSelect = 1 << EINT0; // 设置EINT0分配为FIQ中断
EXTINT = 0x01; // 清除EINT0 中断标志
VICIntEnable = 1 << EINT0; // 使能EINT0 中断
while (1); // 等待中断
}
#include "config.h"
#define LED1 1 // P0.0 控制LED1
#define LED2 1<<1 //P0.1控制LED2
#define EINT0 14 // EINT0 中断号
#define EINT1 15
/************************************************************************************* ******
** 函数名称:IRQ_Eint0()
** 函数功能:外部中断0服务程序
************************************************************************************** *****/
void __irq IRQ_Eint0 (void)
{ uint32 i;
i = IO0SET; // 读取当前LED1的控制值
i = i & 0x01;
if ((i & LED1) == 0) IO0SET = LED1;
else IO0CLR = LED1;
while ((EXTINT & 0x01) != 0)// 等待外部中断信号恢复为高电平
{ EXTINT = 0x01; // 清除EINT0中断标志
}
VICVectAddr = 0; // 向量中断结束
}
/************************************************************************************* ******
** 函数名称:main()
************************************************************************************** *****/
int main (void)
{
PINSEL1 = 0x00000001; // P0.16 连接EINT0
PINSEL0 = 0x20000000; //P0.14 连接EINT1
IO0DIR = 0x00000003; // 设置LED1,LED2 控制口为输出,其余输入
EXTMODE = 0x00; // 设置EINT0,EINT1均为电平触发,极性寄存器使用默认值0
IO0CLR = 0x03;
IRQEnable(); // 使能IRQ中断
FIQEnable(); // FIQ中断使能
/* 打开EINT0中断(使用向量中断), 打开EINT1中断(使用FIQ中断) */
VICIntSelect = 0x8000; // 设置EINT1为FIQ中断,其余为IRQ中断
VICVectCntl0 = 0x20 | 0x0e; // 分配外部中断0到向量中断0
VICVectAddr0 = (uint32)IRQ_Eint0; // 设置中断服务程序地址
EXTINT = 0x03; // 清除EINT0,EINT1中断标志
VICIntEnable = 1 << EINT0; // 使能EINT0中断
VICIntEnable = 1 << EINT1; // 使能EINT1 中断
while (1); // 等待中断
}