出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数. このライブラリを登録した際のプログラム: Demo_SetOutputPortType. Global functions for setting the output port bit open-drain or push-pull.

Dependents:   Demo_SetOutputPortType Mbed2_ConnectTestAll

Committer:
MikamiUitOpen
Date:
Sat Aug 22 03:02:49 2015 +0000
Revision:
0:7b86a8a8aabd
Child:
1:670919fefe1c
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:7b86a8a8aabd 1 //---------------------------------------------------------------------------------------
MikamiUitOpen 0:7b86a8a8aabd 2 // 出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数
MikamiUitOpen 0:7b86a8a8aabd 3 // (Global functions for setting the output port bit open-drain or push-pull)
MikamiUitOpen 0:7b86a8a8aabd 4 // SetOpenDrain() オープンドレインに設定 (Set open-drain)
MikamiUitOpen 0:7b86a8a8aabd 5 // SetPushPull() プッシュプルに設定 (Set push-pull)
MikamiUitOpen 0:7b86a8a8aabd 6 // Nucleo-F4xx 用(For Nucleo-F4xx)
MikamiUitOpen 0:7b86a8a8aabd 7 //
MikamiUitOpen 0:7b86a8a8aabd 8 // "PA_0", "PB_0", "PC_0" などの定義は下記のヘッダ・ファイルを参照のこと
MikamiUitOpen 0:7b86a8a8aabd 9 // "....TARGET_NUCLEO_F401RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/PinNames.h"
MikamiUitOpen 0:7b86a8a8aabd 10 //
MikamiUitOpen 0:7b86a8a8aabd 11 // PinName型変数の上位4ビット:ポート番号(0 = A, 1 = B, 2 = C)
MikamiUitOpen 0:7b86a8a8aabd 12 // PinName型変数の下位4ビット:ピン番号(0 ~ 15)
MikamiUitOpen 0:7b86a8a8aabd 13 //
MikamiUitOpen 0:7b86a8a8aabd 14 // 2015/08/22, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 0:7b86a8a8aabd 15 //---------------------------------------------------------------------------------------
MikamiUitOpen 0:7b86a8a8aabd 16
MikamiUitOpen 0:7b86a8a8aabd 17 #include "mbed.h"
MikamiUitOpen 0:7b86a8a8aabd 18
MikamiUitOpen 0:7b86a8a8aabd 19 namespace Mikami
MikamiUitOpen 0:7b86a8a8aabd 20 {
MikamiUitOpen 0:7b86a8a8aabd 21 // 一つの出力ポートをオープンドレインに設定する
MikamiUitOpen 0:7b86a8a8aabd 22 void SetOpenDrain(PinName pin)
MikamiUitOpen 0:7b86a8a8aabd 23 {
MikamiUitOpen 0:7b86a8a8aabd 24 // ポート A, B, C 以外は設定できないようにしている
MikamiUitOpen 0:7b86a8a8aabd 25 MBED_ASSERT(pin <= PC_15);
MikamiUitOpen 0:7b86a8a8aabd 26
MikamiUitOpen 0:7b86a8a8aabd 27 uint16_t bit = 1 << (pin & 0xF); // bit position
MikamiUitOpen 0:7b86a8a8aabd 28 switch (pin & 0xF0)
MikamiUitOpen 0:7b86a8a8aabd 29 {
MikamiUitOpen 0:7b86a8a8aabd 30 case PA_0 : GPIOA->OTYPER |= bit; break;
MikamiUitOpen 0:7b86a8a8aabd 31 case PB_0 : GPIOB->OTYPER |= bit; break;
MikamiUitOpen 0:7b86a8a8aabd 32 case PC_0 : GPIOC->OTYPER |= bit; break;
MikamiUitOpen 0:7b86a8a8aabd 33 }
MikamiUitOpen 0:7b86a8a8aabd 34 }
MikamiUitOpen 0:7b86a8a8aabd 35
MikamiUitOpen 0:7b86a8a8aabd 36 // 複数の出力ポートをオープンドレインに設定する
MikamiUitOpen 0:7b86a8a8aabd 37 void SetOpenDrain(PinName p0, PinName p1, PinName p2 = NC, PinName p3 = NC,
MikamiUitOpen 0:7b86a8a8aabd 38 PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
MikamiUitOpen 0:7b86a8a8aabd 39 PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
MikamiUitOpen 0:7b86a8a8aabd 40 PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC)
MikamiUitOpen 0:7b86a8a8aabd 41 {
MikamiUitOpen 0:7b86a8a8aabd 42 PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15};
MikamiUitOpen 0:7b86a8a8aabd 43
MikamiUitOpen 0:7b86a8a8aabd 44 for (int n=0; n<16; n++)
MikamiUitOpen 0:7b86a8a8aabd 45 {
MikamiUitOpen 0:7b86a8a8aabd 46 if (pins[n] == NC) break;
MikamiUitOpen 0:7b86a8a8aabd 47 SetOpenDrain(pins[n]);
MikamiUitOpen 0:7b86a8a8aabd 48 }
MikamiUitOpen 0:7b86a8a8aabd 49 }
MikamiUitOpen 0:7b86a8a8aabd 50
MikamiUitOpen 0:7b86a8a8aabd 51 // 一つの出力ポートをプッシュプルに設定する
MikamiUitOpen 0:7b86a8a8aabd 52 void SetPushPull(PinName pin)
MikamiUitOpen 0:7b86a8a8aabd 53 {
MikamiUitOpen 0:7b86a8a8aabd 54 // ポート A, B, C 以外は設定できないようにしている
MikamiUitOpen 0:7b86a8a8aabd 55 MBED_ASSERT(pin <= PC_15);
MikamiUitOpen 0:7b86a8a8aabd 56
MikamiUitOpen 0:7b86a8a8aabd 57 uint16_t bit = 1 << (pin & 0xF); // bit position
MikamiUitOpen 0:7b86a8a8aabd 58 switch (pin & 0xF0)
MikamiUitOpen 0:7b86a8a8aabd 59 {
MikamiUitOpen 0:7b86a8a8aabd 60 case PA_0 : GPIOA->OTYPER &= ~bit; break;
MikamiUitOpen 0:7b86a8a8aabd 61 case PB_0 : GPIOB->OTYPER &= ~bit; break;
MikamiUitOpen 0:7b86a8a8aabd 62 case PC_0 : GPIOC->OTYPER &= ~bit; break;
MikamiUitOpen 0:7b86a8a8aabd 63 }
MikamiUitOpen 0:7b86a8a8aabd 64 }
MikamiUitOpen 0:7b86a8a8aabd 65
MikamiUitOpen 0:7b86a8a8aabd 66 // 複数の出力ポートをプッシュプルに設定する
MikamiUitOpen 0:7b86a8a8aabd 67 void SetPushPull(PinName p0, PinName p1, PinName p2 = NC, PinName p3 = NC,
MikamiUitOpen 0:7b86a8a8aabd 68 PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
MikamiUitOpen 0:7b86a8a8aabd 69 PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
MikamiUitOpen 0:7b86a8a8aabd 70 PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC)
MikamiUitOpen 0:7b86a8a8aabd 71 {
MikamiUitOpen 0:7b86a8a8aabd 72 PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15};
MikamiUitOpen 0:7b86a8a8aabd 73
MikamiUitOpen 0:7b86a8a8aabd 74 for (int n=0; n<16; n++)
MikamiUitOpen 0:7b86a8a8aabd 75 {
MikamiUitOpen 0:7b86a8a8aabd 76 if (pins[n] == NC) break;
MikamiUitOpen 0:7b86a8a8aabd 77 SetPushPull(pins[n]);
MikamiUitOpen 0:7b86a8a8aabd 78 }
MikamiUitOpen 0:7b86a8a8aabd 79 }
MikamiUitOpen 0:7b86a8a8aabd 80 }