目次

システム操作

 LPC1114は、ARMコアでCortex-M0を採用し、NXP社が
 周辺モジュールを追加しています。

 LPC1114を使いこなすには、周辺モジュールの構成を
 理解しなければなりません。

 SFR(Special Function Register)の内容を、詳細に見て
 実現したい対象のコードを書くのが基本。

 ここでは、LPC1114のForthのシステムコンフィグレーション
 を見ていきます。


システムクロック  電源投入後、端末接続したときのシステムクロックが  12MHzであることは、アセンブリ言語コードを含んだ  ファイル terminal.s の内容でわかります。 @ PCLK is 12 MHz on Reset. @ Baud rate = PCLK / [ 16 * (256 * U0DLM + U0DLL) * (1 + DivAddVal/MulVal) ] @ The value of MULVAL and DIVADDVAL should comply to the following conditions: @ 1 <= MULVAL <= 15 @ 0 <= DIVADDVAL <= 14 @ DIVADDVAL < MULVAL @ Example 2: UART_PCLK = 12 MHz, BR = 115200 @ According to the provided algorithm DLest = PCLK/(16 x BR) = 12 MHz / (16 x 115200) = @ 6.51. This DLest is not an integer number and the next step is to estimate the FR @ parameter. Using an initial estimate of FRest = 1.5 a new DLest = 4 is calculated and FRest @ is recalculated as FRest = 1.628. Since FRest = 1.628 is within the specified range of 1.1 @ and 1.9, DIVADDVAL and MULVAL values can be obtained from the attached look-up @ table. @ The closest value for FRest = 1.628 in the look-up Table 201 is FR = 1.625. It is @ equivalent to DIVADDVAL = 5 and MULVAL = 8. @ Based on these findings, the suggested UART setup would be: DLM = 0, DLL = 4, @ DIVADDVAL = 5, and MULVAL = 8. According to Equation 3, the UART’s baud rate is @ 115384. This rate has a relative error of 0.16% from the originally specified 115200. @ Baud rate config for 115200 Baud ldr r0, =U0FDR @ Set DivAddVal = 5; MulVal = 8 movs r1, #(8<<4)+5 str r1, [r0] ldr r0, =U0DLL movs r1, #4 str r1, [r0] ldr r0, =U0DLM movs r1, #0 str r1, [r0] @ Baud rate config finished. Enable UART and FIFOs ldr r0, =U0LCR @ Disable divisor latch access and set 8N1 mode movs r1, #3 str r1, [r0] ldr r0, =U0FCR @ Enable and clear FIFOs with trigger level set to one character movs r1, #7 str r1, [r0] bx lr  このファイルの内容から、以下の事実がわかります。  ARMでは、32ビットレジスタが17本あり、下位レジスタは  r0から7で、アセンブリ言語では汎用レジスタとして使う  ことが多くなっています。  レジスタr8からr12は、上位レジスタでシステム処理と  用途を振分けられます。  r13はスタックポインタ、r14はリンクレジスタ、r15が  プログラムカウンタ、さらにxPSRというレジスタがあり  ますが、Forthで余程特殊なプログラムを作成しない限り  使うことがないでしょう。  システムクロックを決めたなら、クロックを与える  内蔵周辺モジュールを指定します。  内蔵周辺モジュールは、SFR(Special Function Register)の  レジスタで一度に複数を指定可能。  レジスタ構成は、以下。  レジスタの初期値を見ると、以下の周辺モジュールを利用  する場合には、Enableにしなければならないとわかります。  Forthで利用する場合、端末操作が必要になるので  UARTはシステム起動時にEnableとなっているのは  理解できるでしょう。  Forthインタプリタが動作しているときの  クロック供給を調べると、以下。  16進数「1185F」は、2進数で「0001_0001_1000_0101_1111」。  Forthインタプリタが動き出すと、UARTとIOCONはクロック供給  され、パラメータ設定で使えると理解できます。
電力供給  内蔵周辺モジュールには、クロックの他に電力カット  の指定ができるようになっています。  システム全体で、低消費電力にすることを狙っているのでしょう。  関係するレジスタの内容は、以下。  Forthインタプリタが動き出した時点での、このレジスタの  内容を確認すると、以下。  16進数「EDF0」は、2進数で「1110_1101_1111_0000」。  次の周辺モジュールは、電力カットされているとわかります。  A/D変換器、システムオシレータ、ウォッチドッグタイマー  そしてシステムPLLの電力カットで、PLLを使っていないため  12MHzで動作させていると判断可能。  システムオシレータとPLLに関係するモジュールを動かす  必要がある場合、クロックと電力の双方供給をしなければ  ならないということ。  Forthインタプリタが動いていると、システム状態を  特別なコードをコンパイル、リンクして作成しないで  知ることができるとわかります。

目次

inserted by FC2 system