# TI F280025C -- Clock 測試調整 Clock 的影響,透過固定的 Timer Period = 1000,呼叫中斷處理函式,Toggle 輸出的腳位檢查結果。 改變不同 Clock,可得到不同的輸出方波訊號。 設定 Timer Period = 1000 - Clock = 100 MHz —> Output Period = 50 kHz - Clock = 20 MHz —> Output Period = 10 kHz --- ## Device - F280025C LaunchPad™ development kit for C2000™ real-time MCU ![image](https://hackmd.io/_uploads/SJXgjX9rJe.png) - CCS ![Untitled (1)](https://hackmd.io/_uploads/Bk8bimqS1g.png) --- ## Setting 1. Import universal 的空專案 從 Resource Explorer 找到對應開發版 MCU 的範例程式位置,可以直接將開發版連接電腦,系統會自動搜尋篩選對應的資料位置。 選擇 universal > universal_c2000,並匯入至本機端,匯入後針對專案進行修改不會影響到原本匯入的資料,所以如果對於修改後的內容出錯,想要重新取得空的專案,可以依照同樣流程匯入。 ![Untitled (2)](https://hackmd.io/_uploads/BkbV3Q5rJx.png) 2. Active .ccxml 因為使用的是控制板,所以激活控制板的 .ccxml ![Untitled (5)](https://hackmd.io/_uploads/H1_x079Byg.png) 3. Choose Configurations 選擇組態 ![Untitled (6)](https://hackmd.io/_uploads/Bk-fR79H1e.png) 4. Setting .syscfg 打開專案的 universal_c2000.syscfg 進行相關設定 ![Untitled (7)](https://hackmd.io/_uploads/B1yVAmcB1l.png) 5. Setting GPIO ![Untitled (1)](https://hackmd.io/_uploads/SyzfN49HJe.png) 6. Setting CPUTimer ![Untitled (1)](https://hackmd.io/_uploads/ryWUV49SJl.png) 7. Setting Clock Tree Clock Tree 設定對應的參數,確定輸入源頭跟最終的 SYSCLK 頻率,在 VCOCLK 則需要注意,至少要 220 MHz 以上 ![Untitled (1)](https://hackmd.io/_uploads/Bk6FENqBkx.png) --- ## Code Clock Tree 設定對應到 “clcoktree.h” 跟 “device.c” ``` in [clocktree.h] //Input Clock to SYSPLL (OSCCLK) = INTOSC1 = 10 MHz // #define DEVICE_OSCSRC_FREQ 10000000U // // Define to pass to SysCtl_setClock(). Will configure the clock as follows: // SYSPLL ENABLED // SYSCLK = 100 MHz = 10 MHz (OSCCLK) * 40 (IMULT) / (1 (REFDIV) * 2 (ODIV) * 2 (SYSCLKDIVSEL)) #define DEVICE_SYSCLK_FREQ ((DEVICE_OSCSRC_FREQ * 40) / (1 * 2 * 2)) // #define DEVICE_SETCLOCK_CFG (SYSCTL_OSCSRC_OSC1 | SYSCTL_IMULT(40) | SYSCTL_REFDIV(1) | SYSCTL_ODIV(2)| SYSCTL_SYSDIV(2) | SYSCTL_PLL_ENABLE | SYSCTL_DCC_BASE_0) ``` 設定中斷副函式,副函式名稱跟在前面設定的副函式名稱相同 ``` in [main.c] __interrupt void int_timer0_isr(void) { GPIO_togglePin(myGPIO0); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1); } ``` 設定週期,基本週期為 $SYSCLK/period$,設定在 main.c 的 while 迴圈中 ``` in [main.c] while(1) { CPUTimer_setPeriod(myCPUTIMER0_BASE, 1000); } ``` --- ## Result 1. 設定內振,Clock = 20 MHz —> Output Period = 10 kHz ![1](https://hackmd.io/_uploads/r14OS4crJx.png) 2. 設定內振,Clock = 100 MHz —> Output Period = 50 kHz ![2 (2)](https://hackmd.io/_uploads/ByZKSVcSkg.png) 3. 設定外振,Clock = 20 MHz —> Output Period = 10 kHz ![3](https://hackmd.io/_uploads/HJutSE5r1e.png) 4. 設定外振,Clock = 100 MHz —> Output Period = 50 kHz ![4](https://hackmd.io/_uploads/S1oKSNqBJl.png)