1.F28335系统时钟来源

图中用绿色文字标识出从外部晶振如何设置自己想要的CPU时钟频率 ,通常我们选用的外部晶振为30MHz,硬件连接如图中所示,通过PLL使能后先进行倍频,倍频的倍数值是由寄存器规定,不可用寄存器规定值之外的数组进行倍频,分频数值同理。这里的30MHz最多可以让CPU的时钟达到150MHz,具体过程为30MHz*10(倍频数)/2(分频数)=150MHz。

(1)外部时钟源信号接入方法有2种,分别针对的是电压为3.3V的外部时钟和1.9V的外部时钟。          (A)外部时钟信号接入方式1,即采用3.3V的外部时钟。

这里的VDDIO数值在0-3.3V之间。

(B)外部时钟信号接入方式2,即采用1.9V的外部时钟。

这里的VDD数值在0-1.9V之间。

(2)内部时钟源信号接法(推荐)

通常晶振选中30MHz

2.F28335系统控制及外设时钟

3.时钟单元常用寄存器

3.1 外设时钟控制寄存器PCLCCR0/1/3

(1)外设时钟控制寄存器PCLKCR0各位定义

(2)外设时钟控制寄存器PCLKCR1各位定义

(3)外设时钟控制寄存器PCLKCR3各位定义

4.自定义系统时钟

/*-----------------------------------------------------------------------------Specify the PLL control register (PLLCR) and divide select (DIVSEL) value.
-----------------------------------------------------------------------------*/
//#define DSP28_DIVSEL   0   // Enable /4 for SYSCLKOUT
//#define DSP28_DIVSEL   1 // Disable /4 for SYSCKOUT
#define DSP28_DIVSEL     2 // Enable /2 for SYSCLKOUT
//#define DSP28_DIVSEL     3 // Enable /1 for SYSCLKOUT#define DSP28_PLLCR   10
//#define DSP28_PLLCR    9
//#define DSP28_PLLCR    8
//#define DSP28_PLLCR    7
//#define DSP28_PLLCR    6
//#define DSP28_PLLCR    5
//#define DSP28_PLLCR    4
//#define DSP28_PLLCR    3
//#define DSP28_PLLCR    2
//#define DSP28_PLLCR    1
//#define DSP28_PLLCR    0  // PLL is bypassed in this mode
//---------------------------------------------------------------------------
// InitSysCtrl:
//---------------------------------------------------------------------------
// 这段函数的功能就是将系统控制寄存器初始化到想要的状态;
//具体步骤可以分成四部分:
// - 禁止看门狗电路
// - 给PLLCR寄存器赋值以获得想要的系统时钟频率
// - 给高、低速外设时钟预定标寄存器赋值以获得想要的高、低速外设时钟频率
// - 对需要使用的外设时钟进行使能void InitSysCtrl(void)
{// Disable the watchdogDisableDog();// Initialize the PLL control: PLLCR and DIVSEL// DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.hInitPll(DSP28_PLLCR,DSP28_DIVSEL);// Initialize the peripheral clocksInitPeripheralClocks();
}
//---------------------------------------------------------------------------
// PLL相关寄存器初始化函数
//---------------------------------------------------------------------------
// 此函数初始化PLLSTS[CLKINDIV]和PLLCR控制寄存器void InitPll(Uint16 val, Uint16 divsel)//val 倍频系数   divsel 分频系数
{// Make sure the PLL is not running in limp modeif (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0){// Missing external clock has been detected// Replace this line with a call to an appropriate// SystemShutdown(); function.asm("        ESTOP0");}// DIVSEL MUST be 0 before PLLCR can be changed from// 0x0000. It is set to 0 by an external reset XRSn// This puts us in 1/4if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0){EALLOW;SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;EDIS;}// Change the PLLCRif (SysCtrlRegs.PLLCR.bit.DIV != val){EALLOW;// Before setting PLLCR turn off missing clock detect logicSysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;SysCtrlRegs.PLLCR.bit.DIV = val;EDIS;// Optional: Wait for PLL to lock.// During this time the CPU will switch to OSCCLK/2 until// the PLL is stable.  Once the PLL is stable the CPU will// switch to the new PLL value.//// This time-to-lock is monitored by a PLL lock counter.//// Code is not required to sit and wait for the PLL to lock.// However, if the code does anything that is timing critical,// and requires the correct clock be locked, then it is best to// wait until this switching has completed.// Wait for the PLL lock bit to be set.// The watchdog should be disabled before this loop, or fed within// the loop via ServiceDog().// Uncomment to disable the watchdogDisableDog();while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1){// Uncomment to service the watchdog// ServiceDog();}EALLOW;SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;EDIS;}// If switching to 1/2if((divsel == 1)||(divsel == 2)){EALLOW;SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel;EDIS;}// If switching to 1/1// * First go to 1/2 and let the power settle//   The time required will depend on the system, this is only an example// * Then switch to 1/1if(divsel == 3){EALLOW;SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;DELAY_US(50L);SysCtrlRegs.PLLSTS.bit.DIVSEL = 3;EDIS;}
}
//--------------------------------------------------------------------------
// 函数名:初始化外设时钟
//---------------------------------------------------------------------------
//这个是用来初始化外设模块的时钟,具体分2个步骤:
//首先设置高、低速外设预定标寄存器;
//第二是对各个外设时钟进行有选择的使能;
//为了降低功耗,尽量不使能不用的外设模块时钟;
//
//注:如果某一外设时钟没使能,则不能对其相关的寄存器进行读写;void InitPeripheralClocks(void)
{EALLOW;// HISPCP/LOSPCP prescale register settings, normally it will be set to default valuesSysCtrlRegs.HISPCP.all = 0x0001;SysCtrlRegs.LOSPCP.all = 0x0002;//Lowspeedclock=SYSCLKOUT/4=150/4=37.5MHZ;// XCLKOUT to SYSCLKOUT ratio.  By default XCLKOUT = 1/4 SYSCLKOUT// XTIMCLK = SYSCLKOUT/2XintfRegs.XINTCNF2.bit.XTIMCLK = 1;// XCLKOUT = XTIMCLK/2XintfRegs.XINTCNF2.bit.CLKMODE = 1;// Enable XCLKOUTXintfRegs.XINTCNF2.bit.CLKOFF = 0;// Peripheral clock enables set for the selected peripherals.
// If you are not using a peripheral leave the clock off
// to save on power.
//
// Note: not all peripherals are available on all 2833x derivates.
// Refer to the datasheet for your particular device.
//
// This function is not written to be an example of efficient code.SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;    // ADC// *IMPORTANT*// The ADC_cal function, which  copies the ADC calibration values from TI reserved// OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the// Boot ROM. If the boot ROM code is bypassed during the debug process, the// following function MUST be called for the ADC to function according// to specification. The clocks to the ADC MUST be enabled before calling this// function.// See the device data manual and/or the ADC Reference// Manual for more information.ADC_cal();SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1;   // I2CSysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-ASysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1;   // SCI-BSysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1;   // SCI-CSysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;   // SPI-ASysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-ASysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-BSysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1;    // eCAN-ASysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1;    // eCAN-BSysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWMSysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;  // ePWM2SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;  // ePWM3SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;  // ePWM4SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;  // ePWM5SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;  // ePWM6SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;   // Enable TBCLK within the ePWMSysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;  // eCAP3SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;  // eCAP4SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1;  // eCAP5SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1;  // eCAP6SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;  // eCAP1SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;  // eCAP2SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;  // eQEP1SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;  // eQEP2SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1;       // DMA ClockSysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;     // XTIMCLKSysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    // GPIO input clockEDIS;
}

DSP F28335时钟及控制系统相关推荐

  1. DSP之时钟与定时器之一时钟发生器

        时钟与定时器包括时钟产生器.通用定时器.实时时钟以及看门狗定时器等. 时钟产生器的功能是产生CPU的工作时钟,并提供CLKOUT时钟输出:通用定时器.实时时钟及看门狗定时器的功能是通过计数器为 ...

  2. Simulink嵌入式自动代码DSP F28335(2)——SCI通信

    Simulink嵌入式自动代码DSP F28335(2)--SCI通信 简述 1.文件模型建立 1.1 自动代码文件 1.2 上位机文件Host 2.环境配置 2.1 Simulink配置 2.2 电 ...

  3. DSP之时钟与定时器之四看门狗定时器

    1 工作方式                在数字信号处理器的工作过程中有时会发生一些异常情况,这可能是在软件执行时发生错误,如堆栈溢出.内存溢出等软件编写时没有预料到的错误,也可能是DSP在运行时受 ...

  4. DSP之时钟与定时器之三RTC

    实时时钟RTC提供一个时间基准,并且可以定时中断DSP. 1. 实时时钟RTC概述 TMS320VC5509实时时钟有如下功能: 可以到2099年的长达100年的日历: 同DSP内部CPU连接的外设总 ...

  5. DSP之时钟与定时器之二通用定时器

    C55x DSP片内有两个2通用定时器,利用定时器可向CPU产生周期性中断或向DSP片外的器件提供周期信号.其中TMS320VC5503/5507/5509/5510 DSP提供的是2个20位通用定时 ...

  6. DSP的时钟和系统控制

    1.1 振荡器OSC和锁相环PLL     为了能让DSP芯片工作起来,需要内部振荡器OSC和锁相环PLL等组成的时钟模块来提供规律的时钟脉冲.     锁相环是一种控制晶振使其相对于参考信号保持恒定 ...

  7. DSP F28335的SCI模块

    28335之SCI模块 1.介绍 TMS320F28335内部有三个SCI模块,SCIA.SCIB.SCIC. 每一个SCI模块都有一个接收器和发送器,SCI的接收器和发送器各有一个16级的FIFO( ...

  8. DSP F28335不同波特率参数设置

    ScicRegs.SCIHBAUD = 0x0001; // 9600 baud @LSPCLK = 37.5MHz.ScicRegs.SCILBAUD = 0x00E7;

  9. DSP快速复盘——时钟系统总结(基本知识+核心代码)基于TMS2802x处理器

    写作背景:我最近在写一个DSP的项目,由于上一次接触DSP处理器写代码是在一两年之前,再加上之前主要是学习了STM32,关于DSP的一些知识已经忘记得差不多了.现在重新捡起DSP来,又要花费大量得时间 ...

最新文章

  1. EasyUI –tree、combotree学习总结
  2. yii2 checkboxlist使用及数据入库
  3. Linux 设备树device tree 使用手册
  4. boost::hana::zip用法的测试程序
  5. 从循环引用谈依赖倒置原则
  6. html 三列布局(两列自适应,一列固定宽度)
  7. Python学习-终端字体高亮显示
  8. 20165322 第二周结队编程-四则运算
  9. Latex中文字超过文本宽度时解决方法
  10. Kafka 环境部署与配置详解
  11. Install Java on Ubuntu server
  12. PyQt4 UI设计和调用 使用eric6
  13. 算法:回溯十六 Add and Search Word添加并查找单词
  14. js各种for循环及性能比较
  15. 2019年零售企业营销变革:私域流量池 + 个人IP =流量价值最大化!
  16. 若依RuoYi-Vue 入门零接触超详细(一)
  17. 发展零碳的重要支柱——光储直柔
  18. sql里面如何将年月日时分秒的格式转换成年月日
  19. c++给所有数组元素赋初值0
  20. mybatis的primaryKey问题

热门文章

  1. hexo中matery主题的个性化定制
  2. 服务器紧急维修,Hypixel服务器紧急维护
  3. html-css10 过渡/米兔练习/动画/动画练习/小球动画/平移和小米移动图
  4. 解决IE浏览器低版本兼容性问题的最快方法
  5. canvas开发手册完整版
  6. 情感失忆的伤感空间日志_如果说回忆是甜蜜的
  7. python国内外研究现状-对当今Python 快速发展的研究与展望
  8. 豪杰DVD播放器 3.0.8 URL重新定向栈溢出漏洞
  9. Dubbo学习笔记:No provider available for the service ...异常问题的解决
  10. Javase day06_汇总