# TI F280025C -- GPIO IN/OUT & Timer 1. 使用 Timer + GPIO Output 產生 1 Hz 方波訊號 2. 使用 Timer + GPIO Output 產生 100 Hz 方波訊號 3. 使用 Timer + GPIO Output 產生 10 kHz 方波訊號 4. GPIO Input 接收 Low 訊號,在 Debug Mode 中確認數值為 0 5. GPIO Input 接收 High 訊號,在 Debug Mode 中確認數值為 1 --- ## Device - F280025C LaunchPad™ development kit for C2000™ real-time MCU  - CCS  --- ## Setting 1. Import universal 的空專案 從 Resource Explorer 找到對應開發版 MCU 的範例程式位置,可以直接將開發版連接電腦,系統會自動搜尋篩選對應的資料位置。 選擇 universal > universal_c2000,並匯入至本機端,匯入後針對專案進行修改不會影響到原本匯入的資料,所以如果對於修改後的內容出錯,想要重新取得空的專案,可以依照同樣流程匯入。  2. Active .ccxml 因為使用的是控制板,所以激活控制板的 .ccxml  3. Choose Configurations 選擇組態  4. Setting .syscfg 打開專案的 universal_c2000.syscfg 進行相關設定  5. Setting GPIO :::info - GPIO Direction:設定輸入輸出 - Pin Type:設定輸入 Push-pull / Open drain,設定輸入 Pull-up / Floating - PinMux --> GPIO:腳位選用 :::  - 設定中斷處理  6. Setting CPUTimer Timer 的時鐘使用如下,在 datasheet 中可以看出使用的是 SYSCLK  :::info 在 sysconfig 啟用 CPUTimer - Timer Prescaler:將輸入 SYSCLK 進行除頻 - Timer Period:Counter 週期,須注意設定值 + 1 才是正確週期 - Enable Interrupt:啟動中斷 - Register Interrupt Handler:註冊中斷處理函式名稱 ::: 7. Setting Clock Tree Clock 基本使用默認狀態,不會特別修改 --- ## Code 在 main.c 中要設定對應的中斷處理函式 ``` in [main.c] __interrupt void int_timer_isr(void) { GPIO_togglePin(gpio_timerToggle); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1); } __interrupt void int_gpio_in_isr(void) { gu_input_state = GPIO_readPin(gpio_in); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1); } ``` 可以透過以下 function 進行調整 Timer 週期 ``` CPUTimer_setPeriod(CPUTimer0_BASE, 要調整的數值) ``` 以下 function 讀取腳位 ``` GPIO_readPin(pin number); ``` 以下 function 將輸出腳位 Toggle 準位 ``` GPIO_togglePin(pin number); ``` --- ## Result 1. 使用 Timer + GPIO Output 產生 1 Hz 方波訊號 - Timer Prescale = 1000 - Timer Period = 49999  2. 使用 Timer + GPIO Output 產生 100 Hz 方波訊號 - Timer Prescale = 1000 - Timer Period = 499  3. 使用 Timer + GPIO Output 產生 10 kHz 方波訊號 - Timer Prescale = 1000 - Timer Period = 4  4. GPIO Input 接收 Low 訊號,在 Debug Mode 中確認數值為 0   5. GPIO Input 接收 High 訊號,在 Debug Mode 中確認數值為 1  
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up