1. 如何配置GPIO功能?答:修改内核板级文件kernel-3.2/arch/arm/mach-omap2/board-am335xevm-xd.c 例如将uart配置成gpio,mode7是根据芯片手册或者硬件手册确定的,如下 将 static struct pinmux_config uart1_pin_mux[] = { {"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, {"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL}, {NULL, 0}, }; 修改成: static struct pinmux_config uart1_pin_mux[] = { {"uart1_rxd.gpio0_14",OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, {"uart1_txd.gpio0_15", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, {NULL, 0}, }; 2. 按照上面的方法配置完成发现无法使用GPIO,为什么配置不生效? 原因:没有将该引脚的其他功能注释掉 例如我使用的是uart1_rxd引脚的gpio功能,因为这个是一个复用引脚,可以查看硬件手册,搜索对应引脚名字查看都有什么功能,然后除了gpio,将这个引脚其他复用全部注释掉。 如下: 注意:一个引脚只能同时用作一个功能!!!要么是uart_rxd功能,要么是gpio功能 3. 配置好,复用功能都注释掉,为什么 GPIO 无法配置引脚拉高拉低? 如果是自己新建/添加 xxx _pin_mux [],那么需要 setup_pin_mux (xxx _pin_mux ); 这一步很关键,如果配置好却不设置pinmux,再怎么配置都是徒劳,也就无法拉高拉低然后初始化编写xxx_init{}函数,初始化pinmux,如下:static void xxx_init(int evm_id, int profile){setup_pin_mux(xxx_mux);}最后将xxx_init放入 ok335x_dev_cfg[]这些都是在板级配置文件完成,可以参考LED,KEYS等功能的配置和初始化过程。 4.配置好,复用功能都注释掉,为什么GPIO无法在用户空间echo导出? 看一个简单的LED的例子 如果想在用户空间使用echo导出gpio,那么只需要setup_pin_mux()即可 使用platform_device_register();这个函数会将gpio通过内核注册,就无法再通过用户空间导出了。 另外,使用gpio_set_value() gpio_request() pio_direction_output()函数也会导致无法在用户空间echo导出。 5. 怎么echo导出引脚,对应的GPIO编号的多少? 公式:编号=32 * gpio组+gpio号 例如gpio1_16编号就是32 *1+16=48 导出:echo 48 > /sys/class/gpio/export 6. 我新加的一个功能,比如uart,pwm等等,发现不起作用?Why? 例如335xd添加pwm,通过查看硬件手册,查看有四个引脚可以输出pwm,分别是gpmc_a2,gpmc_a3,gpmc_ad8,gpmc_ad9,但只有gpmc_a2一路能输出信号, 原因是Ti的引脚定义不全,导致配置不起作用 通过查看硬件手册,gpmc_a2,gpmc_a3的mode6为pwm功能,如图: 但ti引脚定义如下: 这个配置文件意思:将gpmc_a2引脚可以复用的功能按顺序配置 可以看到,当使用gpmc_a3的mode6 "ehrpwm1a" 功能的时候,该配置为NULL 解决方法:需要在mux33xx.c修改,该文件和板级配置文件在相同目录,将NULL修改成为ehrpwm1b即可,其他引脚同理 7. 为什么启动时,我的GPIO引脚电平状态会跳变,内核完全启动才能稳定? 原因是芯片在上电时,每个引脚会有默认一个状态,这个是无法控制的。当你初始化这个引脚的状态和默认状态不一致,就会瞬间导致跳变,如果对上电电平有严格要求,就需要查看原厂资料里面的芯片手册,查看对应引脚的默认上电状态,选择满足需求的引脚使用。 |
共2条
1/1 1 跳转至页
一文教你流畅修改OK335xD的GPIO功能引脚
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |