ハードウェア情報
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(); }