Hallo,
gerade bin ich wieder mal am Spielen mit dem LPC11U35 (Eval Board wie
Embedded Artist) . Mit folgenden einfachen Programm weise ich jetzt
nach, daß manche GPIOs nicht auf Ausgang geschaltet werden können:
Chip_GPIO_SetPinDIROutput(LPC_GPIO,0,22);// toggle in ADC IRQ ok
19
Chip_GPIO_SetPinDIROutput(LPC_GPIO,0,11);// toggle in ADC IRQ
20
Chip_GPIO_SetPinDIROutput(LPC_GPIO,0,12);// toggle in ADC IRQ
21
Chip_GPIO_SetPinDIROutput(LPC_GPIO,0,13);// toggle in ADC IRQ
22
Chip_GPIO_SetPinDIROutput(LPC_GPIO,0,14);// toggle in ADC IRQ
23
// Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 15); // toggle in ADC IRQ SWDIO
24
Chip_GPIO_SetPinDIROutput(LPC_GPIO,0,16);// toggle in ADC IRQ ok
25
Chip_GPIO_SetPinDIROutput(LPC_GPIO,0,23);// toggle in ADC IRQ ok
26
27
// Enter an infinite loop
28
while(1){
29
Chip_GPIO_SetPinState(LPC_GPIO,0,22,false);
30
for(i=0;i<100000;i++){};
31
Chip_GPIO_SetPinState(LPC_GPIO,0,11,false);
32
for(i=0;i<100000;i++){};
33
Chip_GPIO_SetPinState(LPC_GPIO,0,12,false);
34
for(i=0;i<100000;i++){};
35
Chip_GPIO_SetPinState(LPC_GPIO,0,13,false);
36
for(i=0;i<100000;i++){};
37
Chip_GPIO_SetPinState(LPC_GPIO,0,14,false);
38
for(i=0;i<100000;i++){};
39
// Chip_GPIO_SetPinState(LPC_GPIO, 0, 15, false);
40
// for (i=0; i<100000; i++){};
41
Chip_GPIO_SetPinState(LPC_GPIO,0,16,false);
42
for(i=0;i<100000;i++){};
43
Chip_GPIO_SetPinState(LPC_GPIO,0,23,false);
44
for(i=0;i<100000;i++){};
45
46
Chip_GPIO_SetPinState(LPC_GPIO,0,22,true);
47
for(i=0;i<100000;i++){};
48
Chip_GPIO_SetPinState(LPC_GPIO,0,11,true);
49
for(i=0;i<100000;i++){};
50
Chip_GPIO_SetPinState(LPC_GPIO,0,12,true);
51
for(i=0;i<100000;i++){};
52
Chip_GPIO_SetPinState(LPC_GPIO,0,13,true);
53
for(i=0;i<100000;i++){};
54
Chip_GPIO_SetPinState(LPC_GPIO,0,14,true);
55
for(i=0;i<100000;i++){};
56
// Chip_GPIO_SetPinState(LPC_GPIO, 0, 15, true);
57
// for (i=0; i<100000; i++){};
58
Chip_GPIO_SetPinState(LPC_GPIO,0,16,true);
59
for(i=0;i<100000;i++){};
60
Chip_GPIO_SetPinState(LPC_GPIO,0,23,true);
61
for(i=0;i<100000;i++){};
62
}
63
return0;
64
}
Es funktionieren lediglich GPIO 0-22, 0-16 und 0-23.
GPIO0-15 ist mal ausgeklammert, weil dieser für den SWDIO des BMP
Adapters zur Programmierung verwendet wird.
Die kompletten Standard LPCopen Libs sind angehängt.
Mache ich hier einen Denkfehler oder ist der uC einfach nur defekt?
Stimmt, sorry! Da habe ich etwas zu viel reduziert.
Mit Clock kommt GPIO 0-11 dazu. Ich habe jetzt die board lib wieder
eingebunden. Dort wird, wie ich das sehe, der komplette GPIO 0
initialisiert.
Jetzt ist also board.h statt chip.h eingebunden. Die drei GIO0 12,13,14
fehlen immer noch.
Nein, das sind alles die ADC Pins. Anbei noch die Belegung des Boards.
Zur Ergänzung, damit es klar ist. Im Main wird jetzt zuerst:
Board_Init();
Board_LED_Set(true);
aufgerufen.
Ich bin darauf gekommen, weil ich GPIO 0-12 als Ausgang schalten wollte
und es nicht funktioniert hatte.
Der Schaltplan ist hier:
https://www.embeddedartists.com/products/lpc11u35-quickstart/
Die Pins sind alle frei.
P0.11 ... P0.14 sind als default JTAG Funktionen, die müssen erst auf
GPIO umgestellt werden. Habe den Code jetzt nicht durchgesehen, wird das
gemacht?
Die Pins 0-10 bis 0-15 sind für JTAG- bzw. SWD-Interface, und die sind
nach Reset halt auf diese Sonderfunktion eingestellt. Im RM 7.4.11 bis
7.4.16.
Einfach mal in den Registern nachsehen, was tatsächlich drin steht ...
A. B. schrieb:> Einfach mal in den Registern nachsehen, was tatsächlich drin steht ...
Ich habe es gerade mal überflogen. Das wird das Problem wohl sein. Ich
werde mit das Kapitel mal durchsehen.
Johannes, A.B.
Danke für die Tips!
man erkennt es auch an den Namen: die erstgenannte Funktion ist default
nach Reset, dann kommen die Alternativen Funktionen.
Oder in der Tabelle 3 im User Manual.
Es hat soweit geklappt. Eingefügt wurde:
LPC_IOCON->PIO0[12] = 0x01;
LPC_IOCON->PIO0[13] = 0x01;
LPC_IOCON->PIO0[14] = 0x01;
Ich hätte ja auch selbst drauf kommen können. Bei den AVRs ist JTAG ja
auch per default aktiviert.
Die LPCOpen lib ist wirklich halbgar gekocht. Den LPC_IOCON_T typ hätte
man ruhig etwas ausführlicher definieren können.
typedef struct { /*!< LPC11AXX/LPC11UXX/LPC11EXX IOCON
Structure */
__IO uint32_t PIO0[24];
__IO uint32_t PIO1[32];
} LPC_IOCON_T;
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang