2011年4月10日 星期日

SYSTEM Tick , WDT OSC , Clock Out (2/2)Clock out,WDT OSC

上一篇文章請參考:

SYSTEM Tick , WDT OSC , Clock Out (1/2)SYSTEM Tick


Clock out

Clock Out 是一個可以提供MCU外的元件當作參考clock或是提供量測內部幾個clock的依據.
在LPC111x中 Pin同 ISP Pin,
所以可以設定後可以對其 PIO0_1 直接量測結果.


可參考上圖DIY線路中 PIO0_1/ISP

因為與PIO0_1共用所以要先初始化設定為 Clock out 功能



void clock_out_int(void)
{
/* Output the Clk onto the CLKOUT Pin PIO0_1 to monitor the freq on a scope */
LPC_IOCON->PIO0_1 = (1<<0);
}








uint8_t clock_out_change(uint8_t clock_sel , uint8_t divide)
{
uint8_t return_status=FALSE;

if((clock_sel>3)||(divide>255)) // OUT OF RANGE
{
return_status = FALSE;
}
else
{
/* Select the MAIN clock as the clock out selection since it's driving the core */
LPC_SYSCON->CLKOUTCLKSEL = clock_sel; // 3; // 0:IRC 1:System Osc 2: watchdog 3: Main colck
/* Set CLKOUTDIV to 6 */
LPC_SYSCON-> CLKOUTDIV CLKOUTDIVCLKOUTDIV = divide; // CLKOUT Divider = 1 ,0:disable 1~255 divide
/* Enable CLKOUT */
LPC_SYSCON->CLKOUTUEN = 0;
LPC_SYSCON->CLKOUTUEN = 1;
while (!(LPC_SYSCON->CLKOUTUEN & 0x01));

return_status = TRUE;
}

return return_status;
}

clock out 相關設定相對簡單許多,
選擇clock source ,CLOCKOUTSEL 可選擇IRC,System osc.,WDT osc.,以及main clock.
接著決定是否使用CLKOUTDIV  除頻,
再將CLKOUT update Enable即可.

WDT OSC

因為範例程式中, clock out 循序設定中有設定clock source select 為WDT OSC.
而範例中並未對此設定,所以這邊特別再提一下怎麼啟動WDT OSC.

簡化之只要兩行code


LPC_SYSCON->WDTOSCCTRL = (0x1<<5)|0x00;
LPC_SYSCON->PDRUNCFG &= ~(0x1<<6); /* Let WDT clock run */



WDTOSCSTRL Bit8:5  FREQSEL 選擇 WDTOSC輸出頻率 Fclkana



WDTOSCSTRL Bit4:0  DIVSEL 除頻值
輸出WDTOSC FREQ=  Fclkana/(2x(1+DIVSEL))

例如參考FREQSEL 為 0x01 ,其Fclkana頻率為 0.5MHz
DIVSEL = 0
WDTOSC = 0.5MHz/(2x(1+0)) = 0.25MHz = 250 KHz

不過要注意 data sheet中寫到  Fclkana value within ±40% 所以誤差較大.

如範例中程式實際量測到 clock out 為 WDT OSC時, 286KHz.
計算結果誤差值 +14.4% 還落在 ±40%內屬於合理範圍.

 system tick timer,wdt osc. , clock out ,參考範例請至此下載  Download


0 留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...