S5P4418裸機開發(十四):TIMER
阿新 • • 發佈:2018-12-13
概述
- S5P4418,5個定時器
- Timers 0, 1, 2, and 3有連線GPIO,可以輸出PWM
- 時鐘源PCLK,2nboot預設配置為200MHz
- Timers 0 and 1共享一個預分頻器,Timers 2, 3, and 4共享另外一個
- …
相關暫存器
暫存器 | 功能 |
---|---|
TCFG0 | 死區,預分頻 |
TCFG1 | DMA,分頻 |
TCON | 自動重灌載,手動更新,輸出翻轉,啟動/停止定時器 |
TCNTB | 存放重灌載值 |
TCMPB0 | 比較值 |
TCNTO0 | RO,觀察計數器值,不是TCNT |
TINT_CSTAT | 中斷使能,清除標誌位 |
配置流程
- 關閉復位功能,手冊上貌似也沒給太詳細的說明,不清零定時器起不來
- 配置分頻,
TCFG0, TCFG1
- 手動更新位置1,置1後定時器自動將
TCNTB
和TCMPB
的值送TCNT
和TCMP
,不置1定時器起不來 - 配置VIC
- 中斷使能,
TINT_CSTAT
- 按需求開啟自動重灌載,啟動定時器,同時清0手動更新位,
TINT_CSTAT
- 中斷服務程式退出前要清除中斷標誌位,以及VIC的
VICADDRESS
例子
void timer0_init(){
IP_RESET_REGISTER1 |= (1 << 4); // 關閉復位
TCFG0 |= (250 - 1); // PCLK = 200MHz 200000000 / 16 / 250 = 50000;
TCFG1 | = 0x4;
TCNTB0 = 50000; // 1s
TCON |= (1 << 1);
vic_init(23, (u32)timer0_ISR); // 註冊VIC
TINT_CSTAT |= (1 << 0); // 中斷使能
TCON &= ~(1 << 1);
TCON |= ((1 << 3) | (1 << 0)); // 自動重灌載,啟動定時器
}
void timer0_ISR(){
printf("timer_ISR %x\r\n", 0);
TINT_CSTAT | = (1 << 5); // 清除中斷標誌
VICADDRESS_CH0 = 0x0;
}