找回密码
 立即注册
快捷导航
芯智云城芯联superic社区广告招商
查看: 2693|回复: 15

kernel也可以控制GPIO

  [复制链接]
  • TA的每日心情
    奋斗
    7 天前
  • 签到天数: 43 天

    [LV.5]常住居民I

    50

    主题

    159

    帖子

    2983

    积分

    高级会员

    Rank: 4

    积分
    2983
    发表于 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;
    }




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

    使用道具 举报

  • TA的每日心情
    奋斗
    7 天前
  • 签到天数: 43 天

    [LV.5]常住居民I

    50

    主题

    159

    帖子

    2983

    积分

    高级会员

    Rank: 4

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

    使用道具 举报

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

    [LV.9]以坛为家II

    363

    主题

    481

    帖子

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7

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

    使用道具 举报

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

    [LV.5]常住居民I

    25

    主题

    162

    帖子

    1725

    积分

    高级会员

    Rank: 4

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

    使用道具 举报

    该用户从未签到

    8

    主题

    53

    帖子

    82

    积分

    注册会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    80

    主题

    150

    帖子

    1136

    积分

    版主

    Rank: 7Rank: 7Rank: 7

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

    使用道具 举报

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

    [LV.1]初来乍到

    110

    主题

    215

    帖子

    1976

    积分

    高级会员

    Rank: 4

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

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

    使用道具 举报

  • TA的每日心情

    1518000091
  • 签到天数: 5 天

    0

    主题

    16

    帖子

    16

    积分

    新手上路

    Rank: 1

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

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-7 18:41
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    66

    主题

    207

    帖子

    638

    积分

    版主

    Rank: 7Rank: 7Rank: 7

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

    使用道具 举报

    该用户从未签到

    8

    主题

    53

    帖子

    82

    积分

    注册会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

    社区