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() {
}
PhillyNJ
1,1783 gold badges10 silver badges20 bronze badges
asked Jun 24, 2017 at 20:55

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);
}
answered Jun 24, 2017 at 22:18
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

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.