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
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
-
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.Bertus Kruger– Bertus Kruger2017年06月26日 07:19:57 +00:00Commented Jun 26, 2017 at 7:19
-
Can't tell unless you post your code.PhillyNJ– PhillyNJ2017年06月26日 10:42:41 +00:00Commented Jun 26, 2017 at 10:42
-
1Have added the Arduino Code...Bertus Kruger– Bertus Kruger2017年06月27日 08:58:29 +00:00Commented 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.PhillyNJ– PhillyNJ2017年06月27日 11:57:35 +00:00Commented Jun 27, 2017 at 11:57
-
edit - D0/D1 are mapped to PA10 & PA11PhillyNJ– PhillyNJ2017年06月27日 21:06:50 +00:00Commented Jun 27, 2017 at 21:06