When working directly with DUE's registers for high speed I/O, multiple threads have shown difficulty with reading inputs.
Before working with inputs, you need to ensure that the Parallel I/O Controller is enabled. To save power, the PIO controller automatically gets disabled if the port at any time is set as outputs.
Also, when updating any registers, I've had great success with working with register pairs.
Using PIOC, here's some pseudocode to create, configure and control an 8-bit I/O port on pins 34 to 41.
REG_PMC_PCER0 |= 0x2000; // PMC to enable Parallel I/O Controller C (PIOC, PID13)
uint32_t dataioPins = (0xFF << 2); // mask for pins 34 to 41
byte readData, writeData;
REG_PIOC_ODR &= !dataioPins;
REG_PIOC_OER |= dataioPins; // bus switched to output mode
REG_PIOC_CODR &= (0x00 << 2); // bus cleared
REG_PIOC_SODR |= (writeData << 2); // write bus pins
REG_PIOC_OER &= !dataioPins;
REG_PIOC_ODR |= dataioPins; // bus switched to input mode
REG_PIOC_IFDR &= !dataioPins;
REG_PIOC_IFER |= dataioPins; // enable input glitch filters
REG_PIOC_PUDR &= !dataioPins;
REG_PIOC_PUER |= dataioPins; // enable pull up resistors
byte readData = REG_PIOC_PDSR >> 2; // read bus pins