K210外部中断

四、外部中断

(一)实验目的

利用中断方式来检查按键KEY状态,按键被按 下(产生外部中断)后使 LED_B蓝灯的亮灭状态反转。

需要注意的是K210只有高速 GPIO才有外部中断

在这里插入图片描述

(二)实验讲解

外部中断也是通过GPIO模块来配置,我们先来看看其配构造函数和使用方法:

1.函数调用

(1)GPIO(ID,MODE,PULL,VALUE):构造函数

  • 【ID】内部 GPIO编号 ;
  • 【MODE】 GPIO模式;
    • GPIO.IN :输入模式
    • GPIO.OUT :输出模式
  • 【PULL】
    • GPIO.PULL_UP :上拉
    • GPIO.PULL_DOWN :下拉
    • GPIO.PULL_NONE :无
  • 【value】 GPIO初始化电平
    • 1:高电平
    • 0:低电平

(2)GPIO.irq(CALLBACK_FUNC,TRIGGER_CONDITION):配置中断函数

【CALLBACK_FUNC】 中断执行的回调函数,当中断触发的时候被调用,一个入口函数 pin_num

  • PIN_NUM 返回的是触发中断的 GPIO 引脚号(只有GPIOHS支持中断,所以这里的引脚号也是GPIOHS的引脚号)

【TRIGGER_CONDITION】中断触发方式;

  • GPIO.IRQ_RISING:上升沿触发
  • GPIO.IRQ_FALLING:下降沿沿触发
  • GPIO.IRQ_BOTH:上升沿和下降沿都触发

(3)GPIO.disirq():关闭中断

2.上升沿和下降沿

我们先来了解一下上升沿和下降沿的概念,由于按键KEY引脚是通过按键接到 GND,也就是我们所说的低电平 0”,所以当按键被按下再松开时,引脚先获得下降沿,再获得上升沿,如下图所示:

在这里插入图片描述

按键被按下时候可能会发生抖动,抖动如下图,有可能造成误判,因此我们需要使用延时函数来进行消抖:

在这里插入图片描述

(三)使用按键实现外部中断

编程思路中断跟GPIO按键章节类似,在初始化中断后,当系统检测到外部中断时候,执行 LED状态反转的代码即可。 流程图如下:
在这里插入图片描述

from Maix import GPIO
from fpioa_manager import fm
import utime

#注册IO,注意高速GPIO口才有中断
fm.register(12, fm.fpioa.GPIO0)# 普通
fm.register(16, fm.fpioa.GPIOHS0)# 注册为高速GPIO口

#构建lED和KEY对象
LED_B=GPIO(GPIO.GPIO0,GPIO.OUT,value=1)
KEY=GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)# 上拉输入

#LED状态表示
state = 1

#中断回调函数
def fun(KEY):
    global state #使用 global关键字 可以在函数内部声明变量为全局变量
    utime.sleep_ms(10) #延时消抖
    if KEY.value()==0: #确认按键被按下
        state = not state #相当于按位取反
        LED_B.value(state)

#开启中断,下降沿触发
KEY.irq(fun, GPIO.IRQ_FALLING)

ps:不懂python语法的可以看我相关博客

### K210 串口中断配置及调试方法 #### 配置外部中断与使能总中断 为了实现 K210 的串口中断功能,需要先完成外部中断的初始化以及全局中断的启用。这可以通过调用 `plic_init()` 函数来初始化外部中断控制器,并使用 `sysctl_enable_irq()` 函数使能总的中断系统[^1]。 #### 初始化串口硬件资源 在实际应用中,K210 开发板通常会通过 Type-C 接口连接到其 IO4 和 IO5 引脚上,其中 IO4 是用于接收数据的引脚,而 IO5 则负责发送数据的功能[^2]。因此,在软件层面需确保这些 GPIO 引脚已被正确定义并分配给对应的 UART 设备。 #### 加载必要的头文件 针对 K210 平台上的串口操作,开发者应当引入官方 SDK 提供的相关头文件 `uart.h` 来获取基础 API 支持[^3]。此头文件包含了定义好各类参数结构体、枚举类型以及其他辅助宏命令等内容,方便后续编程工作顺利开展下去。 #### 设置波特率及其他属性 当涉及到具体通信协议细节时(比如波特率设定),可以根据项目需求调整相应的数值;另外还需注意停止位数量的选择范围可以从标准的一位扩展至一点五甚至两位不等[^4]。同时也要考虑到是否有特殊要求如奇偶校验等功能选项存在与否的影响因素在里面。 以下是关于如何正确设置上述提到的一些重要参数的一个简单例子: ```c #include "uart.h" void config_uart(void){ struct serial_config cfg; memset(&cfg, 0 ,sizeof(cfg)); cfg.baud_rate = BAUD_RATE_9600; // Set baud rate to 9600bps. cfg.data_bits = DATA_BITS_8; // Use 8 data bits per character. cfg.stop_bits = STOP_BITS_1; // One stop bit after each transmitted byte. cfg.parity = PARITY_NONE; // No parity checking. uart_setup(UART_DEVICE_NUM,&cfg); // Apply configuration settings on specified device number. } ``` 以上代码片段展示了怎样利用 C 语言编写一段程序去定制化自己的UART设备行为模式的过程。这里我们选择了常见的9600 bps作为传输速度等级,并且采用了无奇偶检验机制下的八位有效信息加上单独结束标志的形式来进行每一次的数据交换活动。 #### 实现收发回调处理逻辑 最后一步就是构建起能够响应来自外界触发事件的应用层服务端点啦!一般而言我们会采用注册特定类型的监听器或者订阅者的方式来捕获由底层驱动上传递过来的消息通知消息流。对于每一个到达的目标地址位置处都应该预设有针对性强且回复及时有效的动作序列等待执行完毕之后再返回至上一层级继续循环往复直至整个流程结束为止。 综上所述即完成了围绕着Kendryte RISC-V架构处理器产品线中的典型代表型号之一—K210所展开讨论有关于它的通用异步收发传输单元(简称UART)部分当中涉及到了几个关键技术要点方面的介绍说明工作了[^4].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运从未公平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值