[工业级智能控制MCU 匠芯创D133CBS] 3 - GPIO-IO中断
本帖最后由 御坂10032号 于 2024-8-18 23:17 编辑<p><strong><span style="font-size:24px;">简介</span></strong></p>
<p>在本章节,我们将进行 IO中断的实验。 具体的步骤为,当我们按下开发板上的WeakUp键的时候, Finsh 控制台打印 Key has been pressed 的提示。</p>
<p> </p>
<p>实验现象如下:</p>
<p> </p>
<p> </p>
<p> </p>
<p><strong><span style="font-size:24px;">步骤</span></strong></p>
<p> </p>
<p>1- 根据<a href="https://artinchip.com/knowledge/oxy_ex-1/topics/gpio-configuration-luban-lite.html" target="_blank">官方文档</a>得知,对于默认的GPIO功能我们并不需要在Menuconfig中进行配置可以直接使用。但是如果你想使用中断的功能的话,那么需要配置开启中断</p>
<p> </p>
<p> </p>
<p> </p>
<p>2- 但是如果你使用前两篇文章中提到的lunch 11 启动工程的话,你会发现这个中断相关的已经被打开了。</p>
<p> </p>
<p> </p>
<p> </p>
<p>3- 由于当前的开发环境已经集成好了RTT,所有我们并没有按照文档中说明的那样使用匠芯创提供的HAL函数</p>
<p> </p>
<p> </p>
<p> </p>
<p>4 - 所以根据RTT官方文档的<a href="https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/pin/pin" target="_blank">PIN设备</a>中,我们可以使用RTT API来进行操作并且绑定回调。</p>
<p> </p>
<p> </p>
<p> </p>
<p>5- 根据原理图得知,我们可以初始化这个wake-up key作为用户按键,然后绑定回调函数, PIN为PD.15。</p>
<p> </p>
<p> </p>
<p> </p>
<p>6- 代码如下</p>
<p> </p>
<pre>
<code class="language-cpp">/*
* Copyright (c) 2022, ArtInChip Technology Co., Ltd
*
* SPDX-License-Identifier: Apache-2.0
*
* Authors: weilin.peng@artinchip.com
*/
#include <rtdevice.h>
#include <rtthread.h>
#ifdef RT_USING_ULOG
#include <ulog.h>
#endif
#define GPIO_KEY_PINc "PD.15"
/**
* <a href="home.php?mod=space&uid=159083" target="_blank">@brief </a> 打印触发回调
*
* @param args
*/
void key_callback_function(void *args)
{
rt_kprintf("%s\r\n", "Key has been presssed!");
}
void key_init(void *ags)
{
// 设置GPIO模式
rt_pin_mode(rt_pin_get(GPIO_KEY_PINc), PIN_MODE_INPUT_PULLUP);
// 绑定回调函数和触发方式
rt_pin_attach_irq(rt_pin_get(GPIO_KEY_PINc), PIN_IRQ_MODE_RISING, key_callback_function, RT_NULL);
// 开启中断
rt_pin_irq_enable(rt_pin_get(GPIO_KEY_PINc), PIN_IRQ_ENABLE);
}
int main(void)
{
// 初始化
key_init(RT_NULL);
}
</code>
</pre>
<p> </p>
<p><strong><span style="font-size:24px;">总结</span></strong></p>
<p> </p>
<p>通过RTT驱动的支持,用户并不需要去熟悉复杂的各个厂商提供的HAL函数去增加学习成本,只要当前的芯片支持RTT,那么我们可以使用通一的函数进行开发,用户并不需要关注底层的具体实现逻辑。可以大大的增加用户的开发效率。 上述演示的是IO中断,那么也可以获取IO的状态,配置输出或者输入等。</p>
<p> </p>
<p>如果并不知道怎么创建项目等,请参考之前的链接</p>
<p>[工业级智能控制MCU 匠芯创D133CBS] 1 - 开箱及其环境搭建 <a href="https://bbs.eeworld.com.cn/thread-1290588-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1290588-1-1.html</a></p>
<p>[工业级智能控制MCU 匠芯创D133CBS] 2 - 创建项目及其注意事项 <a href="https://bbs.eeworld.com.cn/thread-1290861-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1290861-1-1.html</a></p>
<p> </p>
这个代码是新建文件还是直接写在main里面的 haha1998 发表于 2024-10-10 16:27
这个代码是新建文件还是直接写在main里面的
<p>可以直接写, 也可以新建, 可以参考前两个帖子</p>
页:
[1]