LPC11U35 GPIOs

OP #6493164
Lesenswert?

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:
1
/*
2
===============================================================================
3
 Name        : testgpio.c
4
 Author      : $(author)
5
 Version     :
6
 Copyright   : $(copyright)
7
 Description : main definition
8
===============================================================================
9
*/
10

11
#include "chip.h"
12
int i;
13

14
int main(void) {
15
    SystemCoreClockUpdate();
16

17
    // TODO: insert code here
18
    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
    return 0 ;
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?
Angehängte Dateien:
OP #6493194
Lesenswert?

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.
Angehängte Dateien:
Gast #6493236
Lesenswert?

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 ...
OP #6494220
Lesenswert?

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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren