ハードウェア情報
MEMEsのハードウェア情報についてのまとめである。
・LED出力
| I/Oポートの状態 | LEDの状態 |
| 0 | 点灯 |
| 1 | 消灯 |
手順
- PFC.PEIORLレジスタを操作し、汎用入出力端子(PE9, PE11)を、出力モードに設定する
- PE.DRレジスタの対応するビットを0にすると点灯、1にすると消灯する
#include "iodefine.h"
#define LED5 (PE.DR.BIT.B9)
#define LED6 (PE.DR.BIT.B11)
#define LED_ON (0)
#define LED_OFF (1)
void main(void) {
PFC.PEIORL.BIT.B9 = 1;
PFC.PEIORL.BIT.B11 = 1;
LED5 = LED_ON; // 点灯
LED6 = LED_OFF; // 消灯
LED5 ^= 1; // 反転
}
・スイッチ入力
| I/Oポートの状態 | スイッチの状態 |
| 0 | OFF(離している) |
| 1 | ON(押している) |
手順
- PFC.PDIORHレジスタを操作し、汎用入出力端子(PD16, PD17, PD18)を、入力モードに設定する(電源投入後の初期状態は入力である)
- PD.DRレジスタを読み込み、対応するビットが0であれば押されていない、1であれば押されている
#include "iodefine.h"
#define SW4 (PD.DR.BIT.B16)
#define SW5 (PD.DR.BIT.B17)
#define SW6 (PD.DR.BIT.B18)
void main(void) {
PFC.PDIORH.BIT.B16 = 0;
PFC.PDIORH.BIT.B17 = 0;
PFC.PDIORH.BIT.B18 = 0;
if (SW6 == 1) {
// スイッチONの時
:
} else {
// スイッチOFFの時
:
}
}
・スピーカ出力
手順
- PFC.PEIORLレジスタを操作し、汎用入出力PE0端子を出力モードに設定する
- PE.DRレジスタを操作し、PE0端子の状態を周期的にH→L→H…と変化させる
#include "iodefine.h"
#define SPK (PE.DR.BIT.B0)
main()
{
:
while (1) {
if (CMT0.CMCSR.BIT.CMF) {
CMT0.CMCSR.BIT.CMF = 0;
SPK ^= 1; // SPK端子を反転
}
}
}
・7セグメントLED
手順
- PFC.PAIORHレジスタを操作し、表示する数字設定端子(PA19~PA16)を出力モードに設定する。
- PFC.PEIORLレジスタを操作し、表示する桁設定端子(PE1~PE3)を出力モードに設定する。
- PA.DRレジスタを操作し、PA19~PA16に表示する数値を出力する。
- PE.DRレジスタを操作し、表示する桁を選択する。
例:PA19~PA16に5(二進数では0101)を出力し、PE1=1, PE2=PE3=0とすると、最上位桁(U16)に”5″が表示される。
【ダイナミック点灯の例】
#include "iodefine.h"
#define DIG1 (PE.DR.BIT.B3)
#define DIG2 (PE.DR.BIT.B2)
#define DIG3 (PE.DR.BIT.B1)
main()
{
PFC.PAIORH.BYTE.L |= 0x0f; // PA19-PA16出力モード
PFC.PEIORL.BYTE.L |= 0x0e; // PE3-PE1出力モード
while (1) {
DIG1 = DIG2 = DIG3 = 0;
PA.DR.BYTE.HL &= 0xf0;
PA.DR.BYTE.HL |= 3;
DIG1 = 1;
wait_ms();
DIG1 = DIG2 = DIG3 = 0;
PA.DR.BYTE.HL &= 0xf0;
PA.DR.BYTE.HL |= 2;
DIG2 = 1;
wait_ms();
DIG1 = DIG2 = DIG3 = 0;
PA.DR.BYTE.HL &= 0xf0;
PA.DR.BYTE.HL |= 1;
DIG3 = 1;
wait_ms();
}



