こんにちは、ナナです。
本カリキュラムはITRONを使ったシステム構築が主になります。ハードウェア制御が主ではありませんので、デバイスドライバは事前に準備したものを利用しましょう。
デバイスドライバのファイルをプロジェクトに組み込みます。
モジュール構成図とデバイスドライバ一覧
最初のシステム構成はマイコン入門編にて構築したモジュール構成を基本とします。本カリキュラムで徐々に拡張していきますが、最初はこの構成からスタートします。
※TIMERモジュールに関しては不要なため削除してあります。
デバイスドライバのプロジェクト登録
デバイスドライバとして準備するモジュールとプロジェクトへの組み込み手順を示します。
マイコン入門編から本カリキュラムを受講している方
マイコン入門編から本カリキュラムを受講している方は、各自で作成したデバイスドライバのファイルをプロジェクトにコピーしましょう。
対象となるファイルは次のものです。
C:\WorkSpace\BeautoRoverRTOS\BeautoRoverの下にコピーしておきます。
- led.c/led.h
- sw.c/sw.h
- lsen.c/lsen.h
- sci.c/sci.h
- spk.c/spk.h
- motor.c/motor.h
※timer.c/timer.hに関してはITRONが提供する仕組みを利用するため不要です。
マイコン入門編を受講せずに直接本カリキュラムを受講している方
こちらの方は私の用意したデバイスドライバ用のファイルをプロジェクトに登録していただきましょう。ファイルをダウンロードし圧縮ファイルを解凍して次のフォルダにコピーしてください。
コピー先: C:\WorkSpace\BeautoRoverRTOS\BeautoRover
プロジェクトへの登録方法
プロジェクトフォルダにコピーしたファイルをHEWのプロジェクトに登録します。ファイルをドラッグして登録しましょう。
MAINモジュールの変更
デバイスドライバを利用するための最低限の処理をMAINモジュールに行っておきます。main.cを次のものに全て差し替えてください。
main.c
#include <stdio.h>
#include "kernel.h"
#include "iodefine.h"
#include "led.h"
#include "sw.h"
#include "lsen.h"
#include "sci.h"
#include "spk.h"
#include "motor.h"
//------------------------------------------------
// 内部プロトタイプ宣言
//------------------------------------------------
//------------------------------------------------
// システムエントリーポイント
//------------------------------------------------
int main(void)
{
// HOS起動
sta_hos();
return 0;
}
//------------------------------------------------
// 概 要: MAINタスク
//------------------------------------------------
void MAIN(VP_INT exinf)
{
while(1)
{
Led_setLight(D_LED_KIND_ORANGE, D_LED_LIGHT_ON);
Led_setLight(D_LED_KIND_GREEN, D_LED_LIGHT_OFF);
dly_tsk(1000);
Led_setLight(D_LED_KIND_ORANGE, D_LED_LIGHT_OFF);
Led_setLight(D_LED_KIND_GREEN, D_LED_LIGHT_ON);
dly_tsk(1000);
}
return;
}
//------------------------------------------------
// 概 要:システム初期化
//------------------------------------------------
void Main_init(VP_INT exinf)
{
//---------------------------------------------------
// ウォッチドッグタイマの停止(消さないこと)
//---------------------------------------------------
WDT.TCSRWD.BYTE = 0x92;
WDT.TCSRWD.BYTE = 0x92;
//---------------------------------------------------
// PCRの設定(PCRは書き込み専用レジスタ)
//---------------------------------------------------
IO.PCR3 = 0x0F; // P30,P31,P32,P33を出力(モーター回転方向制御)
IO.PCR6 = 0x11; // P60,P64を出力
IO.PCR7 = 0x00; // P74を入力
//---------------------------------------------------
// モジュールの初期化(各モジュールの初期化を実施)
//---------------------------------------------------
Led_init();
Sw_init();
Lsen_init();
Sci_init();
Spk_init();
Motor_init();
}
//------------------------------------------------
この状態でビルドしてビュートローバーを動作させると、オレンジとグリーンのLEDが変更前と同様に1秒間隔で点滅する動きになります。
デバイスドライバを組み込んだため、スイッチ状態を取得したり、スピーカーから音を出したり、モーターを回すなどインターフェース関数を呼べばハードウェアを制御できます。
マイコン入門編を実施していない人は、デバイスドライバのインターフェース関数を呼んで動きを確認してみるとよい!使い方を把握しておこう!
デバイスドライバのインターフェース仕様
各デバイスドライバのインターフェース仕様を改めて紹介しておきます。
LEDモジュール:LED制御モジュール
1.提供ヘッダファイル名
#include “led.h”
2.定数定義
3.インターフェース定義
3.1 初期化
3.2 点灯・消灯の設定
SWモジュール:スイッチ制御モジュール
1.提供ヘッダファイル名
#include “sw.h”
2.定数定義
3.インターフェース定義
3.1 初期化
3.2 押下状態の取得
LSENモジュール:光センサ制御モジュール
1.提供ヘッダファイル名
#include “lsen.h”
2.定数定義
なし
3.インターフェース定義
3.1 初期化
3.2 光センサ値の取得
SCIモジュール:シリアル通信制御モジュール
1.提供ヘッダファイル名
#include “sci.h”
2.定数定義
なし
3.インターフェース定義
3.1 初期化
3.2 文字の送信
3.3 文字列の送信
SPKモジュール:スピーカー制御モジュール
1.提供ヘッダファイル名
#include “spk.h”
2.定数定義
3.インターフェース定義
3.1 初期化
3.2 音の出力開始
3.3 音の出力停止
MOTORモジュール:モーター制御モジュール
1.提供ヘッダファイル名
#include “motor.h”
2.定数定義
3.インターフェース定義
3.1 初期化
3.2 走行開始
3.3 走行停止
3.4 ON-OFF制御走行開始
3.5 P制御走行開始