UCOSII下外部中断的实现
1、外部中断初始化函数
// EXTI initialize
void EXTIX_INIT(void)
{
EXTI_InitTypeDef EXTI_InitStructure; //定义外部中断结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能外部中断时钟
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1); //将GPIOA.1与中断线1映射起来
EXTI_InitStructure.EXTI_Line = EXTI_Line1; //设置中断线
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断触发模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能外部中断线
EXTI_Init(&EXTI_InitStructure); //外部中断初始化
BSP_IntVectSet(BSP_INT_ID_EXTI1,EXTI1_IRQHandler); //设置中断号跟对应的中断服务函数
BSP_IntEn(BSP_INT_ID_EXTI1); //使能指定中断
}
- 配置中断初始化时,需要注意的是,在uCOS系统上的中断机制跟裸机上不一样
其中几个关键的中断函数(定义在Bsp_int.c)
void BSP_IntVectSet(CPU_DATA int_id, CPU_FNCT_VOID isr);//设置中断向量及处理中断服务函数,产生中断时将跳至中断服务函数的地址
void BSP_IntEn (CPU_DATA int_id) //使能指定中断
void BSP_IntDis (CPU_DATA int_id) //禁用指定中断(视程序需要)
void BSP_IntDisAll (void) //禁用所有中断(视程序需要)
2、中断优先级配置
void NVICSTR_INIT(void)
{
NVIC_InitTypeDef NVIC_InitStructure; //定义优先级结构体
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置NVIC中断分组
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel; //使能只能外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure); //中断优先级分组初始化
}
- 写优先级分配应该不难,基本都大同小异,不一样的是中断通道的定义名,裸机的定义跟uCOS的定义不一样,这个查一下系统文件就能找到了。
在Bsp_int.c中,还有一个函数可用来设置中断优先级,有兴趣的读者可以试试
void BSP_IntPrioSet (CPU_DATA int_id, CPU_INT08U prio) //设置中断优先级
3、中断服务函数
这里的中断服务函数名可以自己定义,不过也不能太随便,至少要能看出来是哪个中断的对接函数
//EXTI1 interrupt handle
void EXTI1_IRQHandler()
{
OSIntEnter();
ACounter1 = 30; //中断操作
EXTI_ClearITPendingBit(EXTI_Line1); //清除中断标志位
OSIntExit();
}
中断服务函数名需与外部中断初始化中的BSP_IntVectSet()第二个参数一致
这里还需讲明一点,函数中用到了OSIntEnter() 与 OSIntExit(),这里大概讲一下作用
在uC/OS-II中,通常在进入中断时需要使用OSIntEnter() ;退出中断前使用OSIntExit();
在中断服务函数中使用这对函数,在中断结束后可进行任务调度,使得系统更加“实时”
若中断函数的运行不做信号量处理,对任务没有触发作用的,可以忽视不用
这样就完成了外部中断的配置,把EXTIX_INIT()放入系统初始化函数中,运行时待指定的IO有高低电平触发时,将触发对应的中断操作
UCOSII下外部中断的实现的更多相关文章
- 在Linux下的中断方式读取按键驱动程序
// 在Linux下的中断方式读取按键驱动程序 //包含外部中断 休眠 加入poll机制 // 采用异步通知的方式 // 驱动程序发 ---> app接收 (通过kill_fasync()发送) ...
- STM32f103之外部中断
一.背景 有个需求,IO口检测上升沿,然后做相应的动作.在此记录STM32F103的外部中断结构及配置方法, 以备下次快速上手使用. 有许多不太明白,又是老司机(:-D)帮忙,真的是站在别人的肩膀上会 ...
- STM32之EXTI——外部中断
互联网的广大网友,大家早上中午晚上好.EXTI...故名思义..EX表外,出..I表示Intrrupt..所以合起来就是外部中断...说到这..我觉得我最近的六级水平(背单词)又进了一步,稍微自夸了下 ...
- 转别人的 STM32外部中断使用注意事项
前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...
- STM32 GPIO外部中断总结
一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...
- 向linux内核中添加外部中断驱动模块
本文主要介绍外部中断驱动模块的编写,包括:1.linux模块的框架及混杂设备的注册.卸载.操作函数集.2.中断的申请及释放.3.等待队列的使用.4.工作队列的使用.5.定时器的使用.6.向linux内 ...
- STM32学习笔记(九) 外部中断,待机模式和事件唤醒
学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...
- stm32学习笔记——外部中断的使用
stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...
- CC2540开发板学习笔记(三)——外部中断
一.实验内容 通过外部中断方式依次按下按键S1控制LED1的亮灭 二.实验过程 1.电路原理图同上 2.中断的概念 比如说我们在执行main函数时,突然来了个指令.优先级比现在执行的main还高,那我 ...
随机推荐
- iOS清除缓存功能开发
在APP开发中,大量的图片或消息占用系统内存,造成一堆垃圾信息,所以开发清除缓存功能就显得必不可少了. 代码段1:获取文件的大小 - (long long) fileSizeAtPath:(NSStr ...
- MATLAB常用指令记录
help + 'command name' % 查询指令用法 Ctrl + Break % 强制终止程序运行 Shift + Enter % command window下换行不运行指令 M'; % ...
- 吴恩达深度学习笔记(八) —— ResNets残差网络
(很好的博客:残差网络ResNet笔记) 主要内容: 一.深层神经网络的优点和缺陷 二.残差网络的引入 三.残差网络的可行性 四.identity block 和 convolutional bloc ...
- java-Object类中的方法
1.Object类中有哪些方法? protected Object clone():创建一个返回此对象的副本 boolean equals(Obejct obj):只是其他对象与此对象是否相等 p ...
- Java线程池ExecutorService和CountDownLatch的小例子
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java ...
- js,java,ajax实现跨域访问及其原理
http://blog.csdn.net/saytime/article/details/51540876 这篇文章对跨域访问做了较为细致得分析,我这里做下简单总结 1.实现跨域访问原理: 浏览器由于 ...
- 元素 "context:component-scan" 的前缀 "context" 未绑定的解决方案
在动态web项目(Dynamic Web Project)中,使用SpringMVC框架,新建Spring的配置文件springmvc.xml,添加扫描控制器 <context:componen ...
- HDFS文件访问权限
HDFS中的文件访问权限 针对文件和目录,HDFS的权限模式与POSIX非常相似一共提供三类权限模式:只读权限(r).写入权限(w)和可执行权限(x).读取文件或列出目录内容时需要只读权限.写入一个文 ...
- Linux嵌入式 -- 内核 - proc文件系统
1. 什么是proc文件系统? 实例:通过 /proc/meminfo,查询当前内存使用情况. 结论:proc文件系统是一种在用户态检查内核状态的机制. 2.Proc文件分类 特点 每个文件都规定了 ...
- php环境之Wampserver端口修改
WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以及MySQL数据库的整合软件包.免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去做开发.WampSer ...