TIMER 呼叫 C4M-OS 暫存器寫入巨集逐一設定法
利用呼叫暫存器或旗標寫入巨集或函式,可以簡化前述直接讀寫的程序。只要參考 設定旗標群蓋寫參數快查表 及 設定暫存器蓋寫參數快查表 依序執行設定旗標群及設定暫存器之寫入即可。
範例:接續前述的範例設定TIMER1硬體,查TIMER設定旗標群參數快查表有五群旗標要寫入,查TIMER設定暫存器參數快查表,有一個暫存器要寫入。
旗標群設定
1. TIME1波形模式選擇1:依據參數快查表,HWREG_p=&TCCR1A, Mask=0x03, Shift=0,依據數值一欄表WGMn0_1欄,得Data=0,
2. TIME1波形模式選擇2:依據參數快查表,HWREG_p=&TCCR1B, Mask=0x18, Shift=3,依據數值一欄表.WGMn2_3欄,得Data=1,
3. TIME1除頻值設定:依據參數快查表,HWREG_p=&TCCR1B, Mask=0x07, Shift=0,依據數值一欄表.CSn0_2欄,(1~5)其中選一個來決定除頻值。假設基頻選擇為 TIM123_CLK_DIV_BY64。得Data=3
4. TIME1WaveOut方波輸出禁致能: 依據參數快查表,HWREG_p=&TCCR1A, Mask=0xC0, Shift=6,依據數值一欄表.COMnA0_1欄, 要設輸出方波,得Data=1。
5. 設定TIM1接腳輸出: 依據參數快查表,HWREG_p=&DDRB, Mask=0x20, Shift=5,依據數值一欄表.DDX欄,設要輸出方波得Data=1。
暫存器設定
• TIMER1週期設定:依據參數快查表,HWREG_p=&OCR1AL, Bytes=2,從公式得Data=F_CLKIO/(2*64*F_timer)-1,
所以程式碼為
REGFPT(&TCCR1A,0x03,0,0); /*select Square wave */
REGFPT(&TCCR1B,0x18,3,1); /*select Square wave */
REGFPT(&TCCR1B,0x07,0,3); /*Set CLK_DIV_BY64*/
REGFPT(&TCCR1A,0xC0,6,1); /*Enable Wave Ouput*/
REGFPT(&DDRB,0x20,5,1); /*Set Ouput Pin Direction*/
unit16_t Data=F_CLKIO/(2*64*F_timer)-1,
REGPUT(&OCR1AL,2,(uint8_t*) &Data); /* Set the OCR */
sei();/*Enable All Int */