NXP LPC1114 のUART機能検証を続けています。まず、これまでに現れた不具合は、
・LPC1114のUSRT設定
LPC1114側のボーレート115200で PC側ターミナルソフトで文字化けが起こる。
LPC1114側のボーレート9600で、PC側(115200)で正常な通信を確認。
・Systick設定
Systick割り込みインターバルが想定の1/2
ということで、システムクロックの設定について何か問題でもあるのかとも思いました。
もともとNXP他が提供するサンプルソースはSystem Osillator(外付けクリスタル)をクロックソースにしていて、これをIRC Oscillator にして機能検証を行っていました。
そこで、クロックソースをSystem Oscillatorに戻して、これまでの検証を繰り返しました。(手持ちの水晶発振子が8MHzだったのでそれを使用)
LPC1114各レジスタ設定値
<LPC1114 UART設定:ボーレート9600 Systick設定:480000>
システムPLL制御レジスタ(SYSPLLCTRL) 0x25 MSEL:5 (M=6) PSEL:4(P=4)
システムPLLステータスレジスタ(SYSPLLSTAT) 0x01 PLL はロック状態
システムオシレータ制御レジスタ(SYSOSCCTRL) 0x00 オシレータはバイパスされません。/周波数範囲1 ~ 20 MHz
システムPLLクロックソース選択レジスタ(SYSPLLCLKSEL) 0x01 システムオシレータを選択
メインクロックソース選択レジスタ(MAINCLKSEL) 0x03 システムPLL クロック出力を選択
システムAHBクロック分周器レジスタ(SYSAHBCLKDIV) 0x01 1 で分周
システムAHBクロック制御レジスタ(SYSAHBCLKCTRL) 0x1105F
これらの設定でメインクロック48MHz稼働を確認しました。
UARTクロック分周器(UARTCLKDIV) 0x01
UARTライン制御レジスタ(U0LCR) 0x03 8 ビットの文字長/1 ストップビット/パリティなし/DLAB=0
UART分数分周器レジスタ(U0FDR) 0x10 DIVADDVAL=0/MULVAL=1
UARTボーレート分周器レジスタ(U0DLL) 0x00
UARTボーレート分周器レジスタ(U0DLM) 0x05 DL=0x0500
これらのUART設定では、ボーレートは2343となりそう。
BaudRate = 48M/(16*0x0500) = 2343
システムtick カウンタ校正レジスタ(SYSTCKCAL) 0x04 システムtick タイマ校正値0x04
システムタイマリロード値レジスタ(SYST_RVR) 0x752FF RELOAD
システムタイマ校正値レジスタ(SYST_CALIB) 0x04 TENMS=0x04 default値
これらのSystick設定では、Systick割り込み間隔は 20mSになりそう。
Systick割り込み間隔 = 0x752FF/(48M*1/2 ) = 0.02 Sec.
計測内容
・UARTのTX信号を測定すると、ビット巾は約0.1mSであった。
、 実際のUARTのボーレートは、9600であった事が確かめられた。
PC側のボーレート設定9600のターミナルソフトでUART通信を確認。
(PC側ボーレート115200でもUART通信が成立してしまうことを確認、前回、LPC1114側でボーレートを9600に設定すると115200のボーレートになると考えたことは、誤り。)
・Systick割り込みでGPIOのHigh/Lowを出力すると、High、Lowそれぞれの巾は10mSであった。
その他、
UARTでボーレートを115200にした場合やはり、PC側で文字化けを起こした。(前回と同じ)
ボーレートは115200付近であろうと思われ、 UART分数分周器レジスタ(U0FDR)でボーレートの微調整を試しましたが、不調に終わりました。
LPC111xのデータシートでは システムオシレータの範囲は1~25MHzでした、しかしユーザーマニュアルでは一部10MHz~25MHzの表記があります。ドキュメント内、ドキュメント間で整合性がとれていないのではと思います。
まとめ、
サンプルコードを利用したUART設定でボーレートは正しく設定された。ただし、ユーザーマニュアルのレジストリ設定と実際のレジストリ設定で食い違いがあるように思える。
また、Systick設定では、ユーザーマニュアルの「システムtick タイマクロックはシステムクロック1/2」という事は実際と異なると思われる。
現時点でのLPC1114のアプリケーション開発はユーザーマニュアルより、NXP等から提供されるサンプルコードを優先して参考にしたほうがよさそうです。
2013年2月6日水曜日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿