【中科昊芯Start_DSC28034PNT湖人开发板试用体验】DSC28034PNT片上系统时钟及中断向量初始化

描述

本文来源电子发烧友社区,作者:jf_55236000, 帖子地址:https://bbs.elecfans.com/jishu_2292645_1_1.html

在使用一款新的MCU时,首先要做的事情就是要配置好芯片的系统时钟及中断向量,这样才能让MCU的基本内核跑起来,看了DSC28034PNT的官方例程,DSP2803x_SysCtrl.c文件中基本已经将各种系统时钟模式配置的很全面详细了,通过调用配置好的函数,就可以完成自己想要的系统时钟模式配置,由于官方例程是将片上内部12Mhz时钟通过PLL倍频10倍成120Mhz作为系统时钟,现在我们将其改为使用外部10Mhz晶振通过PLL倍频12倍成120Mhz作为系统时钟,具体配置代码如下:


 
/******************************************************************

*函数名:void SystemInit(void) *参 数 :无 *返回值:无 *作 用 :初始化DSP片上外设 ******************************************************************/ void SystemInit(void) { DisableDog(); // Disable the watchdog


 
(*Device_cal)(); // Oscillator calibration values XtalOscSel(); // SelectExternal CRYSTAL oscillator as Clock Source InitPll(DSP28_PLLCR, DSP28_DIVSEL); // Initialize the PLL control InitPeripheralClocks(); // Initialize the peripheral clocks InitFlash(); // Initializes the Flash Control registers InitPieCtrl(); // Initializes the PIE control registers IER = 0x0000; // Disable CPU Interrupt and Flag IFR = 0x0000; InitPieVectTable(); // Initializes the PIE vector table InitCpuTimer(); // Initializes the Timer

}

 

首先关闭看门狗,防止在喂狗之前系统复位,然后打开并选择外部10M晶振作为系统PLL的输入时钟,通过修改宏定义设置DSP28_PLLCR为12,DSP28_DIVSEL为3,PLL将10M晶振时钟倍频10倍分频1倍成120Mhz作为系统时钟,然后再打开各种用到的外设的时钟,并根据不同的系统时钟频率初始化Flash访问等待时间,然后再关闭PIE中断和系统总中断,并清除所有中断的中断标志位,上面所有配置函数除了InitCpuTimer()为自己配置的,其他均为调用官方驱动库。

InitCpuTimer()为初始化一个定时器,计数器每1us减1,计数周期为1s中,后序将利用这个定时器测量一些函数或算法的执行时间,以评估DSC28034PNT的运算性能,InitCpuTimer()的初始化代码如下:


 
/******************************************************************

*函数名:void InitCpuTimer(void) *参 数 :无 *返回值:无 *作 用 :初始化定时器 ******************************************************************/ void InitCpuTimer(void) { //==========CPU Timer 0=========================// CpuTimer0Regs.PRD.all = 1000000; // Initialize timer period to 1s: CpuTimer0Regs.TPR.bit.PSC = 120; // Initialize pre-scale counter to divide by 1 (SYSCLKOUT): CpuTimer0Regs.TPR.bit.TDDR = 120; CpuTimer0Regs.TCR.bit.TSS = 1; // Make sure timer is stopped: CpuTimer0Regs.TCR.bit.TRB = 1; // Reload all counter register with period value: CpuTimer0Regs.TCR.bit.TIE = 0; // 0 = Disable/ 1 = Enable Timer Interrupt CpuTimer0Regs.TCR.bit.TSS = 0; // Start CpuTimer0 }

 

不知道写啥,暂时先写这么多

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分