这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 野火启明6M5适配GPIO

共1条 1/1 1 跳转至

野火启明6M5适配GPIO

工程师
2024-11-23 09:38:59     打赏

瑞萨RA6M5 GPIO资源分布

   从规格书可以看到,RA6M5,除了专用口,偏置电平,地以及参考电平,剩余的几乎所有脚都可以用作GPIO的功能。而野火板卡中引出的GPIO也不少,光不需要飞线的座子上都一眼能看到66个gpio,因此所有gpio都验证,实际上若非做方案导入和框架验证,几乎没必要对所有GPIO都验证一遍。

       处于便捷的考虑,直接取野火板卡的J29座子上的P907(55pin)、P906(58pin)和P908(57pin)作为测试脚,其中,P906作为终端输入,P907作为输入,P908作为输出,使用P907读取P908的值的方式验证驱动是否适配上。

驱动适配步骤

   由于之前适配板卡的基础驱动,实际上已经适配了GPIO驱动(因为标准要求是只点一个灯,而且灯要闪烁工作),因此KConfig和Sconctruct那块的配置并不需要再去匹配一遍,gpio的匹配工作就是从RASC生成对应的gpio配置开始。

RASC配置-输入

1.jpgRASC配置-输出

2.jpg

RASC配置-输入中断

生成配置文件

1.jpg

修改中断部分的代码

由于之前匹配板卡时未验证gpio中断,因此中断配置中有不少编译问题,修改点如下:

1. 由于匹配时习惯性的把09以后的编号按照十六进制编码,但实际上瑞萨生成时是按照十进制编写的,导致编译错误,因此更改成十进制命名。

1.jpg2. 驱动代码中,开启gpio中断后,会报缺少;,原因是宏PIN2IRQX_TABLE未以;结尾,而函数调用中也未做此操作,考虑到其他板卡都没在PIN2IRQX_TABLE中添加;,因此直接改驱动代码。

1.jpg修改应用代码

   瑞萨框架有个不好的点是把pin编号(BSP_IO_PORT_09_PIN_06之类的)写死,而且还没有地方去查枚举名对应的编号,因此无法使用msh命令的方式去验证gpio效果,只能写代码验证。

#include <rtthread.h>
#include "hal_data.h"
#include <rtdevice.h>

#define IRQ_PIN    BSP_IO_PORT_09_PIN_06 /* input IRQ pins */
#define OUT_PIN    BSP_IO_PORT_09_PIN_07 /* output pins */
#define IN_PIN    BSP_IO_PORT_09_PIN_08 /* input IRQ pins */

void pin_irq_handle(void *args)
{
    rt_kprintf("irq input ,pin level %d\n\r", rt_pin_read(IRQ_PIN));
}

void hal_entry(void)
{
    rt_uint8_t pin_level = PIN_LOW;
    rt_bool_t is_high = RT_FALSE;
    rt_kprintf("\nHello RT-Thread!\n");

    rt_pin_attach_irq(IRQ_PIN, PIN_IRQ_MODE_RISING_FALLING, pin_irq_handle, RT_NULL);
    rt_pin_irq_enable(IRQ_PIN, RT_TRUE);

    while (1)
    {
        if(is_high)
        {
            rt_pin_write(OUT_PIN, PIN_LOW); 
        }
        else
        {
            rt_pin_write(OUT_PIN, PIN_HIGH); 
        }
        is_high = !is_high;

        rt_thread_mdelay(1000);

        if(pin_level != rt_pin_read(IN_PIN))
        {
            rt_kprintf("input pin level %d\n\r", rt_pin_read(IN_PIN));
            pin_level = rt_pin_read(IN_PIN);
        }
    }
}

编译烧录验证

\ | /
- RT -     Thread Operating System
 / | \     5.2.0 build Nov  2 2024 21:39:51
 2006 - 2024 Copyright by RT-Thread team

Hello RT-Thread!
msh >irq input ,pin level 0
irq input ,pin level 1
irq input ,pin level 0
irq input ,pin level 1
irq input ,pin level 0
irq input ,pin level 1
irq input ,pin level 0
irq input ,pin level 1
input pin level 1
input pin level 0
input pin level 1
input pin level 0
input pin level 1
input pin level 0

验证过程说明:

     首先,我将所有管脚悬空,之后复位板卡,待出现msh>后等待一会,确认无抖动时,使用杜邦线将P906短接到P907上,此时间隔1s打印中断回调函数中的打印信息,表示中断输出翻转有效,且边沿触发中断使能成功。

     之后将杜邦线跳接至P907和P908上,此时间隔1s打印主循环中的打印信息,表明输入模式配置成功。

     结合以上现象,另外,输入上拉,不能确保生效,只能说可能生效,因为管脚悬空时读到的电平未发生跳变。

总结

   至此,瑞萨的GPIO驱动已适配完成。遗留的点如下:

           1. 其他GPIO也可以参照此方法适配,唯一的区别便是所选的管脚和中断编号的区别。

           2. 由于未验证代码修改输入输出,甚至中断模式,因此不太确定通过RASC配置的初始状态是否可以通过代码修改,若代码无法修改,那感觉驱动可能还得迭代。

           3. 虽然驱动并未设置配置上下拉入口,但RASC配置中可以默认配置上下拉,后续也可以尝试修改驱动文件,配置成上下拉动态配置






关键词: 野火     启明     适配     gpio     驱动    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]