---
# System prepended metadata

title: TI F280025C -- Clock
tags: [TI C2000]

---

# 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)
