找回密码
 立即注册
快捷导航
查看: 2399|回复: 15

kernel也可以控制GPIO

  [复制链接]
  • TA的每日心情
    奋斗
    2018-1-13 11:07
  • 签到天数: 39 天

    [LV.5]常住居民I

    50

    主题

    155

    帖子

    2868

    积分

    高级会员

    Rank: 4

    积分
    2868
    发表于 2016-5-28 15:10:33 | 显示全部楼层 |阅读模式
    网络上有讲到关于kernel如何控制GPIO的方法往往比较复杂,这里介绍一种我在mstar platform实际写过的一种简单方法。
    Kernel是往往没有现成的GPIO控制接口,所以得自己造。
    这里以在kernel控制PAD_GPIO_PM1,PAD_GPIO_PM5这两个IO口为例。例子中出现的寄存器要在你所用平台的CHIP资料上找。


    #if defined(CONFIG_ARM) || defined(CONFIG_MIPS)
    #define REG_MIPS_BASE               0xFD000000      //Use 8 bit addressing
    #elif defined(CONFIG_ARM64)
    extern ptrdiff_t mstar_pm_base;
    #define REG_MIPS_BASE           (mstar_pm_base)
    #endif


    #define MHal_GPIO_REG(addr)         (*(volatile U8*)(REG_MIPS_BASE + (((addr) & ~1) << 1) + (addr & 1)))


    #define PAD_GPIO_PM1 11
    #define PAD_GPIO_PM1_ADDR  0x0f02UL
    #define PAD_GPIO_PM1_OEN BIT0
    #define PAD_GPIO_PM1_OUT BIT1
    #define PAD_GPIO_PM1_IN BIT2


    #define PAD_GPIO_PM5 15
    #define PAD_GPIO_PM5_ADDR  0x0f0AUL
    #define PAD_GPIO_PM5_OEN BIT0
    #define PAD_GPIO_PM5_OUT BIT1
    #define PAD_GPIO_PM5_IN BIT2


    void GPIO_PM1_Set_High()
    {
            MHal_GPIO_REG(PAD_GPIO_PM1_ADDR) &= ~PAD_GPIO_PM1_OEN;
            MHal_GPIO_REG(PAD_GPIO_PM1_ADDR) |= PAD_GPIO_PM1_OUT;
    }


    void GPIO_PM1_Set_Low()
    {
            MHal_GPIO_REG(PAD_GPIO_PM1_ADDR) &= ~PAD_GPIO_PM1_OEN;
            MHal_GPIO_REG(PAD_GPIO_PM1_ADDR) &= ~PAD_GPIO_PM1_OUT;
    }


    void GPIO_PM5_Set_High()
    {
            MHal_GPIO_REG(PAD_GPIO_PM5_ADDR) &= ~PAD_GPIO_PM1_OEN;
            MHal_GPIO_REG(PAD_GPIO_PM5_ADDR) |= PAD_GPIO_PM1_OUT;
    }


    void GPIO_PM5_Set_Low()
    {
            MHal_GPIO_REG(PAD_GPIO_PM5_ADDR) &= ~PAD_GPIO_PM1_OEN;
            MHal_GPIO_REG(PAD_GPIO_PM5_ADDR) &= ~PAD_GPIO_PM1_OUT;
    }




    该会员没有填写今日想说内容.
    superic导航
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-1-13 11:07
  • 签到天数: 39 天

    [LV.5]常住居民I

    50

    主题

    155

    帖子

    2868

    积分

    高级会员

    Rank: 4

    积分
    2868
     楼主| 发表于 2016-6-1 16:32:35 | 显示全部楼层
    希望对大家有用。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    17 小时前
  • 签到天数: 313 天

    [LV.8]以坛为家I

    287

    主题

    386

    帖子

    1万

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    10745
    发表于 2016-7-3 19:17:40 | 显示全部楼层
    牛牛牛!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-9-27 14:47
  • 签到天数: 31 天

    [LV.5]常住居民I

    25

    主题

    162

    帖子

    1655

    积分

    高级会员

    Rank: 4

    积分
    1655
    发表于 2016-7-5 13:00:57 | 显示全部楼层
    很有用,谢谢楼主,,
    把水灌满
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    53

    帖子

    73

    积分

    注册会员

    Rank: 2

    积分
    73
    发表于 2016-8-26 12:14:49 | 显示全部楼层
    这方法不太实用,代码移植性不好
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    78

    主题

    147

    帖子

    1040

    积分

    高级会员

    Rank: 4

    积分
    1040
    发表于 2016-8-31 14:25:42 | 显示全部楼层
    靠,我自己找了好久找到,早看你帖子就好!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-1 15:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    110

    主题

    213

    帖子

    1877

    积分

    高级会员

    Rank: 4

    积分
    1877
    发表于 2016-9-3 13:40:10 | 显示全部楼层

    Jack 必须牛!
    hahaahhahaha!!123
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    1488331761
  • 签到天数: 4 天

    0

    主题

    16

    帖子

    16

    积分

    新手上路

    Rank: 1

    积分
    16
    发表于 2016-9-6 16:18:10 | 显示全部楼层
    学习了。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-1 09:29
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    66

    主题

    206

    帖子

    592

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    592
    QQ
    发表于 2016-9-30 11:03:46 | 显示全部楼层
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    8

    主题

    53

    帖子

    73

    积分

    注册会员

    Rank: 2

    积分
    73
    发表于 2016-9-30 11:53:50 | 显示全部楼层
    不是通用写法,没啥实际用处
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则