已知 TMS320VC5509A DSP 的外部晶体振荡器频率为 12MHz,试编程实现将系统主时钟频率值设 定为 360MHz,CLKOUT 时钟输出引脚输出频率为 60MHz。(已知 EBSR 寄存器地址为 0x6c00) (1) 分析系统工作时钟的计算方法和各个相关寄存器的对应寄存器位的值。(5 分) (2) 利用 CSL 库实现对时钟发生器的 C 语言编程。(
时间: 2024-02-17 14:05:18 浏览: 123
TMS320VC5509A
5星 · 资源好评率100%
(1) 系统工作时钟的计算方法:
TMS320VC5509A DSP 的系统时钟分为两级,第一级由 PLL1 控制,第二级由 PLL2 控制。
假设外部晶体振荡器频率为 fosc,PLL1 的倍频因子为 M,除频因子为 N,PLL2 的倍频因子为 P,除频因子为 Q,则系统主时钟频率 fSYS 的计算公式为:
fSYS = fosc * M / N * P / Q
CLKOUT 时钟输出引脚输出频率 fCLKOUT 的计算公式为:
fCLKOUT = fSYS / K
其中,K 为 CLKOUT 寄存器中的分频因子。
各个相关寄存器的对应寄存器位的值:
- PLLCTL 寄存器:控制 PLL1 的启用和复位。PLL1 的启用位为 PLLRST = 0,PLL1 的复位位为 PLLPWRDN = 1。
- PLLM 寄存器:设置 PLL1 的倍频因子 M。
- PLLDIV1 寄存器:设置 PLL1 的除频因子 N。
- PLLDIV2 寄存器:设置 PLL2 的除频因子 Q。
- PLLCMD 寄存器:设置 PLL2 的倍频因子 P 和启用位。
(2) 利用 CSL 库实现对时钟发生器的 C 语言编程:
下面是一个示例代码,用于将系统主时钟频率值设置为 360MHz,CLKOUT 时钟输出引脚输出频率为 60MHz:
```c
#include <csl.h>
#define EBSR_ADDR 0x6C00
void init_clock(void)
{
PLLCTL = 0x8001; // PLL1 复位,PLL1 不启用
PLLM = 0x000C; // PLL1 倍频因子 M = 12
PLLDIV1 = 0x0001; // PLL1 除频因子 N = 1
PLLDIV2 = 0x0080; // PLL2 除频因子 Q = 128
PLLCMD = 0x5100; // PLL2 倍频因子 P = 5,PLL2 启用
EBSR = 0x0000; // 将 EBSR 寄存器清零,关闭所有时钟输出
CLKOUT = 0x0002; // CLKOUT 分频因子 K = 6,使能 CLKOUT 输出
EBSR = 0x0001; // 使能系统时钟输出
}
int main(void)
{
init_clock();
return 0;
}
```
阅读全文