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);

  • 相关阅读:
    文件操作:根据现有类生成所需要的类
    Microsoft JScript 运行时错误: “”未定义
    未完成
    WPF模拟雷达界面效果图
    WebClient模拟网页提交表单
    201319
    Delphi中的InStrRev函数(倒找文本)
    利用IDhttp实现图片下载
    白话解释哈希表
    整理的Delphi常用字符串函数
  • 原文地址:https://www.cnblogs.com/mch0dm1n/p/5624983.html
Copyright © 2011-2022 走看看