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还高,那我 ...
随机推荐
- Go 语言defer用法
defer延迟调用: 1.确保调用在函数结束时发生: 2.defer列表为先进后出: 3.通常在Open/Close Lock/Unlock中使用. defer调用顺序示例: package mai ...
- RHCE学习笔记 管理1 (第三~五章)
第三章 红帽企业linux 获取帮助 (略) man .pinfo. 第四章 编辑文件 1.输出重定向到文件和程序 >file 定向文件(覆盖) >>file 定向文件(附 ...
- Centos6.5下Hbase安装
下载 http://mirror.bit.edu.cn/apache/hbase/hbase-0.94.26/hbase-0.94.26.tar.gz 2. 解压 tar -zxvf hbase-0 ...
- javax.mail.MessagingException: Could not connect to SMTP host: smtp.xdf.cn
1.问题描述:关于使用Java Mail进行邮件发送,抛出Could not connect to SMTP host: xx@xxx.com, port: 25的异常可能: 当我们使用Java Ma ...
- 泛型学习第一天:List与IList的区别 (二)
原文: 探讨Ilist<>与List<> 首先要了解一点的是关于接口的基础知识: 接口不能直接实例化但是接口派生出来的抽象类可以实例化所有派生出来的抽象类都可以强制转换成接口的 ...
- BZOJ3668/UOJ2 [NOI2014]起床困难综合症
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- App测试经验分享之登录注册
要诀 另外自己总结了一些要诀,仅供参考: 1)快:快速操作,营造冲突的场景,例如加载过程中返回键交互,快速点击登录按钮,快速切换菜单项,快速多次上下拉刷新 2)变:手机横竖屏.手机切换语言.手机调整字 ...
- python读取.mat文件的数据
首先导入scipy的包 from scipy.io import loadmat 然后读取 m = loadmat("F:/__identity/activity/论文/data/D001. ...
- css 单行和多行文本溢出显示省略号
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...
- Memcache简介 & 内存分配机制
关于这个东西里面到底应该存放数据网上一直有很多种说法,有的说sql进行md5之后作为键值,结果作为内容存放,也有人说按照业务逻辑错放,反正是炒的不亦乐乎. 本人经过将近2 ...