出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数. このライブラリを登録した際のプログラム: Demo_SetOutputPortType. Global functions for setting the output port bit open-drain or push-pull.
Dependents: Demo_SetOutputPortType Mbed2_ConnectTestAll
SetOutputPortType.hpp@0:7b86a8a8aabd, 2015-08-22 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Aug 22 03:02:49 2015 +0000
- Revision:
- 0:7b86a8a8aabd
- Child:
- 1:670919fefe1c
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |