DSP定时器的计算

以下是 0 到 F 的十六进制数对应的四位二进制表示的对照表:

十六进制二进制
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001
A1010
B1011
C1100
D1101
E1110
F1111

定时器周期:

我们先将 0x1742 转换成二进制形式:

0x1742 = 0001 0111 0100 0010(二进制)
          ↑    ↑    ↑    ↑
        高位              低位(从右向左数位)

4位是0

5位是0

8位是0

9位是1

10位是1

11位是1

12位是0

以 TI 的 TMS320 系列 EVA 模块为例,T1CON 各个位的定义通常如下:

名称含义
15不常用(保留)
14不常用(保留)
13不常用(保留)
12-11TMODE1-TMODE0计数模式
10-8TPS2-TPS0时钟预分频
7-6不常用或保留
5-4TCLKS1-TCLKS0定时器时钟源
3-0其他控制位(如启用位等)

T1CON = 0x1742,可以拆解成以下几个关键配置位:

  • TMODE1- TMODE0 = 10连续增计数模式

  • TPS2-TPS0 = 7时钟预分频比为 1/128

  • TCLKS1-TCLKS0 = 00选择 HSPCLK(高频系统时钟)作为定时器的时钟源

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

  • TMODE1-TMODE0 = Bit12~11 = 10

    • 二进制位置:bit 12 = 1, bit 11 = 0

    • 含义:10 → 连续增计数模式(Continuous up-counting mode)

  • TPS2-TPS0 = Bit10~8 = 111

    • TPS2 = 1(bit10),TPS1 = 1(bit9),TPS0 = 1(bit8)

    • 即:111 → 分频比为 1/128(这个是固定映射关系)

  • TCLKS1-TCLKS0 = Bit5~4 = 00

    • 选择定时器时钟源为 HSPCLK

T1PR 是定时器1的 预分频寄存器(Prescaler Register)

它的值用于 将定时器的输入时钟再进行一次分频,分频因子就是你写入的值。

0x0200 转十进制                     0x0200 = 2 × 256 = 512

定时器输出 PWM 信号的频率与占空比:

这两页讲的是 TMS320F281x 定时器输出 PWM 信号的频率与占空比 的计算。


第一部分:T1 定时器输出 PWM 的频率与占空比

已知配置:

  • 外部时钟:75 MHz

  • T1PR = 0xFFFF = 65535

  • T1CON = 0x1042:连续计数模式、无分频

  • T1CMPR = 0x3C00 = 15360

1️⃣ PWM 频率计算:

PWM 频率由 T1PR 控制,计算公式如下:

频率 = 定时器时钟频率 / (T1PR + 1)
     = 75MHz / (0xFFFF + 1)
     = 75MHz / 65536 ≈ 1.144 kHz

2️⃣ 占空比计算:

高电平时间 = T1CMPR = 0x3C00 = 15360
周期总时间 = T1PR + 1 = 65536

高电平占空比 = 15360 / 65536 ≈ 23.4%
低电平占空比 = 1 - 23.4% = 76.6%

第二部分:T2 定时器输出 PWM 的频率与占空比

已知配置:

  • T2PR = 0x0FFF = 4095

  • T2CON = 0x1042:连续计数、无分频

  • T2CMPR = 0x03C0 = 960

  • 输出模式:T2PIN = 2 → 高电平有效


1️⃣ PWM 频率计算:

频率 = 75MHz / (0x0FFF + 1)
     = 75MHz / 4096
     = 18.31 kHz

2️⃣ 占空比计算:

高电平时间 = 0x0FFF - 0x03C0 = 4095 - 960 = 3135

高电平占空比 = 3135 / 4096 ≈ 76.5%
低电平占空比 = 1 - 76.5% = 23.5%

✅ 总结:

定时器频率高电平占空比低电平占空比
T11.144 kHz23.4%76.6%
T218.31 kHz76.5%23.5%

### DSP 定时器的时间计算方法 在DSP中,定时器时间的计算主要依赖于定时器的工作频率和预设值。对于基于周期计数的方式,可以通过设置定时器寄存器中的初值来决定溢出所需的时间长度。 #### 基本概念 - **系统时钟源**:决定了定时器每秒钟能够产生的脉冲数量。 - **分频系数**:用于降低输入到定时器模块的实际时钟速率。 - **计数值/匹配值**:当计数达到此设定值时触发中断或其他动作[^1]。 #### 时间计算公式 假设已知目标延时时长`T_delay(s)`,则可以根据以下参数计算所需的计数值: \[ \text{Count} = T_{\text{delay}} * f_{\text{clk\_timer}} / PSC \] 其中, - `f_clk_timer`: 定时器内部使用的时钟频率(Hz),等于外部时钟除以可能存在的任何前置分频; - `PSC`: 可选的比例因子或预分频器设置;如果不存在,则取值为1; - `Count`: 需要加载至定时器比较寄存器内的数值[^2]。 #### C语言实现示例 下面是通过配置定时器产生固定延迟的一个简单例子,在这里假定使用的是TI公司的C2000系列DSP芯片,并采用默认的时钟配置: ```c // 设置定时器周期 (单位秒) float delay_seconds = 0.5; // 半秒为例 // 获取当前系统的定时器时钟频率 Uint32 timer_clock_frequency_hz; EALLOW; SysCtrlRegs.PLLSTS.bit.DIVSEL = 7; // PLL倍频=8,即SYSCLKOUT=60MHz SysCtrlRegs.LOSPCP.all = 0x0003; // LSPCLKDIV=4,LSPCLK=15Mhz EDIS; timer_clock_frequency_hz = SysClkGetFreq(); // 计算并装载计数值 Uint32 count_value = ((float)timer_clock_frequency_hz * delay_seconds); Timer1Regs.TPR.all = count_value >> 16; Timer1Regs.TPRH.all = count_value & 0xFFFF; // 启动定时器... Timer1Regs.TCR.bit.TSS = 0; ``` 上述代码片段展示了如何根据期望的等待时间和实际可用的时钟资源来调整定时器的行为[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值