GPIO input am cortex m0+

Gast #6598061
Lesenswert?
• ▲
▼
Hallo,

Ich probiere gerade am SAMD21 Xplained herum und wollte die LED toggeln, 
wenn auf den Button gedrückt wird. Sicher übersehe ich etwas ..
Der Button hängt am PA15 und ist active low. Wenn ich am button messe, 
sehe ich das schonmal der Pull-Up gesetzt wurde, wenn ich den Button 
betätige liegt low an.
1
#include <samd21.h>
2

3
typedef uint8_t ui8;
4
typedef uint32_t ui32;
5

6
// USER LED: PB30; low-active
7
// USER BTN: PA15; low-active
8

9
static void delay(int n)
10
{
11
  int i;
12

13
  for (;n >0; n--)
14
  {
15
    for (i=0;i<100;i++)
16
      __asm("nop");
17
  }
18
}
19

20

21
int main(void)
22
{
23
  REG_PORT_DIR1 |= (1<<30);
24

25
  REG_PORT_DIR0 ^= (1<<15);
26
  REG_PORT_OUT0 |= (1<<15);
27

28
  while (1)
29
  {
30
    if(REG_PORT_IN0 & 1<<15) 
31
      REG_PORT_OUT1 |= (1<<30);
32
    else
33
      REG_PORT_OUT1 &= ~(1<<30);
34
  }
Gast #6598169
Lesenswert?
• ▲
▼
>>Meinstens muss man erst den Takt fuer den Port einschalten...
Ok das habe ich nicht getan, weil der clock für PORT dürfte doch 
standardmäßig an sein.

Und die Output sachen funktionieren, also die LED an PA_30 leuchtet und 
ein io an PB_00 kann ich toggeln.
Gast #6598184
Lesenswert?
• ▲
▼
etwas übersichtlicher:
1
#include <samd21.h>
2

3
#define BTN PORT_PA15 
4
#define LED PORT_PB30
5
#define PB0 PORT_PB00
6

7

8
// USER BTN: PA15; low-active
9
// USER LED: PB30; low-active
10
// PB0: test output
11

12
static void delay(int n)
13
{
14
  int i;
15

16
  for (;n >0; n--)
17
  {
18
    for (i=0;i<100;i++)
19
      __asm("nop");
20
  }
21
}
22

23
int main(void)
24
{
25
  REG_PORT_DIRSET1 = LED;
26
  REG_PORT_DIRSET1 = PB0;
27

28
  REG_PORT_DIRCLR0 = BTN;
29
  REG_PORT_OUTSET0 |= BTN;
30

31
  while (1)
32
  {
33
    if(REG_PORT_IN0 & BTN) 
34
      REG_PORT_OUTSET1 = LED;
35
    else
36
      REG_PORT_OUTCLR1 = LED;
37

38
    REG_PORT_OUTTGL1 = PB0;
39
  }
40
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.