2

I want to enable pin 13 on my SAM3X8E using direct port manipulation. On this chip the pin is bit 27 in port B, so I used PIOB->PIO_PER = 1<<27; to enable this pin, but it doesn't work. This pin keeps at 3.08V, the default value of non-initialized pins.

Here's my complete code:

#include <asf.h>
int main (void) {
 // Insert system clock initialization code here (sysclk_init()).
 board_init();
 sysclk_init();
 delay_init(sysclk_get_cpu_hz());
 PIOB->PIO_PER = 1<<27;
 PIOB->PIO_OER = 1<<27;
 while(1) {
 REG_PIOB_ODSR = 1<<27;
 delay_ms(1000);
 REG_PIOB_ODSR = 0<<27;
 delay_ms(1000); 
 }
}

Can anyone tell me how I can get this to work?

dda
1,5951 gold badge12 silver badges17 bronze badges
asked Aug 25, 2015 at 7:13

2 Answers 2

0

I suggest the following test: Use REG_PIOB_SODR = 1<<27; to set the bit, and REG_PIOB_CODR = 1<<27; to clear it. If that works ok, see about enabling synchronous data output via the port's PIO_OWSR register. (If it doesn't work ok, perhaps review section 31.6, "I/O Lines Programming Example", on page 629 of Atmel document 11057, the Cortex datasheet.)

Section 31.5.5, "Synchronous Data Output", on page 623 says in part:

After reset, the synchronous data output is disabled on all the I/O lines as PIO_OWSR resets at 0x0.

I imagine that writes to REG_PIOB_SODR and REG_PIOB_CODR should have effect after you enabled output by setting bits in PIOB->PIO_PER and PIOB->PIO_OER, which you did. However, with the bit in PIO_OWSR being clear, synchronous data output isn't available, so writes to REG_PIOB_ODSR have no effect.

answered Aug 25, 2015 at 16:07
0
 #define Led_ON REG_PIOB_ODSR |= 0x8000000
 #define Led_OFF REG_PIOB_ODSR &= ~0x8000000
 //for Arduino Due
 PIOB->PIO_PER |= 0x8000000;//led
 PIOB->PIO_OER |= 0x8000000;//led

And then call Led_ON and Led_OFF

answered Mar 7, 2017 at 11:54

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.