K60学习打卡之GPIO初始化

上次我们说到SCGC5,也就是系统门控时钟5,这个是SIM模块里面的寄存器。那么今天我们就来看看,这个SIM模块究竟是干什么的?
在技术手册的第12章详细地描述了这个模块
SIM(System Integartion Module)
开宗明义,这个模块提供了系统控制和芯片配置寄存器。
它的特性包括了:
1、系统时钟配置:系统时钟分频值;Architectural clock gating control(这个不太懂);USB时钟选择和分频值;SDHC 时钟源选择;1588以太网时间戳和RMII的时钟源选择
2、Flash和RAM的大小设置
3、USB校准配置
4、灵活计数器,硬件触发器和错误源的选择
5、UART0(UART1)的发送(接收)源的选择和配置
SIM模块有许多的域来控制和配置不同模块的时钟源和分频值,关于这一点,在时钟配置章节有更详尽的描述。其实也没有详尽多少,只是有些点还是值得一提的。
1、由于SIM,使得芯片时钟可以依据模块,部分启动和关闭
2、基本的时钟是源于MCGOUTCLK,但是通过时钟发生器可以让不同的模块有不同的时钟频率,来满足低功耗的要求
3、还有一部分的时钟源自于MCGPLLCLK和MCGFLLCLK,并且还有备用的时钟源,并且这些模块都有SIM模块的SOPT寄存器控制
那么接下来的更为细致的寄存器描述就不一 一看了。根据我们写的代码。我们拶指只看我们要使用的寄存器和相应的位就好。
这次我们要解析下面的函数

void PORT_PinPullConfig(uint32_t instance, uint8_t pin, PORT_Pull_Type pull){
 SIM->SCGC5 |= SIM_GPIOClockGateTable[instance];
 switch(pull)
    {
        case kPullDisabled:
            PORT_InstanceTable[instance]->PCR[pin] &= ~PORT_PCR_PE_MASK;
            break;
      ......
        default:
            break;
    }}

上次已知的代码是这样的:

    #define SIM_BASE                                 0x40047000u
    #define SIM                                      (SIM_Type *)SIM_BASE

    __IO uint32_t SCGC5;                             /**< System Clock Gating Control                                                                                                                   Register 5, offset: 0x1038 */

那么我们要关注的寄存器地址是0x40047000u+0x1038 =0x40048038。让我们在技术手册中查找一下。正好是SIM_SCGC5寄存器,那么要对这个寄存器操作做什么事情呢?嗯,看代码:

SIM->SCGC5 |= SIM_GPIOClockGateTable[instance];

关于SIM_GPIOClockGateTable在gpio.c文件中有定义:

static const uint32_t SIM_GPIOClockGateTable[] =
{
    SIM_SCGC5_PORTA_MASK,
    SIM_SCGC5_PORTB_MASK,
    SIM_SCGC5_PORTC_MASK,
    SIM_SCGC5_PORTD_MASK,
    SIM_SCGC5_PORTE_MASK,
};

那个instance在本次代码中表示的是0x04。之前说过的通过#define定义的。也就是说这句代码的意思是将SIM_SCGC5_PORTE_MASK赋给地址为0x40048038的寄存器,那么这个SIM_SCGC5_PORTE_MASK值又是多少呢?查定义,追踪一下就ok。

#define SIM_SCGC5_PORTE_MASK                     0x2000u

好了到了这里,这句话的意思就很清楚了
将0x2000这个值赋给寄存器SIM_SCGC5.
那么问题来了,这句话又表示什么意思?
查...手...册......
关于SIM_SCGC5的寄存器,它长这个样子

Paste_Image.png

那句话的意思就是,将其中的第13位设置为1!
好了,说了这么多。一层又一层的,其实说白了。就是设了一个1.是不是感觉收到了严重的欺骗!我就是这种感觉!


昨天晚上一高兴就忘记自己还没有写完了。以后不会这样了!现在不需哦天没有写完的补上。

然后就是这句代码了!

 PORT_InstanceTable[instance]->PCR[pin] &= ~PORT_PCR_PE_MASK;

关于PORT_InstanceTable[],这个定义比较复杂,单独说一下,定义如下:

static PORT_Type * const PORT_InstanceTable[] = PORT_BASES;

解析:首先,这个static,静态的;PORT_Type* 表示PORT_Type类型的结构体指针;const 表示常量类型,不可更改;PORT_BASES是地址0x4004D000。这个定义表示将PORT_InstanceTable定义为指向PORT_Type结构体的指针的指针这个指针的值是0x4004D000。蛮复杂的还是!
言归正传!地址解析如下:
首先展示与代码有关的定义:

#define PORTE_BASE                               (0x4004D000u)
/** Peripheral PORTE base pointer */
#define PORTE                                    ((PORT_Type *)PORTE_BASE)
/** Array initializer of PORT peripheral base pointers */
#define PORT_BASES                               { PORTA, PORTB, PORTC, PORTD, PORTE }

  __IO uint32_t PCR[32];                           /**< Pin Control Register n, array offset: 0x0, array step: 0x4 */

#define PORT_PCR_PE_MASK                         0x2u

接下来计算一下就好了
左边的地址是0x4004D000+0x4*6右边的值是0x2,这样,再参阅相关的技术手册之后就可以知道到底是做什么的了!

Paste_Image.png

上图就是相关的寄存器了。结合代码,表示将PE位清零。那么实际的意义需要阅读相关的章节才行,下次吧!
好了今天的就补完了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 一、代码分析本次分析的代码非常简短 这句代码的意思也和单一,就是将GPIOE模块的第6引脚配置为推挽输出方式。但是...
    Cheer_up阅读 2,190评论 0 1
  • 今天把最后的配置讲完,不过可能要分两次。首先是下面的函数: 表示将上面的寄存器的相应位设置为0或是1,在实际的功能...
    Cheer_up阅读 565评论 0 1
  • 今天要探究的是下面的函数 第一句代码昨天我已经研究过了,这里又出现了一次,可见写这个函数的人,为了保证每一个函数的...
    Cheer_up阅读 250评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 1 综述 1.1 时钟源 在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL。 HSI...
    hackvilin阅读 3,385评论 0 6