目次
前
次
システム操作
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
このファイルの内容から、以下の事実がわかります。
- リセット後、PCLK(Peripheral CLocK)は、12MHzに設定
- シリアルポートのデータ通信速度は、115200bps
- バッファにFIFOを利用
ARMでは、32ビットレジスタが17本あり、下位レジスタは
r0から7で、アセンブリ言語では汎用レジスタとして使う
ことが多くなっています。
レジスタr8からr12は、上位レジスタでシステム処理と
用途を振分けられます。
r13はスタックポインタ、r14はリンクレジスタ、r15が
プログラムカウンタ、さらにxPSRというレジスタがあり
ますが、Forthで余程特殊なプログラムを作成しない限り
使うことがないでしょう。
システムクロックを決めたなら、クロックを与える
内蔵周辺モジュールを指定します。
内蔵周辺モジュールは、SFR(Special Function Register)の
レジスタで一度に複数を指定可能。
レジスタ構成は、以下。
レジスタの初期値を見ると、以下の周辺モジュールを利用
する場合には、Enableにしなければならないとわかります。
- I2C
- CT16B0
- CT16B1
- CT32B0
- CT32B1
- UART
- ADC
- WDT
- IOCON
- CAN
- SSP1
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インタプリタが動いていると、システム状態を
特別なコードをコンパイル、リンクして作成しないで
知ることができるとわかります。
目次
前
次