T=clockin*(PRD+1)*(TDDR+1) 怎么计算定时2秒的频率
时间: 2023-10-30 10:08:59 浏览: 55
首先,我们需要知道定时器的时钟频率。假设定时器的时钟频率为 f,那么定时器时钟周期为 1/f。
根据公式 T=clockin*(PRD+1)*(TDDR+1),我们可以得到:
T = 2 秒
clockin = 1/f
PRD = ?
TDDR = ?
将上面的值代入公式中,得到:
2 = (1/f) * (PRD+1) * (TDDR+1)
移项,得到:
f = 1 / (2 * (PRD+1) * (TDDR+1))
因为我们要求的是定时2秒的频率,所以我们可以将 TDDR 取最大值,即 TDDR=255,这样可以得到最小的 PRD 值,从而得到最大的时钟频率。
假设 PRD 的最小值为 1,代入公式得到:
f = 1 / (2 * (1+1) * (255+1)) = 1 / 1024
所以,定时2秒的频率为 1/1024 Hz,即约为 0.977 ms/次。
相关问题
解释以下代码:#include "myapp.h" // 定义指示灯寄存器地址和寄存器类型 #define LBDS (*((unsigned int *)0x400001)) void INTR_init( void ); void TIMER_init(void); int nCount; main() { nCount=0; PLL_Init(40); SDRAM_init(); LBDS=0; INTR_init(); TIMER_init(); while ( 1 ) { } } void interrupt Timer() { nCount++; nCount%=16; if ( nCount==0 ) LBDS^=1; } void INTR_init( void ) { IVPD=0xd0; IVPH=0xd0; IER0=0x10; DBIER0 =0x10; IFR0=0xffff; asm(" BCLR INTM"); } void TIMER_init(void) { ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0x1000; prd0 = (unsigned int *)0x1001; tcr0 = (unsigned int *)0x1002; prsc0 = (unsigned int *)0x1003; *tcr0 = 0x04f0; *tim0 = 0; *prd0 = 0x0ffff; *prsc0 = 2; *tcr0 = 0x00e0; }
这段代码是一个简单的嵌入式系统的例程,主要功能是通过定时器实现LED指示灯的闪烁效果。
首先,代码包含了一个头文件 "myapp.h",然后定义了一个宏 "#define LBDS (*((unsigned int *)0x400001))",这个宏用于定义LED指示灯的寄存器地址和类型。然后定义了三个函数:INTR_init()、TIMER_init()和中断处理函数Timer()。最后在主函数中初始化各项设置,包括PLL初始化、SDRAM初始化、设置LED指示灯的初始状态为关闭、初始化中断、初始化定时器,并进入一个无限循环。
中断处理函数Timer()用于处理定时器中断,每次中断计数器nCount加1,如果nCount等于16,则LED指示灯的状态取反,实现闪烁效果。
INTR_init()函数中设置了中断向量表的地址和中断使能寄存器的值,并清除中断标志寄存器。
TIMER_init()函数中设置定时器的周期、计数器、预分频器和控制寄存器的值,以实现定时器中断的周期。
总的来说,这段代码主要是通过定时器和中断来实现LED指示灯的闪烁效果,可以作为嵌入式系统的一个基础例程来学习。
int ggNARROWPWM(int cmprOld) { int gap=(DBLEN*11)>>4;//75*2, 150M, is 1us int prd=PWMPRD; int ret=cmprOld; if(cmprOld<gap){ret=0;} if(cmprOld>prd-gap) ret=prd; return ret;int cmprOld=1
这段代码定义了一个函数 `ggNARROWPWM`,其作用是用于对输入的 `cmprOld` 进行处理,并返回处理后的结果。
具体实现方式是:
1. 声明并初始化变量 `gap`,其值为 `(DBLEN*11)>>4`,即 `75*2>>4=150/16=9`。
2. 声明并初始化变量 `prd`,其值为 `PWMPRD`。
3. 声明并初始化变量 `ret`,其值为输入的 `cmprOld`。
4. 判断 `cmprOld` 是否小于 `gap`,若是,则将 `ret` 的值赋为0。
5. 判断 `cmprOld` 是否大于 `prd-gap`,若是,则将 `ret` 的值赋为 `prd`。
6. 返回处理后的结果 `ret`。
在输入 `cmprOld=1` 的情况下,由于 `cmprOld` 小于 `gap=9`,因此将 `ret` 的值赋为 0。最终,函数返回值为 0。
相关推荐
![rp](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)