LPC1114FN28で同一ポート群から別々にデジタル出力する場合に出力波形が乱れることがあります。この現象を確認するためのテストプログラムです。
LPC1114FN28 でのデジタル出力について
LPC1114FN28でデジタル出力をする場合、同一ポート群に対して、個別出力をすると他方の出力に影響を与えます。
<サンプルプログラムの説明>
PIO1_xのポート群(dp13(PIO1_4),dp14(PIO1_5))で確認しました
Tickerで0.1ms周期割り込みでレベル反転(dp14)させ、main()でdp13から固定レベル出力させます。
main()でLo出力しているとき、割り込みで出力させているパルスが乱れます。
main()でHi出力させているときは、パルスは乱れません。
プログラムの 19行目の"NG_LEVEL"define定義を無効にするとこのプログラムになります。
dp13(PIO1_4)をdp1(PIO0_8)の別ポート群にするとパルスは乱れません。
プログラムの18行目の"NG_PORT"define定義を無効にするとこのプログラムになります。
LPC1768(青mbed)では、上記の様な現象は発生しません(P2xポート群(P21(P2.5),P22(P2.4)で確認)
プログラムの17行目の"LPC1114FN28"define定義を無効にして、コンパイラの設定をLPC1768にするとこのプログラムになります。
main.cpp@0:01c0ed9b80c5, 2013-10-26 (annotated)
- Committer:
- suupen
- Date:
- Sat Oct 26 09:28:02 2013 +0000
- Revision:
- 0:01c0ed9b80c5
- Child:
- 1:bf75eed34e82
LPC1114FN28 Digital Output test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
suupen | 0:01c0ed9b80c5 | 1 | /* |
suupen | 0:01c0ed9b80c5 | 2 | LPC1114FN28でデジタル出力をする場合、同一ポート群に対して、個別出力をすると他方の出力に影響を与えます。 |
suupen | 0:01c0ed9b80c5 | 3 | |
suupen | 0:01c0ed9b80c5 | 4 | <サンプルプログラムの説明> |
suupen | 0:01c0ed9b80c5 | 5 | PIO1_xのポート群(dp13(PIO1_4),dp14(PIO1_5))で確認 |
suupen | 0:01c0ed9b80c5 | 6 | Tickerで0.1ms周期割り込みでレベル反転(dp14)させ、main()でdp13から固定レベル出力させます。 |
suupen | 0:01c0ed9b80c5 | 7 | main()でLo出力しているとき、割り込みで出力させているパルスが乱れます。 |
suupen | 0:01c0ed9b80c5 | 8 | |
suupen | 0:01c0ed9b80c5 | 9 | main()でHi出力させているときは、パルスは乱れません。 |
suupen | 0:01c0ed9b80c5 | 10 | dp13(PIO1_4)をdp1(PIO0_8)の別ポート群にするとパルスは乱れません。 |
suupen | 0:01c0ed9b80c5 | 11 | |
suupen | 0:01c0ed9b80c5 | 12 | LPC1768(青mbed)では、上記の様な現象は発生しません(P2xポート群(P21(P2.5),P22(P2.4)で確認) |
suupen | 0:01c0ed9b80c5 | 13 | */ |
suupen | 0:01c0ed9b80c5 | 14 | |
suupen | 0:01c0ed9b80c5 | 15 | #include "mbed.h" |
suupen | 0:01c0ed9b80c5 | 16 | |
suupen | 0:01c0ed9b80c5 | 17 | #define LPC1114FN28 // 無効時LPC1768設定になります |
suupen | 0:01c0ed9b80c5 | 18 | #define NG_PORT // 無効時、mainでの出力を別ポート群にします |
suupen | 0:01c0ed9b80c5 | 19 | #define NG_LEVEL // 無効時、mainでの出力をHiにします |
suupen | 0:01c0ed9b80c5 | 20 | |
suupen | 0:01c0ed9b80c5 | 21 | #ifdef LPC1114FN28 |
suupen | 0:01c0ed9b80c5 | 22 | |
suupen | 0:01c0ed9b80c5 | 23 | #ifdef NG_PORT |
suupen | 0:01c0ed9b80c5 | 24 | DigitalOut out(dp13); |
suupen | 0:01c0ed9b80c5 | 25 | #else //~NG_PORT |
suupen | 0:01c0ed9b80c5 | 26 | DigitalOut out(dp1); |
suupen | 0:01c0ed9b80c5 | 27 | #endif // NG_PORT |
suupen | 0:01c0ed9b80c5 | 28 | |
suupen | 0:01c0ed9b80c5 | 29 | DigitalOut test(dp14); |
suupen | 0:01c0ed9b80c5 | 30 | |
suupen | 0:01c0ed9b80c5 | 31 | #else // ~LPC1114FN28 (LPC1768) |
suupen | 0:01c0ed9b80c5 | 32 | DigitalOut out(p22); |
suupen | 0:01c0ed9b80c5 | 33 | DigitalOut test(p21); |
suupen | 0:01c0ed9b80c5 | 34 | #endif // LPC1114FN28 |
suupen | 0:01c0ed9b80c5 | 35 | |
suupen | 0:01c0ed9b80c5 | 36 | Ticker timer; |
suupen | 0:01c0ed9b80c5 | 37 | |
suupen | 0:01c0ed9b80c5 | 38 | void attime(){ |
suupen | 0:01c0ed9b80c5 | 39 | test = !test; |
suupen | 0:01c0ed9b80c5 | 40 | } |
suupen | 0:01c0ed9b80c5 | 41 | |
suupen | 0:01c0ed9b80c5 | 42 | |
suupen | 0:01c0ed9b80c5 | 43 | int main() { |
suupen | 0:01c0ed9b80c5 | 44 | timer.attach_us(&attime, 100); |
suupen | 0:01c0ed9b80c5 | 45 | |
suupen | 0:01c0ed9b80c5 | 46 | |
suupen | 0:01c0ed9b80c5 | 47 | |
suupen | 0:01c0ed9b80c5 | 48 | while(1) { |
suupen | 0:01c0ed9b80c5 | 49 | #ifdef NG_LEVEL |
suupen | 0:01c0ed9b80c5 | 50 | out = 0; |
suupen | 0:01c0ed9b80c5 | 51 | #else // ~NG_LEVEL |
suupen | 0:01c0ed9b80c5 | 52 | out = 1; |
suupen | 0:01c0ed9b80c5 | 53 | #endif // NG_LEVEL |
suupen | 0:01c0ed9b80c5 | 54 | } |
suupen | 0:01c0ed9b80c5 | 55 | } |
suupen | 0:01c0ed9b80c5 | 56 |