# 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 ![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 :::info - GPIO Direction:設定輸入輸出 - Pin Type:設定輸入 Push-pull / Open drain,設定輸入 Pull-up / Floating - PinMux --> GPIO:腳位選用 ::: ![input1](https://hackmd.io/_uploads/S1nuAmcSke.png) - 設定中斷處理 ![input2](https://hackmd.io/_uploads/Bka9Cm9Hkg.png) 6. Setting CPUTimer Timer 的時鐘使用如下,在 datasheet 中可以看出使用的是 SYSCLK ![timer2](https://hackmd.io/_uploads/Sk6ZlNcSyg.png) :::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 ![output result1](https://hackmd.io/_uploads/H1kLWV9S1x.jpg) 2. 使用 Timer + GPIO Output 產生 100 Hz 方波訊號 - Timer Prescale = 1000 - Timer Period = 499 ![output result2](https://hackmd.io/_uploads/H1wv-45SJe.jpg) 3. 使用 Timer + GPIO Output 產生 10 kHz 方波訊號 - Timer Prescale = 1000 - Timer Period = 4 ![output result3](https://hackmd.io/_uploads/Hy9FWN9Skg.jpg) 4. GPIO Input 接收 Low 訊號,在 Debug Mode 中確認數值為 0 ![input1_result2.jpg](https://hackmd.io/_uploads/SysoZV9Skl.png) ![input1_result1](https://hackmd.io/_uploads/B1joW4cByl.jpg) 5. GPIO Input 接收 High 訊號,在 Debug Mode 中確認數值為 1 ![input2_result2.jpg](https://hackmd.io/_uploads/B1vfzV9HJe.png) ![input2_result1](https://hackmd.io/_uploads/BkvzGNqHJg.jpg)