本文來源電子發燒友社區,作者: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 }
不知道寫啥,暫時先寫這么多
-
中科昊芯
+關注
關注
5文章
80瀏覽量
5184 -
開發板試用
+關注
關注
3文章
301瀏覽量
2109
發布評論請先 登錄
相關推薦
評論