工具/软件:Code Composer Studio
大家好、我最近使用 F2808在 CCS 6中创建了我的第一个项目(我第一次使用这个微控制器)。 这是一个简单的项目,如果我只初始化 CLK,我使用函数 InitSysCtrl()。 我还使用标准链接器命令文件 F2808.cmd (我不更改它)。 但我的代码是行循环: while (SysCtrlRegs.PLLSTS.bit.PLLLOCKS!= 1)、这意味着 PLL 被锁定。
时钟配置:OSCCLK - 20、CLKINDIV - 2、PLLCR - 10。
e2e.ti.com/.../F2808.rar F2808.cmd
如果有人知道此问题的原因-请帮助我
#include "DSP280x_Device.h"
void InitSysCtrl (void)
{
易失性 uint16 i; //通用 uint16
volatile int16虚拟; //通用易失性 int16
EALLOW; //启用 EALLOW 受保护寄存器访问
DevEmuRegs.PROTSTART = 0x0100; //将默认值写入保护起始寄存器
DevEmuRegs.PROTRANGE = 0x00FF; //将默认值写入保护范围寄存器
虚拟= CsmPwl.PSWD0; //虚拟读取 PWL 位置
虚拟= CsmPwl.PSWD1; //虚拟读取 PWL 位置
虚拟= CsmPwl.PSWD2; //虚拟读取 PWL 位置
虚拟= CsmPwl.PSWD3; //虚拟读取 PWL 位置
虚拟= CsmPwl.PSWD4; //虚拟读取 PWL 位置
虚拟= CsmPwl.PSWD5; //虚拟读取 PWL 位置
虚拟= CsmPwl.PSWD6; //虚拟读取 PWL 位置
虚拟= CsmPwl.PSWD7; //虚拟读取 PWL 位置
SysCtrlRegs.WDCR = 0x00E8;
SysCtrlRegs.SCSR = 0x0000;
//确保 PLL 没有在跛形模式下运行
if (SysCtrlRegs.PLLSTS.bit.MCLKSTS!= 1)
{// PLL 未在跛行模式下运行
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1; //在设置 PLLCR 之前关闭缺少时钟检测
SysCtrlRegs.PLLCR.bit.DIV = 0x000A; // PLLx5
while (SysCtrlRegs.PLLSTS.bit.PLLLOCKS!= 1)
{//等待 PLLLOCKS 位被置位
SysCtrlRegs.WDKEY = 0x0055; //等待时处理看门狗
SysCtrlRegs.WDKEY = 0x00AA; //如果用户启用了它。
}
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0; //启用缺少时钟检测电路
}
否则{ // PLL 正在跛行模式下运行
asm (" ESTOP0");
}
/***配置时钟***/
SysCtrlRegs.HISPCP。ALL = 0x0004; //高速外设时钟预分频器、HSPCLK=SYSCLKOUT/8
SysCtrlRegs.LOSPCP。all = 0x0002; //低速 periph 时钟预分频器、LOSPCLK=SYSCLKOUT/4
SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;// SYSCLKOUT 至 eQEP2被启用
SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;//启用 SYSCLKOUT 至 eQEP1
SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;//启用 SYSCLKOUT 至 eCAP4
SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;// SYSCLKOUT 至 eCAP3被启用
SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;//启用 SYSCLKOUT 至 eCAP2
SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;//启用 SYSCLKOUT 至 eCAP1
SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;//启用 SYSCLKOUT 至 ePWM6
SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;//启用 SYSCLKOUT 至 ePWM5
SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;//启用 SYSCLKOUT 至 ePWM4
SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;//启用 SYSCLKOUT 至 ePWM3
SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;//启用 SYSCLKOUT 至 ePWM2
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;// SYSCLKOUT 至 ePWM1启用
SysCtrlRegs.PCLKCR0.bit.ECANBENCLK = 1;// SYSCLKOUT 至 eCAN-B 被启用
SysCtrlRegs.PCLKCR0.bit.ECANAENCLK = 1;// SYSCLKOUT 至 eCAN-A 被启用
SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1;//使能 LSPCLK 到 SCI-B
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;//使能 LSPCLK 到 SCI-A
SysCtrlRegs.PCLKCR0.bit.SPIBENCLK = 1;//使能 LSPCLK 到 SPI-B
SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;//使能 LSPCLK 到 SPI-A
SysCtrlRegs.PCLKCR0.bit.SPIDENCLK = 1;//使能 LSPCLK 到 SPI-D
SysCtrlRegs.PCLKCR0.bit.SPICENCLK = 1;//使能 LSPCLK 到 SPI-C
SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1;// SYSCLKOUT 至 I2C 被启用
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // HSPCLK 到 ADC 被启用
SysCtrlRegs.LPMCR0.all = 0x00FC;
SysCtrlRegs.XCLK.bit.XCLKOUTDIV = 2;
EDIS;
}
int main (void)
{
InitSysCtrl();
}