zoukankan      html  css  js  c++  java
  • writel(readl(&pwm_timer->tcfg0) | 0xff, &pwm_timer->tcfg0);

    解析这句代码什么意思!

     

    神说:选定预分频器0

       

        为什么?

     

    神说:因为实验中选的是timer1,在预分频器0下;

     

    若选择timer4,该如何写这句代码?

        首先看tcfg0中选择预分频器1,在看tcfg1里面的timer4,以及选择相应的MUX

     

     

    总结:在初始化寄存器时,首先得看寄存器表,寄存器表中可能分为许多【位】,我们需要哪位,就给哪位写入值(这个值是对应相应的功能来写的)。

     

    分频器1:

     

    对应的代码:

    ①  选择预分频1:

    writel(readl(&pwm_timer->tcfg0) | 0xff << 8, &pwm_timer->tcfg0);

    在书上说明了预分频的取值范围是1~255(神告诉我,值越大,频率越大,蜂鸣器响的越快)。

    所以在这里我们不必关心值是多少,我们只需要让这个值不是初始值,并且在TCFG0的[15:8]这个地方,左移8位,就可以到达这个地方;

     

    ② 选择MUX4,频率为1/16:

    从图中,可以知道MUX4对应TCFG1[19:16],选择频率是1/16,对应二进制位0100,可以让0x4 << 16,得到。

    但是为了让[15:0]都不起作用,给他们都赋值1(这里不太清楚,自己猜的,大概就是这样吧!),即1111,1111,1111,1111

    可以通过0xf左移16位,并且取反,在与[0x4 << 16]取与&

    代码为:

    writel((readl(&pwm_timer->tcfg1) & ~(0xf<<16)) | (0x4<<16), &pwm_timer->tcfg1);

  • 相关阅读:
    MySQL企业常用集群图解
    MySQL常见错误类型
    MySQL 数据库增量数据恢复案例
    异地备份同步校验脚本
    python 自动化之路 day 面向对象基础
    Docker 入门
    awk知识点总结
    Linux文件管理类命令及命令别名
    Linux重定向
    Linux进程管理
  • 原文地址:https://www.cnblogs.com/mch0dm1n/p/5624983.html
Copyright © 2011-2022 走看看