LPC1114FN28で同一ポート群から別々にデジタル出力する場合に出力波形が乱れることがあります。この現象を確認するためのテストプログラムです。

Dependencies:   mbed

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にするとこのプログラムになります。

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?

UserRevisionLine numberNew 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