楽天市場
[無料でホームページを作成] [通報・削除依頼]

番外 LPC1114FN28/102 アセンブラサンプル

LPC1114FN28/102(ARM Cortex-M0)    も安く出回っているので、Cortex-M0のアセンブラプログラムを試してみました。

開発環境: トラ技ARMライタ+LPCXpresso IDE

LPCXpresso IDEのLPC1114用サンプルを参考にアセンブラのサンプルプログラムを作成しましたのでご紹介します。

LPC1114FN28/102はフラッシュの容量が32kと大きいので、アセンブラでプログラムする人はいないと思われますが...

サンプルプログラムは以下の4つです。

LEDのブリンキングプログラム(LEDはPIO0_2に接続しています。)
USARTのエコープログラム
フラッシュメモリーのダンププログラム
ブートROMのダンププログラム


[LPC810との相違点]
1.I/Oの設定でペリフェラルレジスタの名称と役割が異なります。
  LPC1114にSET0、CLR0、NOT0レジスタは存在しない。
2.USARTの設定でペリフェラルレジスタの名称と役割が異なります。
  LPC1114にスイッチマトリクスは存在しないので、シリアルポートの構成は画一的になります。
  (このため回路図は省きます。)



LEDのブリンキングプログラムは以下のようになります。

     .syntax unified
     .cpu cortex-m0
     .align    2
     .thumb
     .thumb_func

    .section .isr_vector       @Vector table definition

    .long    0x10001000     @ 0000:StackTop
    .long    1+main            @ 0004:Reset_Handler
    .long    1+main            @ 0008:NMI_Handler
    .
    .
    .
    .long    1+main            @ 00B0:PIO INT3_IRQHandler
    .long    1+main            @ 00B4:PIO INT2_IRQHandler
    .long    1+main            @ 00B8:PIO INT1_IRQHandler
    .long    1+main            @ 00BC:PIO INT0_IRQHandler

.text

.equ    LED              ,2                        @ LED = PORT0,2

.equ    GPIO0DIR      ,0x50008000        @ Direction Registers port 0
.equ    GPIO0DATA    ,0x50003FFC        @ GPIO toggle port 0 register

.equ    DELAY           ,0x00200000        @ Toggle time

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@    Blink LED on PORT0,2 use(r0,r1,r2)
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

main:

    movs    r1,#(1<<LED)        @r1 = (1<<LED)

    ldr       r2,=#GPIO0DIR      @r2 = GPIO0DIR
    ldr       r0,[r2,#0]              @GPIO0DIR |= (1<<LED)
    orrs      r0,r0,r1
    str        r0,[r2,#0]

    ldr       r2,=#GPIO0DATA    @r2 = GPIO0DATA
loop:
    ldr       r0,[r2,#0]              @Toggle LED
    eors     r0,r0,r1
    str       r0,[r2,#0]
delay:
    ldr       r0,=#DELAY
dloop:
    subs     r0,r0,#0x01
    bne      dloop

    b          loop


<HEX>
:1000000000100010C1000000C1000000C10000008D
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000C10000000F
:100030000000000000000000C1000000C10000003E
:10004000C1000000C1000000C1000000C1000000AC
:10005000C1000000C1000000C1000000C10000009C
:10006000C1000000C1000000C1000000C10000008C
:10007000C1000000C1000000C1000000C10000007C
:10008000C1000000C1000000C1000000C10000006C
:10009000C1000000C10000000000000000000000DE
:1000A000C1000000C1000000C1000000000000000D
:1000B000C1000000C1000000C1000000C10000003C
:1000C0000421064A106808431060054A1068484039
:1000D000106004480138FDD1F8E7000000800050AE
:0800E000FC3F0050000020006D
:00000001FF


<使ってみて、雑感>
LPC1114FN28/102はシリアルポートが1組で、TX、RXとして使用するPINが固定されるため、
LPC810のように新たにブートローダーを仕込むメリットがありません。

更にフラッシュ消去もLPC810と異なりセクタ(4kbyte)単位となりますので、
このこともブートローダーやEEPROMエミュレーションを行う上での障害となります。

同じLPC1114でもページ書き込み出来るものもあるようですが....

個人的にはRAMの容量がそこそこあるので、10bitA/Dと組み合わせた3chデータロガーなんていいなと思っています。




ソース一式のダウンロード先

Bequest333のページ(別館)

http://hp.vector.co.jp/authors/VA058115/

https://drive.google.com/file/d/1D8lAre5RwjpSgGA4PAAkLt-_EPqLIKOV/view?usp=drivesdk

ダウンロードしたZIPファイルは圧縮プロジェクトとしてLPCXpressoからインポートすることが可能です。

































.