打印
[技术问答]

新塘M0 240开发板 GPIO 函数超级难理解

[复制链接]
1529|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
背水一战|  楼主 | 2017-9-5 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是M0 240开发板7段数码管显示的,首先做IO口模式设定
函数是设置GPIO口管脚的输入输出模式,里边程序特别难懂
这个u32PinMask 代表管脚数?还是代表结构体GPIO_T里的一个寄存器(数据写保护)?

高手来帮分析一下!!!!

void GPIO_SetMode(GPIO_T *port, uint32_t u32PinMask, uint32_t u32Mode)
{
    uint32_t i;

    for(i = 0; i < GPIO_PIN_MAX; i++)
    {
        if(u32PinMask & (1 << i))
        {
            port->PMD = (port->PMD & ~(0x3 << (i << 1))) | (u32Mode << (i << 1));  //这个压根不知道写啥?
        }
    }
}

相关帖子

沙发
naga568| | 2017-9-6 11:56 | 只看该作者
navota!=nuvoton

使用特权

评论回复
板凳
Bruing| | 2017-9-20 21:14 | 只看该作者
模式,应该是代表的输入或者输出模式这些吧

使用特权

评论回复
地板
戈卫东| | 2017-9-27 14:01 | 只看该作者
里面的i<<1应该写成 i*2, 否则产生误导, 难以理解

使用特权

评论回复
5
戈卫东| | 2017-9-27 14:02 | 只看该作者
每个管脚在寄存器里面占两个BIT,所以应该写 i*2, 而不是 i<<1, 虽然结果是相同的

使用特权

评论回复
6
Harvard| | 2017-10-7 21:32 | 只看该作者
msk 很好理解嘛  就是mask 面具 .你要操作谁 只要通过一个面具 ,只操作你要操作 部分, 其他部分维持现状不变 .

使用特权

评论回复
7
desertsailor| | 2017-10-8 20:01 | 只看该作者
很常见的用法,先清零各位,再设置需要的模式

使用特权

评论回复
8
Harvard| | 2017-10-23 18:34 | 只看该作者
C语言的位操作**之一 .楼主学艺不精啊

使用特权

评论回复
9
springvirus| | 2017-11-22 16:04 | 只看该作者
还可以吧,看几个例程,跟着用就行了,至于API的内部实现,可以看看,学习下
左右移,慢慢分析下

使用特权

评论回复
10
springvirus| | 2017-11-22 16:05 | 只看该作者
楼主帖发错版块了

使用特权

评论回复
11
Sunriver_Yao| | 2017-12-25 11:50 | 只看该作者
每个GPIO有四种IO模式:【1】输入(数字/模拟);【2】输出;【3】准双向;【4】预留。其中【3】准双向模式跟MCS51一模一样。很好理解滴。至于第二功能选择,有专门的寄存器控制,但IO要匹配。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

0

粉丝