2013年2月6日水曜日

LPC1114 System Oscillator を試しました。

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等から提供されるサンプルコードを優先して参考にしたほうがよさそうです。




                  

0 件のコメント:

コメントを投稿