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

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.