一、F28335系统时钟来源
系统时钟具体说明可查找TI提供的芯片数据手册,3.6节 ,OSC(The on-chip oscillator circuit)and PLL Block,有简要说明。系统控制与中断的具体寄存器等详细信息在用户手册的System Comtrol and Interrupts中,没事儿去翻吧;以下为简要说明。
F28335的时钟可来由两种方式提供,3.3/1.9V的外部时钟信号和片上晶振,具体连接电路查看数据手册;
比如我的开发版用的是一个30MHz的晶振。
外部时钟信号进来后,即OSCCLK,由PLL锁相环进行倍频(可选)后,再经过分频处理,得到CLKIN信号;
具体操作由:PLL状态寄存器 PLLSTS 和PLL控制寄存器PLLCR控制完成。
- PLLSTS结构体如下图:(直接翻代码吧)
(吐槽(划掉):用位域了诶)
通常是需要使用PLL对时钟信号进行倍频的;其中OSCOFF 和PLLOFF 默认为初始值0 就行了,即OSC开关闭合,PLL使能;OSCCLK经PLL转为VCOCLK,再由PLLCR控制倍频输出;
具体的分频模式如下图:4种,由DIVSEL位控制;
2. PLLCR结构体如下图:
具体的模式选择输出如下图所示:PLLCR控制倍频,PLLSTS控制分频
F28335芯片最高支持150MHz,我那板上晶振是30MHz,那么可选10倍频+2分频实现150MHz;跑了一下,寄存器值如下图所示:
00ic例程代码上是这样的:#define 宏 + 初始化函数 在"DSP2833x_Examples.h"文件里
emmm,那么CLKIN就有了;
二、F28335系统控制及外设时钟
CLKIN 为 芯片内核与片内外设(ADC/EPWM/SPI/CAN .etc)提供时钟信号;一般用到什么外设再开启对应时钟,以降低功耗;供给到片内外设的时钟有些还要经过预分频处理,通常由LOSPCP(Low-Speed Peripheral Clock Pre-Scaler Register)和HISPCP(High-Speed Peripheral Clock Pre-Scaler Register)控制,即高速、低速外设时钟预分频寄存器,也有直接2分频的,如eCAN;大概长下面这样的:
三、时钟单元常用寄存器
一些时钟寄存器的地址、长度与简写;
简要介绍俩:
PCLKCR0/1/3(Peripheral Clock Control 0/1/3 Register):外设时钟控制寄存器,就上上个图那个Peripheral Register;用来enable/disable外设时钟的,比如GPIO时钟由PCLKCR3控制
四、延时函数
DSP2833x_Examples.h 文件里自带了一个延时函数,具体的描述见汇编文件:DSP2833x_usDelay.asm
;// #define CPU_RATE 6.667L // for a 150MHz CPU clock speed
;// or #define CPU_RATE 10.000L // for a 100MHz CPU clock speed
// DO NOT MODIFY THIS LINE.
#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)
大概就是,轮询自减,可被中断打断,延时所需的时钟周期为:DELAY_CPU_CYCLES = 9 + 5*LoopCount;需要9个额外时钟周期开销完成配置,再加上每次循环需要5个时钟周期,每个时钟周期所需时间:1/0.15 = 6.66… nS,综上,就有上面宏定义那个公式。
EMMMMl,先这样,后面用到了再补充