[技术问答] 新塘M0 240开发板 GPIO 函数超级难理解

[复制链接]
544|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));  //这个压根不知道写啥?
        }
    }
}
| 2017-9-6 11:56 | 显示全部楼层
navota!=nuvoton
| 2017-9-20 21:14 | 显示全部楼层
模式,应该是代表的输入或者输出模式这些吧
| 2017-9-27 14:01 | 显示全部楼层
里面的i<<1应该写成 i*2, 否则产生误导, 难以理解
| 2017-9-27 14:02 | 显示全部楼层
每个管脚在寄存器里面占两个BIT,所以应该写 i*2, 而不是 i<<1, 虽然结果是相同的
| 2017-10-7 21:32 | 显示全部楼层
msk 很好理解嘛  就是mask 面具 .你要操作谁 只要通过一个面具 ,只操作你要操作 部分, 其他部分维持现状不变 .
| 2017-10-8 20:01 | 显示全部楼层
很常见的用法,先清零各位,再设置需要的模式
| 2017-10-23 18:34 | 显示全部楼层
C语言的位操作**之一 .楼主学艺不精啊
| 2017-11-22 16:04 | 显示全部楼层
还可以吧,看几个例程,跟着用就行了,至于API的内部实现,可以看看,学习下
左右移,慢慢分析下
| 2017-11-22 16:05 | 显示全部楼层
楼主帖发错版块了
| 2017-12-25 11:50 | 显示全部楼层
每个GPIO有四种IO模式:【1】输入(数字/模拟);【2】输出;【3】准双向;【4】预留。其中【3】准双向模式跟MCS51一模一样。很好理解滴。至于第二功能选择,有专门的寄存器控制,但IO要匹配。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表