TM4C123GLaunchPad教程三_外部中断
TM4C123GLaunchPad教程三_外部中断
介绍
TM4C的每个IO口都可以分别配置外部中断,每组IO口对应一个中断服务函数,例如PA0-PA7对应同一个中断服务函数,每个IO口可以配置为边沿触发或状态触发,TM4C的每个中断都可以配置优先级,它的优先级共有8个为0-7。
代码及详解
/* 声明中断服务函数,TM4C的中断服务函数名可以自己定义的 */
void vGPIO_PortFIntHandler(void);void vGPIO_Config(void)
{/* 使能GPIOF */SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);/* PF1设为输出模式,输出低电平 */GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);/* PF4方向为输入 */GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);/* 配置为上拉模式 */GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);/* 注册GPIOF的中断服务函数 */GPIOIntRegister(GPIO_PORTF_BASE, vGPIO_PortFIntHandler);/* 设置PF4为下降沿触发 */GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE);/* 使能PF4中断 */GPIOIntEnable(GPIO_PORTF_BASE, GPIO_INT_PIN_4);/* 使能GPIOF中断 */IntEnable(INT_GPIOF);/* 设置中断优先级,TM4C123G的中断优先级有8个 */IntPrioritySet(INT_GPIOF, 0);/* 清除PF4中断标志位 */GPIOIntClear(GPIO_PORTF_BASE, GPIO_INT_PIN_4);
}/* GPIOF中断服务函数 */
void vGPIO_PortFIntHandler(void)
{/* 根据当前状态,反转电平 */GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_1) == 0) ? GPIO_PIN_1 : 0);GPIOIntClear(GPIO_PORTF_BASE, GPIO_INT_PIN_4);
}
这里面有两个函数,一个是IO口的配置函数,一个是中断服务函数。IO口配置函数里有一部分上一个教程讲了这里就不说了,只说跟外部中断有关的部分。
先看第一个函数GPIOIntRegister(GPIO_PORTF_BASE, vGPIO_PortFIntHandler);
这个函数是用来注册中断服务函数的,TM4C的中断跟别的一些单片机比,它的中断服务函数名不是固定的,可以自己定义,这里定义为void vGPIO_PortFIntHandler(void)
,通过这个函数来注册。
接下来就是外部中断的模式配置GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE);
这里把PF4配置为下降沿触发的中断。它还有多个参数可选,可以配置为上升沿,下降沿,高电平,低电平触发等,可以去看手册进一步了解。
/* 使能PF4中断 */
GPIOIntEnable(GPIO_PORTF_BASE, GPIO_INT_PIN_4);
/* 使能GPIOF中断 */
IntEnable(INT_GPIOF);
这两个函数是用于中断使能的,要使能这个IO口的中断,也要使能这一组的中断。还有一个函数也要写
/* 使能总中断 */
IntMasterEnable();
这个函数用来使能总中断,这里没写在初始化函数里而是写在来所有初始化的后面。这三个使能一个都不能少,否则中断就不能触发。
/* 设置中断优先级,TM4C123G的中断优先级有8个 */
IntPrioritySet(INT_GPIOF, 0);
这个函数用来配置中断的优先级,TM4C123G的中断优先级有8个,0-7。
/* 清除PF4中断标志位 */
GPIOIntClear(GPIO_PORTF_BASE, GPIO_INT_PIN_4);
然后就是清除中断标志位,因为不清除的话无法再次触发中断,这里清除一下防止意外。
/* GPIOF中断服务函数 */
void vGPIO_PortFIntHandler(void)
{/* 根据当前状态,反转电平 */GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_1) == 0) ? GPIO_PIN_1 : 0);GPIOIntClear(GPIO_PORTF_BASE, GPIO_INT_PIN_4);
}
中断服务函数就是执行了一个翻转IO口的操作跟上一节教程比这里用了一个简便的方法,因为IO口的输入输出寄存器是一个,这里直接读取这个IO口的状态然后根据状态写入数据。
中断服务函数里一定要清除中断标志位,否则无法触发下一次中断。
TM4C123GLaunchPad教程三_外部中断相关推荐
- 20. GD32F103C8T6入门教程-adc使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组
adc 使用教程6-使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组 ADC支持18个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道 规则组,可以按照特定的序列 ...
- STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑)
外部中断 前言 材料 NVIC 新建及配置工程 外部中断和事件中断 NVIC配置 进入代码 回调函数 HAL_Delay()分析 下载验证 结语 前言 学单片机的,相信对中断的概念都已经了如指掌了,中 ...
- 龙芯2k按键中断驱动_外部中断按键驱动
我的开发板上一共有四个按键,分别影射到GPF0.GPF2.GPG3.GPG11,当按下按键时分别产生0.2.11.19号外部中断.由于没有安装驱动,当按下按键时,没有任何反应.所以需要编写一个驱动,将 ...
- STM32学习笔记(三)——外部中断的使用
开发板芯片:STM32F407ZGT6 硬件连接:PE3-KEY1 一.STM32F4的中断介绍 STM32F4的每个IO都可以作为外部中断输入,很强大的功能吧!以前学习的51只有两个外部中断. ST ...
- STM32学习笔记(三)——外部中断的使用 1
开发板芯片:STM32F407ZGT6 硬件连接:PE3-KEY1 一.STM32F4的中断介绍 STM32F4的每个IO都可以作为外部中断输入,很强大的功能吧!以前学习的51只有两个外部中断. ST ...
- nmi中断配置_外部中断NMI中断.ppt
外部中断NMI中断.ppt * 1.先看其引脚结构再看功能1. 可编程的含义:通过对芯片编程,使芯片实现不同的功能. 中断比较多的情况下,使用中断控制器来管理中断. 用来管理系统的硬件中断. * 1. ...
- tm4c123gxl库函数调包侠养成(三)——————外部中断与按键
一.中断概述 如果指针是c语言的灵魂,那么中断就是单片机的灵魂. ----所谓中断,相信凡是接触过单片机的人都有印象吧,笔者将其理解为"打断",即放弃当前中断点的事,跳去干另一件事 ...
- 单片机的外部中断(二)
前言:单片机的中断系统(一) 80C51单片机提供两个外部中断口: INT0(P3.2)和INT1(P3.3)引脚输入.这两个引脚是功能复用引脚,既可以作为普通V0口,也可作为外部中断输入引脚.下面 ...
- STM32(3)——外部中断的使用
1 .简介 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32目前支持的中断共84个(16个内部+68个外部),还有1 ...
最新文章
- 在eclipse中搭建maven工程(第二种方法)
- css盒子模型、边框border、外边距margin、填充padding、轮廓outline
- MJExtension 模型嵌套模型数组
- 设置程序无label
- 让fedora18桌面显示图标
- blog项目中遇到的问题及解决
- 三菱电机NC monitor 序列号申请
- 如何解决卸载驱动之后又重新装的问题
- Suse Linux 10无法使用SSH进行登陆
- DNS服务器地址查找不到,DNS服务器地址的查看方法
- OpenFOAM动网格的通量修正
- 《异常点检测》 - 第十章阅读记录 - 离散序列的异常点检测
- 自问自答系列——商城相关
- 二代测序的原理和简介
- positio有哪些属性?position的属性如何使用
- 代购商城app的开发优势
- 【C语言】几道C/C++面试题解析
- 目前人流量检测遇到的难点
- 【4/13-15】第六章总结+课后题
- SBC的功能与部署方案