f28335时钟频率为150MHZ,定时器0定时1s,CpuTimer0Regs.PRD.all和CpuTimer0Regs.TPR.all如何设置
时间: 2023-12-03 20:44:04 浏览: 216
对于f28335芯片,CpuTimer0是一个16位的定时器,其计数器的时钟源来自于CpuTimer0的时钟分配器(Timer Clock Prescale Register,TPR)。TPR的设置范围是0~255,可以通过设置TPR中的分频值来改变计数器时钟的频率。
在本例中,要求定时器0定时1秒,因此需要根据时钟频率150MHz和定时器位数16位来计算出计数器的计数值。计算公式为:计数值 = 定时器时钟频率 × 定时时间 - 1。
将上述公式带入本例中,可以得出计数器的计数值为:150000000 × 1 - 1 = 149999999。
因为CpuTimer0是一个16位的定时器,所以计数器的计数值不能超过16位的最大值0xFFFF,因此需要将计数值进行分频处理以满足16位计数器的要求。假设分频值为N,则有:计数值 = (定时器时钟频率 / N) × 定时时间 - 1。
将N从1开始逐个尝试,直到计数值小于等于0xFFFF为止。例如,假设分频值为100,则计数值为:(150000000 / 100) × 1 - 1 = 1499999。这个计数值小于0xFFFF,因此可以设置TPR为99,将分频值设置为100。
因此,代码中应该设置如下:
```
CpuTimer0Regs.TPR.all = 99; // 设置分频值为100
CpuTimer0Regs.PRD.all = 14999; // 设置计数器的计数值
```
注意,由于f28335芯片的时钟分配器具有多级分频功能,因此需要根据具体的时钟分配器设置来确定最终的计数器时钟频率。
相关问题
f28335时钟频率为100MHZ,定时器0定时1s,CpuTimer0Regs.TPR.all=0,CpuTimer0Regs.PRD.all如何设置
CpuTimer0Regs.TPR.all=0 表示定时器预分频器的值为 0,即不分频,所以定时器的时钟频率为 100MHz。
要让定时器0定时1秒,需要设置定时器的周期寄存器 PRD 的值。PRD 的值表示定时器计数器计数到多少时,就会触发定时器中断。因此,PRD 的值应该为定时器计数器每秒递增的次数。
由于定时器时钟频率为 100MHz,所以每秒定时器计数器会递增 100000000 次。因此,PRD 的值应该为 100000000。
所以,设置定时器0的 PRD 寄存器的值为:
```C
CpuTimer0Regs.PRD.all = 100000000;
```
f28335时钟频率为150MHZ,定时器0定时1s,CpuTimer0Regs.TPR.all=0,CpuTimer0Regs.PRD.all如何设置
根据时钟频率和定时器0定时1s的要求,可以计算出定时器计数器的周期为:
周期 = 1 / 150000000 * 1s = 6667 纳秒
接着,根据定时器的工作原理可知,定时器计数器每次计数到周期值就会产生一次中断。因此,需要将定时器计数器的周期值设置为6667。
而CpuTimer0Regs.TPR.all=0表示设置定时器预分频器的值为0,即不进行预分频;CpuTimer0Regs.PRD.all则表示设置定时器计数器的周期值,因此可以将CpuTimer0Regs.PRD.all设置为6667。
具体的代码实现如下:
```
CpuTimer0Regs.TPR.all = 0; // 设置预分频器值为0,即不进行预分频
CpuTimer0Regs.PRD.all = 6667; // 设置定时器计数器的周期值为6667
```
阅读全文