So I have this project in my mind where I want to read pixel data from an image sensor via a microcontroller (e.g. STM32F103) and then display the image on a screen.
The image sensor I have in mind is the AR0103CS which is capable of max. 1280 x 960 @ 45 fps. I am aware that the Cortex-M3 is not able to handle 45fps but I am pretty sure that 1 or two pictures per second are possible.
Now there is a problem: The image sensor expects either a direct clock input of 74.25MHz or something inbetween 6 - 50 MHz (the AR0103CS would then increase this input clock to 74.25MHz with its own built-in PLL). In either case it is going to put out one pixel data (12-bit parallel) after the other in a progressive scan-line fashion at a rate of 74.25MHz.
I currently don't know if the STM32F103 is able to generate something above 50MHz as output clock (I think the GPIOs max out in high-speed mode at 50MHz)? Is there a way to route a timer to a pin which could then be used as the input clock?
Even if the STM32 isn't able to create 74.25MHz for the image sensor, I can still go with something lower in the range of 6 - 50MHz as the mentioned PLL will generate the necessary system clock for the sensor.
But in this case the Pixel-Clock-Output signal from the sensor (PXCLK) is still going to be 74.25MHz. This means I have to be able to read values from 12 GPIO pins at a rate of 74.25MHz for a short time frame (16.55ms to be exact).
The way I thought this could work is to create an interrupt for a specific GPIO which is in input mode and receives the PXCLK signal from the sensor. Every time the input value goes from low to high, an interrupt is generated.
In this interrupt handler I then read from 12 GPIO pins. In the 8-bit uC I worked with, the values of 8 GPIOs were combined into a single register such that one is able to read them in parallel. As the STM32 is a 32-bit CPU I don't know if there is a Port with 12 or more GPIOs which can be read in parallel?
Maybe there is other kind of hardware on the STM32 which is more high-speed because I assume doing this with GPIOs is not the best way possible.
Anyway, someone where who has more expertise with this controller and what it is capable of?