禺画像]
それにしても Watchdog Oscillator を使うとシリアルがおかしくなるのは使い勝手が悪い。
何とかならないものかと思いドキュメントを調べてみることにする。
ドキュメントの中でまず目に付いたのが LPC800 USART API ROM driver routines 。
節約のためかROMが使えるようだ。
次に、LPC800 USART0/1/2 に目を通す。
特に Baud Rate and Clocking Generation のソースに Watchdog Oscillator を使ってはいけないという記述も無い。
さらに LPC800 Windowed Watchdog Timer (WWDT) と読み進む。
ここにも特に変わった記述は無い。
最後は Watchdog oscillator control register の FREQSEL 。
wdt_osc_clk は 9.3 kHz to 2.3 MHz と書いてある。
収穫らしいものは何もなかった。
またエディタに戻って system_LPC8xx.c を眺めていると wdt_osc_clk の計算が合わない。
どういうことかというと、ドキュメントには 9.3 kHz to 2.3 MHz と書いてあるのに、 system_LPC8xx.c の数字で計算すると 7.8 kHz から 1.7MHz になるのだ。
ドキュメント(UM10601.pdf Rev. 1.2) と system_LPC8xx.c を比べてみると明らかに数字が異なる。おそらく以前の system_LPCxxxx.c を流用したためこのようなことになってしまったのだろう。
ドキュメントに従って system_LPC8xx.c を修正。(修正する部分は3ブロックある)
やっとシリアルも動いた。
分かってみると単純なことだった。
少し満足して、そして脱力感いっぱいの今日この頃。
system_LPC8xx.c
セコメントをする