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

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