解析这句代码什么意思!
神说:选定预分频器0
为什么?
神说:因为实验中选的是timer1,在预分频器0下;
若选择timer4,该如何写这句代码?
首先看tcfg0中选择预分频器1,在看tcfg1里面的timer4,以及选择相应的MUX
总结:在初始化寄存器时,首先得看寄存器表,寄存器表中可能分为许多【位】,我们需要哪位,就给哪位写入值(这个值是对应相应的功能来写的)。
分频器1:
对应的代码:
① 选择预分频1:
writel(readl(&pwm_timer->tcfg0) | 0xff <<8, &pwm_timer->tcfg0);
在书上说明了预分频的取值范围是1~255(神告诉我&#xff0c;值越大&#xff0c;频率越大&#xff0c;蜂鸣器响的越快)。
所以在这里我们不必关心值是多少&#xff0c;我们只需要让这个值不是初始值&#xff0c;并且在TCFG0的[15:8]这个地方&#xff0c;左移8位&#xff0c;就可以到达这个地方&#xff1b;
② 选择MUX4&#xff0c;频率为1/16&#xff1a;
从图中&#xff0c;可以知道MUX4对应TCFG1[19:16]&#xff0c;选择频率是1/16,对应二进制位0100&#xff0c;可以让0x4 <<16,得到。
但是为了让[15:0]都不起作用&#xff0c;给他们都赋值1(这里不太清楚&#xff0c;自己猜的&#xff0c;大概就是这样吧&#xff01;)&#xff0c;即1111,1111,1111,1111
可以通过0xf左移16位&#xff0c;并且取反&#xff0c;在与[0x4 <<16]取与&
代码为&#xff1a;
writel((readl(&pwm_timer->tcfg1) & ~(0xf<<16)) | (0x4<<16), &pwm_timer->tcfg1);