I have recently been using Linux on the AT91RM9200 as a data concentrator for a small (as yet unreleased) communications application.[snip]
In order to run the radio successfully I need to be able to handle interrupts within around 50us, and have interrupts run constantly for between 20us and 200us (mostly at the low end). I would expect there to be three or four of these interrupts every 1000us, probably using about 25% of the CPU power just to manage the radio deck.[snip]
This would makeup the real-time control element of the application. If I was writing this on bare metal, I would lock the high level interrupts out to perform communications between the mainline and the interrupt control paths for no more than 10us.
The question is, would I be able to meet these time contraints if I wrote a device driver running under Linux? Especially important is keeping the latency of handling the interrupts below 50us, and not breaking anything by running 200us long interrupts.The rough answer is that it's impossible with vanilla kernel and possible (as a rough approximation) with Ingo Molnar's real-time patch http://redhat.com/~mingo/realtime-preempt/ which includes arm real-time port and hardirq-disable removal feature by Daniel Walker.
I just wanted a general indication that such a driver is possible or impossible before embarking on a more detailed investigation.
Best Regards,
Andrew Lewis
-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php