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

kernel也可以控制GPIO

  [复制链接]
  • TA的每日心情
    奋斗
    2018-5-20 18:10
  • 签到天数: 45 天

    [LV.5]常住居民I

    50

    主题

    161

    帖子

    3144

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    3144
    发表于 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的每日心情
    奋斗
    2018-5-20 18:10
  • 签到天数: 45 天

    [LV.5]常住居民I

    50

    主题

    161

    帖子

    3144

    积分

    金牌会员

    Rank: 6Rank: 6

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:08
  • 签到天数: 458 天

    [LV.9]以坛为家II

    400

    主题

    540

    帖子

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7

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

    使用道具 举报

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

    [LV.5]常住居民I

    25

    主题

    161

    帖子

    1718

    积分

    高级会员

    Rank: 4

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

    使用道具 举报

    该用户从未签到

    8

    主题

    54

    帖子

    92

    积分

    注册会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    79

    主题

    149

    帖子

    1120

    积分

    版主

    Rank: 7Rank: 7Rank: 7

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

    使用道具 举报

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

    [LV.1]初来乍到

    110

    主题

    215

    帖子

    1994

    积分

    高级会员

    Rank: 4

    积分
    1994
    发表于 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

    帖子

    668

    积分

    版主

    Rank: 7Rank: 7Rank: 7

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

    使用道具 举报

    该用户从未签到

    8

    主题

    54

    帖子

    92

    积分

    注册会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

    社区