Re: Sub jiffy delay?

From: linux-os (Dick Johnson)
Date: Wed Nov 23 2005 - 17:07:33 EST

On Wed, 23 Nov 2005, Rick Niles wrote:

> I need to service a piece of hardware about every 400-500
> microseconds, but I really don't want to change the value of HZ, which
> in my version of the 2.6 kernel is 1000. The hardware doesn't have an
> interrupt so the nasty hack I've been doing is to service the hardware
> repeatedly in a loop for about 600 microseconds by watching the
> do_gettimeofday(), set a timer for the next jiffy and repeat. This leaves less than 400 microseconds / millisecond for the kernel and anything else on the system to run.
> Obviously, this sucks, but it does work. I am working with the
> hardware guy to add an interrupt to the hardware. However, I don't
> want every user of the hardware without the interrupt to have to
> rebuild the kernel with a different value of HZ. So does anyone have
> any better ideas on what I can do?
> Thanks,
> Rick Niles.

Use the RTC if you have an ix86-type machine. It interrupts on
IRQ8 and works fine. It can be programmed at 2048, 1020, 512, etc.,
ticks/per second. I have used it to create a precision state-machine
for handling a 24-bit ADC where it is important to grab stuff at
at repeatable times so that IIR filtering works.... basically:

case 0:
case 1:
case 2:
case 3:
case 4:
state = 0;

Note that there is a global spin_lock called 'rtc_lock' that you should
use to prevent anybody from mucking with the chip behind your back.

Since you need to sample your hardware at fixed intervals, the RTC
interrupt is ideal. Just remember to put everything back when you
unload your module! Also, leave the index register (0x70) at 0 before
you release the spin-lock. That keeps a power-failure from trashing
the contents of CMOS (it could only trash seconds).

Dick Johnson
Penguin : Linux version on an i686 machine (5589.55 BogoMips).
Warning : 98.36% of all statistics are fiction.

The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@xxxxxxxxxxxx - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at