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教程三_外部中断相关推荐

  1. 20. GD32F103C8T6入门教程-adc使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组

    adc 使用教程6-使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组 ADC支持18个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道 规则组,可以按照特定的序列 ...

  2. STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑)

    外部中断 前言 材料 NVIC 新建及配置工程 外部中断和事件中断 NVIC配置 进入代码 回调函数 HAL_Delay()分析 下载验证 结语 前言 学单片机的,相信对中断的概念都已经了如指掌了,中 ...

  3. 龙芯2k按键中断驱动_外部中断按键驱动

    我的开发板上一共有四个按键,分别影射到GPF0.GPF2.GPG3.GPG11,当按下按键时分别产生0.2.11.19号外部中断.由于没有安装驱动,当按下按键时,没有任何反应.所以需要编写一个驱动,将 ...

  4. STM32学习笔记(三)——外部中断的使用

    开发板芯片:STM32F407ZGT6 硬件连接:PE3-KEY1 一.STM32F4的中断介绍 STM32F4的每个IO都可以作为外部中断输入,很强大的功能吧!以前学习的51只有两个外部中断. ST ...

  5. STM32学习笔记(三)——外部中断的使用 1

    开发板芯片:STM32F407ZGT6 硬件连接:PE3-KEY1 一.STM32F4的中断介绍 STM32F4的每个IO都可以作为外部中断输入,很强大的功能吧!以前学习的51只有两个外部中断. ST ...

  6. nmi中断配置_外部中断NMI中断.ppt

    外部中断NMI中断.ppt * 1.先看其引脚结构再看功能1. 可编程的含义:通过对芯片编程,使芯片实现不同的功能. 中断比较多的情况下,使用中断控制器来管理中断. 用来管理系统的硬件中断. * 1. ...

  7. tm4c123gxl库函数调包侠养成(三)——————外部中断与按键

    一.中断概述 如果指针是c语言的灵魂,那么中断就是单片机的灵魂. ----所谓中断,相信凡是接触过单片机的人都有印象吧,笔者将其理解为"打断",即放弃当前中断点的事,跳去干另一件事 ...

  8. 单片机的外部中断(二)

    前言:单片机的中断系统(一) 80C51单片机提供两个外部中断口:  INT0(P3.2)和INT1(P3.3)引脚输入.这两个引脚是功能复用引脚,既可以作为普通V0口,也可作为外部中断输入引脚.下面 ...

  9. STM32(3)——外部中断的使用

    1 .简介 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32目前支持的中断共84个(16个内部+68个外部),还有1 ...

最新文章

  1. 在eclipse中搭建maven工程(第二种方法)
  2. css盒子模型、边框border、外边距margin、填充padding、轮廓outline
  3. MJExtension 模型嵌套模型数组
  4. 设置程序无label
  5. 让fedora18桌面显示图标
  6. blog项目中遇到的问题及解决
  7. 三菱电机NC monitor 序列号申请
  8. 如何解决卸载驱动之后又重新装的问题
  9. Suse Linux 10无法使用SSH进行登陆
  10. DNS服务器地址查找不到,DNS服务器地址的查看方法
  11. OpenFOAM动网格的通量修正
  12. 《异常点检测》 - 第十章阅读记录 - 离散序列的异常点检测
  13. 自问自答系列——商城相关
  14. 二代测序的原理和简介
  15. positio有哪些属性?position的属性如何使用
  16. 代购商城app的开发优势
  17. 【C语言】几道C/C++面试题解析
  18. 目前人流量检测遇到的难点
  19. 【4/13-15】第六章总结+课后题
  20. SBC的功能与部署方案

热门文章

  1. 读书笔记:《代码大全第2版》 04.创建高质量的代码之高质量的方法
  2. Python优化之__slots__
  3. 配置本地ntp服务器及ntp客户端
  4. 你知道自己的电脑感染了恶意软件吗?
  5. 新买的电脑配置不低却卡顿?
  6. javascript php mysql,javascript php mysql flot
  7. C语言中通过函数指针调用函数
  8. 什么是final、static和static final?
  9. HTML/CSS/JS编码规范
  10. W25Q128数据手册阅读总结