3

I am trying to use D0/D1 as normal IO pins but DigitalWrite does not work as on an Arduino UNO.

I know the SAMD21G has SERCOM but I can't seem to find an example of not using D0/D1 as an UART port.

EDIT ** Code I have tried:

#define MYMASK 0x00000C00
void setup() {
  REG_PORT_DIRSET0 = MYMASK; // Direction set to OUTPUT
  REG_PORT_OUTSET0 = MYMASK; // set state of pin(s) to TRUE (HIGH)
  delay(1000);
  REG_PORT_OUTCLR0 = MYMASK; // set state of pin(s) to FALSE (LOW)  
}

void loop() {
}

1 Answer 1

2

You can do this by simply calling the right registers:

Example 1, using a MASK

D0/D1 are mapped to to PA10 & PA11 on the M0

/* The following ports where selected
    PORT_PA11
    PORT_PA10
    */  
#define MYMASK 0x00000C00

int main (void)
{
    system_init();

    REG_PORT_DIRSET0 = MYMASK; // Direction set to OUTPUT
    REG_PORT_OUTSET0 = MYMASK; // set state of pin(s) to TRUE (HIGH)
    //REG_PORT_OUTCLR0 = MYMASK; // set state of pin(s) to FALSE (LOW)

    while(1){       

    }   
}

Here is another simple example:

/* The following ports where selected
    PORT_PA11
    PORT_PA10
    */  
#define MYMASK 0x00000C00
#define LED1 PORT_PA10
#define LED2 PORT_PA11
int main (void)
{
    system_init();

    REG_PORT_DIRSET0 = LED1 | LED2; // Direction set to OUTPUT
    REG_PORT_OUTSET0 = LED1 | LED2; // set state of pin(s) to TRUE (HIGH)
    //REG_PORT_OUTCLR0 = LED1 | LED2; // set state of pin(s) to FALSE (LOW)
    while(1){   

    }   
}

In the Arduino IDE you can do something like:

#define MYMASK 0x00000C00
void setup() {
  REG_PORT_DIRSET0 = MYMASK; // Direction set to OUTPUT 
}

void loop() {
   REG_PORT_OUTSET0 = MYMASK; // set state of pin(s) to TRUE (HIGH)
   delay(1000);
   REG_PORT_OUTCLR0 = MYMASK; // set state of pin(s) to FALSE (LOW)  
   delay(1000);
}
9
  • Thanks for the quick reply... I tried the the above trough Arduino but without any luck. I wonder if Arduino overwrites the registers in the background. Commented Jun 26, 2017 at 7:19
  • Can't tell unless you post your code. Commented Jun 26, 2017 at 10:42
  • 1
    Have added the Arduino Code... Commented Jun 27, 2017 at 8:58
  • @BertusKruger - I just tried the code on my Arduino M0 which has D0/D1 mapped to PA11 & PA12. You have set the ports to low before the loop. See my revised code. Commented Jun 27, 2017 at 11:57
  • edit - D0/D1 are mapped to PA10 & PA11 Commented Jun 27, 2017 at 21:06

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.