參考TIMER設定旗標群參數快查表,依據想用的硬體計時器查詢對應的硬體區塊,以傳統等號寫入TIMER硬體暫存器的方式逐一完成讓區塊所有旗標群的蓋寫,即可以完成硬體設定的旗標群部份工作。
例如說Timer1,可以找到TIM1 硬體設定區塊,在區塊中,有TIME1波形模式選擇,TIM1FreqDivide除頻值設定,TIME1WaveOut方波輸出禁致能,設定TIM1接腳輸出。總共4個ACTION需要執行旗標寫入。
以TIM1波形模式選擇為例,當我們使用TIMER做為固定週期的提供者時,需要選擇設定為方波輸出,此時會有兩組旗標要設定,這兩組旗標分別佔用
TCCR1A 暫存器的b0,b1,以及TCCR1B 暫存器的b2,b3。
要設定這兩群旗標,可先取出暫存器內容將內容平移後與遮罩處理後的輸入值做OR運算然後存回原暫存器即可。
TCCR1A=TCCR1A | ((FlagData1A << Shift1A) & Mask1A);
TCCR1B=TCCR1B | ((FlagData1B << Shift1B) & Mask1B);
其中依據表格TIM1波形模式選擇 行右邊固定參數值 Shift1A=0, Mask1A=0x03, Shift1B=3, Mask1B=0x18。查詢 TIMER設定旗標群可選用數值一欄表 設定值同名行OptionName/Option欄有上下兩個分行,分別為
.WGMn0_1, .WGMn2_3,其值分別為SQUARE_WAVE_A =0(方波),= SQUARE_WAVE_B =1 (方波)。也就是說FlagData1A=0, FlagData1B=1。
其它三個設定動作 TIM1FreqDivide除頻值設定,TIM1WaveOut方波輸出禁致能,設定TIM1接腳輸出,亦可以用類似的方式達成。
參考TIMER暫存器寫入參數快查表,TIMER1的設定暫存器只有一個2位元組暫存器 OCR1AL要設定。M128 MCU多位元組暫存器的寫入,必需要先高後。
uint16_t OCR1Data; /* two byte value*/
uint8_t* Data_p=(uint8_t*) OCR1Data;/* 8 bits Data pointer initialed as address of OCR1ALVAL*/
/* calculate OCR1ALVAL 參考提示(AVR計數器頻率選用)*/
:
OCR1AL= *(Data_p+1); /*Write High Byte of OCR1Data*/ OCR1AL=*(Data_p);/*Write Low Byte of OCR1Data*/參考 TIMER 旗標蓋寫參數快查表,依據想用的硬體計時器查詢對應的區塊。 例如說 Timer1,可以找到 TIM1 硬體設定區塊,在區塊中,有 TIME1 波形模式 選擇,TIME1FreqDivide 除頻值設定,TIME1WaveOut 方波輸出禁致能,設定TIM1 接腳輸出。總共 4 個 ACTION 需要執行旗標寫入。 其中以 TIME1 波形模式選擇為例,當我們使用 TIMER 做為固定週期的提供者時,需要選擇設定為方波輸出,此是會有兩組旗標要設定,這兩組旗標分別佔用TCCR1A 暫存器的 b0,b1,TCCR1B 暫存器的 b2,b3。要依需求設定這兩群旗標,可以取用暫存器,與經過平移及遮罩處理後的輸入值 OR 過後存回原暫存器即可。
TCCR1A=TCCR1A | ((FlagData1A << Shift1A) & Mask1A);
TCCR1B=TCCR1B | ((FlagData1B << Shift1B) & Mask1B); 其中依據表格提供 Shift1A=0, Mask1A=0x03, Shift1B=3, Mask1B=0x18,
FlagData1A, FlagData1B 值查詢 TIMER 設定用可寫入旗標群可選用數值一 欄表,對應的值分為為 .WGMn0_1=SQUARE_WAVE_A =0 (方波)
.WGMn2_3=SQUARE_WAVE_B =1 (方波)。也就是說 FlagData1A=0,
FlagData1B=1。其它 TIME1FreqDivide 除頻值設定,TIME1WaveOut 方波輸 出禁致能,設定 TIM1 接腳輸出,亦可以用類似的方式達成。
TIMER1 的設定暫存器如 TIMER 暫存器寫入參數快查表所示只有一個 2 位元組 暫存器 OCR1AL 要設定。寫時先寫高位元組,再寫低位元組
uint16_t OCR1Data; /* two byte value */
uint8_t* Data_p=(uint8_t*) OCR1Data; /* 8 bits Data pointer
initialed as address of OCR1ALVAL*/
/* calculate OCR1ALVAL 參考提示(AVR 計數器頻率選用)*/
:
OCR1AL= *(Data_p+1); /*Write High Byte of OCR1Data*/
OCR1AL= *(Data_p); /*Write Low Byte of OCR1Data*/