="LPC1114 デバッガからLEDを制御しよう

  NXPセミコンダクタ社LPCXpresso 基板は,開発環境からデータを入出力して,さまざまな制御を行わせることもできます.

コマンドを入力して,制御しよう

 次にご紹介するのは,開発環境のコンソール・ビューからコマンドを入力して,ハードウェアの制御を行うアプリケーションです.何を制御しましょうか.手始めに,ターゲット基板上に搭載されている LED を制御してみます.

/*
===============================================================
 Name        : main.c
 Author      : noritan
 Version     :
 Copyright   : Copyright (C) 2010 noritan.org
 Description : main definition
===============================================================
*/

#ifdef __USE_CMSIS
#include "LPC11xx.h"
#endif

#include <stdio.h>
#include <string.h>

/*
-------------------------------------------------------
   int interpret() :
     Parse a command line provided as a string.

   const char *line
     A command line to be parsed.

   Return value
     0: a next command is expected.
     1: a command to terminate parsing is detected.
-------------------------------------------------------
*/
int interpret(const char *line) {
    // Escape from the program
    if (strncmp(line, "bye", 3) == 0) {
        fputs("Good bye.\n", stdout);
        return 1;
    }
    // Turn on LED
    if (strncmp(line, "on", 2) == 0) {
        fputs("Turn on.\n", stdout);
        LPC_GPIO0->MASKED_ACCESS[0x080] = 0x080;
        return 0;
    }
    // Turn off LED
    if (strncmp(line, "off", 3) == 0) {
        fputs("Turn off.\n", stdout);
        LPC_GPIO0->MASKED_ACCESS[0x080] = 0x000;
        return 0;
    }
    // Unknown command
    fputs("What ?\n", stdout);
    return 0;
}

/*
-------------------------------------------------------
   int main() :
     Main routine.
-------------------------------------------------------
*/
int main(void) {
    char    line[64];   // Line buffer.
    int     done;       // Flag indicating a process done.

    // Configure PORT PIO0_7 as output
    LPC_GPIO0->DIR  |= 0x080;

    // Show message
    fputs("HELLO WORLD\n", stdout);

    do {
        // Get a line
        fgets(line, sizeof line, stdin);

        // Interpret
        done = interpret(line);
    } while (!done);

    // Infinite loop.
    while (1) {
    }
    return 0;
}
ちょっとだけ,解説

 プログラムは,インタプリタを応用して作られています.メイン・ループで LED が接続されている端子 PIO0_7 の初期設定を行い,インタプリタの内部で,入力されて文字列に従って,出力を変化させています.

 想定している入力は, "on" と "off" です.それぞれ, LED を点灯,消灯させます.

 "bye" で,処理を終了させるようになっているのは,今までと同じです.

実行しよう

 プログラムを書き込んだら,実行させます.

LED 制御の実行

 この画面からは,コンソールと LED が連動する様子が見えないのですが,コマンドに従って, LED が ON/OFF します.

 次回も、コンソール・ビューからハードウェアを操作します.

田中範明(noritan.org)


トラックバック(0)

このブログ記事を参照しているブログ一覧: LPCXpresso で HELLO WORLD (5)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/4130





カテゴリ


Copyright (C) 2006-2015 CQ Publishing Co.,Ltd. All Rights Reserved.