查看: 830|回复: 0

[经验] DSP28335 外设时钟

[复制链接]

该用户从未签到

发表于 2021-1-13 18:41:50 | 显示全部楼层 |阅读模式
分享到:

TMS320F28335通过外部时钟信号、OSC和PLL产生倍频时钟信号CLKIN后,CLKIN经过CPU后产生时钟SYSCLKOUT(CLKIN和SYSCLKOUT频率是一样的),SYSCLKOUT给各个片内外设提供时钟信号。为了实现低功耗和提供高低频率时钟信号,需要把SYSCLKOUT进一步分频,本章主要讲解了对SYSCLKOUT分频产生低频时钟信号和高频时钟信号,完成外设时钟初始化的过程。

1.时钟系统

第一类寄存器是外设时钟控制寄存器PCLKCR,它包括16位的PCLKCR0、PCLKCR1、PCLKCR3(不知道为什么跳过了PCLKCR2??),主要是控制使能和禁用外设时钟;
第二类寄存器是高低频外设时钟分频寄存器,它包括高频外设时钟分频寄存器16位的HISPCP(High-Speed Peripheral Clock Prescaler Register)和低频外设时钟分频寄存器16位的LOSPCP(Low-Speed Peripheral Clock Prescaler Register)


注:
- XCLKOUT引脚上电或者复位默认情况下是激活状态的。
- XCLKOUT引脚没有上拉或者下拉电阻。
- 如果XCLKOUT引脚不使用时,可以通过XINTCNF2[CLKOFF]=1关闭。
- 默认情况下,XTIMCLK=SYSCLKOUT/2,它是外扩模块(外扩FLASH、SRAM等)的时钟

2.外设时钟初始化代码

此初始化代码主要来自TI官方例程,注释是个人理解。

  1. /*

  2. *函数名称:InitPeripheralClocks

  3. *输入参数:无

  4. *输出参数:无

  5. *函数功能:初始化外设时钟模块,主要包括产生高低速时钟、开关所需片内外设模块时*钟等

  6. */

  7. void InitPeripheralClocks(void)

  8. {

  9. EALLOW;


  10. // 高低频外设时钟分频寄存器HISPCP/LOSPCP设置,正常情况下采用默认值,即高频时钟为SYSCLKOUT/2,低速时钟为SYSCLKOUT/4

  11. SysCtrlRegs.HISPCP.all = 0x0001;

  12. SysCtrlRegs.LOSPCP.all = 0x0002;


  13. // 时钟输出引脚XCLKOUT设置,默认情况XCLKOUT = SYSCLKOUT/4

  14. // XTIMCLK = SYSCLKOUT/2

  15. XintfRegs.XINTCNF2.bit.XTIMCLK = 1;//extern interface clock<->XinfCLK

  16. // XCLKOUT = XTIMCLK/2

  17. XintfRegs.XINTCNF2.bit.CLKMODE = 1;

  18. // Enable XCLKOUT

  19. XintfRegs.XINTCNF2.bit.CLKOFF = 0;


  20. // 给所选用外设使能外设时钟

  21. // 如果不使用某外设模块,禁用它的时钟以省电

  22. // 下面代码要根据自己使用的外设模块进行相应的修改


  23. SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC


  24. // *重要提醒*

  25. // ADC_cal()函数, 可以从TI保留的OTP中复制ADC校验值,并将校验值赋值给ADCREFSEL和ADCOFFTRIM寄存器,该过程在BOOT ROM中自动地完成

  26. //如果在调试过程中,BOOT ROM代码旁路未使用,那么必须显示调用下面 ADC_cal()函数(推荐显示调用)

  27. //在调用 ADC_cal()前,必须使能ADC时钟

  28. // 有关ADC更多的信息参见设备数据手册


  29. ADC_cal();


  30. //本例中使能了所有片内外设模块时钟

  31. SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1; // I2C

  32. SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A

  33. SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1; // SCI-B

  34. SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1; // SCI-C

  35. SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-A

  36. SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-A

  37. SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-B

  38. SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1; // eCAN-A

  39. SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1; // eCAN-B


  40. SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM

  41. SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1

  42. SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; // ePWM2

  43. SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1; // ePWM3

  44. SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1; // ePWM4

  45. SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1; // ePWM5

  46. SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1; // ePWM6

  47. SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM


  48. SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1; // eCAP3

  49. SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1; // eCAP4

  50. SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1; // eCAP5

  51. SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1; // eCAP6

  52. SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; // eCAP1

  53. SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1; // eCAP2

  54. SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1; // eQEP1

  55. SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1; // eQEP2


  56. SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0

  57. SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1

  58. SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2


  59. SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // DMA Clock

  60. SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; // XTIMCLK

  61. SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock


  62. EDIS;

  63. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-23 15:37 , Processed in 0.104798 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.