lbed

2013/08/11からのアクセス回数 2234

PinNamesの設定

mbedライクなクラスライブラリlbedのLPC1343版を作ってみることにしました。

ピンの配置は、秋月で購入できる LPC1343評価キット に合わせました。

LPC1343_pin_layout.png

Wait APIの実装

移植ではまったのが、LPC1114と互換性のあると思っていたタイマー機能が、 LPC1343では異なることでした。

また、wait_usで使っているビジーウェイトがオプティマイズによって変な動きを することで、1週間ほど悩みました。 *1

wait_api.cは、以下の様になりました。

#include <LPC13xx.h>
#include "wait_api.h"

volatile uint32_t msTicks;                            /* counts 1ms timeTicks */
/*----------------------------------------------------------------------------
  SysTick_Handler
 *----------------------------------------------------------------------------*/
void SysTick_Handler(void) {
  msTicks++;                        /* increment counter necessary in Delay() */
}

void wait_init() {
       if (SysTick_Config(SystemCoreClock / 1000)) { /* Setup SysTick Timer for 1 msec interrupts  */
         while (1);                                  /* Capture error */
       }
}

void wait_ms(int ms) {
       uint32_t curTicks;

       curTicks = msTicks;
       while ((msTicks - curTicks) < ms);
}

void wait_us(int us) {
     volatile long i = 8*us;    
     while (i-- > 0)
          continue;
}

TestLEDのLED点滅で動作確認

手持ちのLPC1343評価キットで、TestLED.cppを動かしてみました。 *2

LPC1343_board.png

#include <cr_section_macros.h>
#include <NXP/crp.h>

// Variable to store CRP value in. Will be placed automatically
// by the linker when "Enable Code Read Protect" selected.
// See crp.h header for more information
__CRP extern const unsigned int CRP_WORD = CRP_NO_CRP ;

#include "lbed.h"

int main(void) {
    wait_init();
    DigitalOut myled(LED2);
    while(1) {
        myled = ! myled;
        wait_ms(1000);
    }
}

TestLCDで文字を表示

LCDに文字を出力しようとしたら、LPC1343評価キットに付けたUSBコネクターの障害で電圧が低くて 動きませんでした。

代わりに手持ちの LPC1343 QuickStart Board を使ってLCDに出力することにしました。 *3

OrangeボードのCNとの接続は、 LPC1343 QuickStart BoardのDIL30の16-20, 22を使いました。

  • DIL_16:PIO1_5 CN:p24
  • DIL_17:PIO1_6 CN:p26
  • DIL_18:PIO1_7 CN:p27
  • DIL_19:PIO0_1 CN:p28
  • DIL_20:PIO2_0 CN:p29
  • DIL_22:PIO1_8 CN:p30

QuickStartBoard.png

プログラムは、以下の様にピン設定しました。

#include<cr_section_macros.h>
#include<NXP/crp.h>
__CRP extern const unsigned int CRP_WORD = CRP_NO_CRP ;

#include "lbed.h"
#include "TextLCD.h"

int main(void) {
     int     count = 0;
    wait_init();
    DigitalOut myled(LED2);
    TextLCD lcd(P1_5, P1_6, P1_7, P0_1, P2_0, P1_8);     // rs, e, d4-7

    lcd.print("Hello World!");
    while(1) {
         lcd.locate(0, 1);
         lcd.print("Count=");
         lcd.print(count++);
        myled = ! myled;
        wait_ms(1000);
    }
}

最新のソース

LPC1343版のソースは、Githubの以下のURLにあります。

コメント


(Input image string)


*1 最後は、オシロスコープの波形をみて、何とか動くようになりました
*2 どうもデバッガで書き込むときに、一回目はエラーになります。
*3 このボードは小型でブレッドボードで使うのに便利です。秋月で購入できます。

添付ファイル: fileLPC1343_pin_layout.png 434件 [詳細] fileLPC1343_board.png 464件 [詳細] fileQuickStartBoard.png 450件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-09-08 (日) 09:32:11 (1558d)
SmartDoc