Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GPIO
【NXP-MCXA153】RTT PIN驱动添加
发布于 2024-06-27 18:03:23 浏览:243
订阅该版
[tocm] ## Pin驱动框架 ![1.png](https://oss-club.rt-thread.org/uploads/20240627/1aef16222aba6522637bc53cdf2cdb59.png) ### PIN设备驱动层 **单纯的提供接口给应用层用,其中PIN设备驱动框架接口包含rt\_pin\_read等,具体在pin.c 文件中查看** * **pin.c是提供应用接口** * **drv\_gpio.c是具体实现** ### 1、实现操作方法原理 ```c struct rt_pin_ops { void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_uint8_t mode); void (*pin_write)(struct rt_device *device, rt_base_t pin, rt_uint8_t value); rt_ssize_t (*pin_read)(struct rt_device *device, rt_base_t pin); rt_err_t (*pin_attach_irq)(struct rt_device *device, rt_base_t pin, rt_uint8_t mode, void (*hdr)(void *args), void *args); rt_err_t (*pin_detach_irq)(struct rt_device *device, rt_base_t pin); rt_err_t (*pin_irq_enable)(struct rt_device *device, rt_base_t pin, rt_uint8_t enabled); rt_base_t (*pin_get)(const char *name); #ifdef RT_USING_DM rt_err_t (*pin_irq_mode)(struct rt_device *device, rt_base_t pin, rt_uint8_t mode); rt_ssize_t (*pin_parse)(struct rt_device *device, struct rt_ofw_cell_args *args, rt_uint32_t *flags); #endif #ifdef RT_USING_PINCTRL rt_err_t (*pin_ctrl_confs_apply)(struct rt_device *device, void *fw_conf_np); #endif /* RT_USING_PINCTRL */ }; ``` * **rt\_pin\_ops 成员介绍** * **pin\_mode** * **引脚初始化** * **pin\_write** * **引脚写** * **pin\_read** * **引脚读** * **pin\_attach\_irq** * **中断操作 为某个引脚绑定一个中断回调函数,使能中断,当中断来时调用该函数** * **pin\_detach\_irq** * **中断操作 脱离某个引脚的中断回调函数** * **pin\_irq\_enable** * **中断操作 开启或关闭中断** * **pin\_get** * **获取某个pin脚编号** * **pin\_irq\_mode** * **pin\_parse** * **pin\_ctrl\_confs\_apply** * **引脚编号** ```c #define GET_GPIO_PORT(x) ((x) / 32) #define GET_GPIO_PIN(x) ((x) % 32) ``` * **rt\_pin\_ops 赋值** ```c rt_hw_pin_init() { int ret = RT_EOK; mcx_pin_ops.pin_mode = mcx_pin_mode; mcx_pin_ops.pin_read = mcx_pin_read; mcx_pin_ops.pin_write = mcx_pin_write; mcx_pin_ops.pin_attach_irq = mcx_pin_attach_irq; mcx_pin_ops.pin_detach_irq = mcx_pin_detach_irq; mcx_pin_ops.pin_irq_enable = mcx_pin_irq_enable; mcx_pin_ops.pin_get = RT_NULL, ret = rt_device_pin_register("pin", &mcx_pin_ops, RT_NULL);// return ret; } INIT_BOARD_EXPORT(rt_hw_pin_init); ``` * **注意: 这里的操作很奇怪INIT\_BOARD\_EXPORT ,根据老师的讲解是在预编译的时候就处理了,具体后面再学习。。。** * **drv\_pin.c 的 rt\_hw\_pin\_init 将底层驱动和驱动框架进行链接起来,此文件实现gpio的初始化** ## 添加Pin驱动代码流程 * **编写drv\_pin.c文件** * **实现 rt\_pin\_ops 的各种操作接口函数** * **然后利用 rt\_hw\_pin\_init 进行链接驱动层** * **实际上就是指针的赋值** ## 实验代码 ```c rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */ rt_pin_mode(KEY_BAND, PIN_MODE_INPUT); rt_kprintf("MCXA153 HelloWorld\r\n"); while (1) { rt_thread_mdelay(1000); if(rt_pin_read(KEY_BAND)) rt_pin_write(LED_PIN, PIN_HIGH); /* Set GPIO output 1 */ else rt_pin_write(LED_PIN, PIN_LOW); /* Set GPIO output 0 */ #if 0 rt_pin_write(LED_PIN, PIN_HIGH); /* Set GPIO output 1 */ rt_thread_mdelay(500); /* Delay 500mS */ rt_pin_write(LED_PIN, PIN_LOW); /* Set GPIO output 0 */ rt_thread_mdelay(500); /* Delay 500mS */ #endif } ``` 注意:这里延迟1s,目的是为了有msh 功能 ## 总结 **学习了PIN设备驱动框架的添加**
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
LTBOHAPPY
加油努力
文章
6
回答
1
被采纳
0
关注TA
发私信
相关文章
1
drivers- pin
2
bsp 里面的drivers/gpio.c 少了一个功能
3
stm32f407移植RTT中gpio设备驱动问题
4
config PB4(NJTRST) to GPIO
5
RT-Thread的GPIO设备驱动问题
6
关于pin.c文件中语句可能出现的bug
7
RT-Thread学习笔记--线程创建与官方Pin设备驱动调用
8
【应用笔记】小白也能玩转RT-Thread之通用GPIO设备【官方出品
9
串口引脚定义中的GPIO_Pin_sources是社么意思?
10
RTT -GPIO 使用例程
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部