浙江工业大学 嵌入式系统原理 实验6

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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); // 等待中断

}

相关文档
最新文档