I am using IPU1 on the Sitara processor, where image is loaded at boot time. The IPU is operating in a bare metal aspect, and the code is particularly simple.
The IPU is operating at 212 MHz, according to running the command "omapconf show opp".
GPIO1_28 was removed from the Linux device tree, so no processor is initializing or controlling this GPIO besides what is shown in the samples below.
I am targetting the 0x6xxx_xxxx address space since the the IPU has access to physical memory, but it is found in 0x6 instead of 0x4.
I am driving GPIO1_28 via writing to the address to set and then clear the register, in rapid fire. Below is the code, and the configuration of the GPMC:
main() {
*(uint32_t*)0x6A003458 = 0x0000000E; //Set GPMC_A6 to GPIO1_28
*(uint32_t*)0x6AE10134 &= ~(1 << 28); //Configure to enable output on GPIO1_28
uint32_t shiftValue = 1 << 28;
while(1)
{
*(uint32_t*) 0x6AE10194 = shiftValue; //Set the GPIO
*(uint32_t*) 0x6AE10190 = shiftValue; //Clear the GPIO
}
}
Currently, I am probing the Gate of a 2n7002 with a Saleae logic analyzer, which is connected to GPIO1_28, and I am seeing at max toggling rate of 2.5 Mhz (200ns per set/clear). I would be expecting quite a bit faster than this when clocked at 212 MHz.
Is there anything I am missing in my configuration in order top to be able to drive this pin faster? Is there any documentation describing how quickly the GPIO's could be toggled / read? The end goal is to read a parallel bus at higher frequency than what can be done with writing here, but I have not seen any documentation describing how quickly these interfaces can be accessed from a real time system.