flat assembler
Message board for the users of flat assembler.
Index
> Main > clock interrupt? |
Author |
|
edfed 25 Feb 2008, 22:26
as irq are just signals, you shall seek into the sheet about rtc.
helppc contain an overview there are 3 irq possible on rtc the update terminate, the periodic and the alarm alarm normally launch int 4Ah and periodic one will be made each second, at 1Hz frequency... to know what is the current active signal there are flags in a status registers. the update terminated is not reallly needed as it is used to update system the periodic one can replace it. |
|||
25 Feb 2008, 22:26 |
|
System86 25 Feb 2008, 23:09
The timer interrupt is IRQ 0, int 8h, it is generated by RTC channel 0 by default 18.2 times per second. Intercept int 8h or int 1Ch (the BIOS int 8h handler calls int 1Ch) to get timer interrupts. To change the configuration or frequency of the timer, use ports 40h/43h.
|
|||
25 Feb 2008, 23:09 |
|
edfed 25 Feb 2008, 23:36
no, the timer is not the RTC
don't confuse them timer is IRQ 0 int 8 rtc is irq 8, int 70h the timer is set to 18,2 HZ cause of the counter value of the chanel assigned to IRQ0 the rtc is not dependant to the platform, it is possible to have RTC on various PCB, as a time reference. the old RTC chip, as found on old 286, 386 boards needs a battery to save the values of SRAM (CMOS) and continue to count the time without power supply. the timer is just a timer, started at boot and stopped at power off the routine to handle the timer is not the same as the one for the RTC. RTC is originally a DALLAS(r) component available for general purpose timing assisted by µP |
|||
25 Feb 2008, 23:36 |
|
System86 26 Feb 2008, 02:39
Sorry, you are right, edfed. The timer interrupt is generated by the PIT (channel 0), that's the 18.2 per second timer, use ports 40h-43h for that. The RTC generates the clock interrupt, and it always keeps time, even when the PC is off.
|
|||
26 Feb 2008, 02:39 |
|
Japheth 26 Feb 2008, 08:04
edfed wrote:
IIRC the default value for the RTC frequency is 1024 Hz, not just 1 Hz. |
|||
26 Feb 2008, 08:04 |
|
edfed 26 Feb 2008, 11:18
happy to know that.
1024Hz is better than the 1Hz value. i would prefer to have a 1000 Hz frequency... is it possible? how to change the period? there is probably a register to program... port 70h, 71h |
|||
26 Feb 2008, 11:18 |
|
System86 26 Feb 2008, 21:21
It's possible to configure the PIT to 1000 Hz, just take a sound function and get it to program channel 0 instead of channel 2. If you must change the RTC interrupt frequency (not PIT), then you can use status register A of CMOS/RTC (write 0Ah to port 70h to access it at port 71h), but it doesn't seem to support exactly 1000 Hz, it only supports none, 122 microseconds, 500 milliseconds, and 976.562 microseconds (the default, or 1024 Hz).
|
|||
26 Feb 2008, 21:21 |
|
edfed 26 Feb 2008, 22:19
then i'll use the 500 millisecond one.
it's better for time precision to use rtc than pit. rtc is stable, very old PC, never used since some years have the time still valid.. effective (not typical) time shift is like 1 or 2 minutes after 2 or 3 years for a 386 pc i have pit used in conjunction to rtc will expand the possibilities. the rtc used as feedback to adjust the pit counters... |
|||
26 Feb 2008, 22:19 |
|
daniel.lewis 26 Feb 2008, 23:28
You guys might be programming for a 286 or 386 platform...
On modern systems, the LAPIC, ACPI-PM and HPET provide a plethora of clock interfaces that are apparently more accurate and manageable than the PIT. I've been told each has advantages - the LAPIC timer and HPET are excellent for sleep and interval timing, ACPI-PM has excellent precision. It's also preferable to use the more modern forms because they're more efficient to use because they don't need error correction code, and simply avoid the RTC, PIT and PIC altogether. I had thought that the PIC was one of the things the x86-64 long mode didn't support, but I just googled it and I was wrong. It's more or less considered obsolete though. _________________ dd 0x90909090 ; problem solved. Last edited by daniel.lewis on 26 Feb 2008, 23:38; edited 1 time in total |
|||
26 Feb 2008, 23:28 |
|
edfed 26 Feb 2008, 23:36
386 modules are available for embeded applications.
for these modules there are all the minimal PC platform. APIC is the PIC it is the same I/O port, the same functionality. |
|||
26 Feb 2008, 23:36 |
|
daniel.lewis 26 Feb 2008, 23:46
For reference, the PIT is the 8253 chip, with the 8254 PIT always being dedicated to memory refreshing and otherwise useless. The 8259 chip is the PIC chip.
http://lists.ntp.isc.org/pipermail/questions/2007-September/015360.html http://lists.freebsd.org/pipermail/freebsd-current/2005-February/046898.html http://www.cs.rice.edu/CS/Systems/Soft-timers/code/README.html http://en.wikipedia.org/wiki/Intel_8253 APIC is not the PIC. It's not even an upgrade, it's an entirely different system. http://en.wikipedia.org/wiki/Local_APIC "In systems containing an 8259 PIC, the 8259 may physically be connected to the LAPIC in the system's bootstrap processor (BSP), or to one of the system's I/O APICs, or both. Logically, however, the 8259 is only connected once at any given time." |
|||
26 Feb 2008, 23:46 |
|
System86 27 Feb 2008, 00:10
The RTC and PIT are supported on all systems (old and new), have a very standard, simple, and old interface, are supported under DOS, and have BIOS support. Use them unless you need the features of HPET/APIC/other stuff.
|
|||
27 Feb 2008, 00:10 |
|
revolution 27 Feb 2008, 00:15
My old 8088 system don't have an RTC, nor does the original IBM PC. It became standard, IIRC, with the IBM AT (80286) systems.
|
|||
27 Feb 2008, 00:15 |
|
System86 27 Feb 2008, 00:20
True, the PIT and PIC though were supported since the IBM PC. Some IBM PC's had "clock cards" that have an RTC, but not all had that. I was talking about PC AT+ systems in the post (I should have been more clear), and since those the PIC/PIT/RTC/keyboard controller/CMOS/lots of other things have been standard.
|
|||
27 Feb 2008, 00:20 |
|
Plue 27 Feb 2008, 20:52
Well, you can't use the timer interrupt instead of "lame" sleep(), because they are different things. If you program under unix/linux/windows/beos/osx/... you can't access interrupts. You can only access interrupts if you write a driver or program on the bare metal, in which case there won't be a sleep() available.
|
|||
27 Feb 2008, 20:52 |
|
System86 27 Feb 2008, 21:18
Quote:
Or if you are under DOS. |
|||
27 Feb 2008, 21:18 |
|
System86 27 Feb 2008, 21:20
Quote:
No, intercept the timer interrupt, increment a variable every time it is called, and when the variable reaches a certain count (meaning a certain amount of time elapsed) then do something. |
|||
27 Feb 2008, 21:20 |
|
edfed 27 Feb 2008, 23:11
sleep( ) is not asm.
pit can be used as a watch dog. but watchdog is used for what? simply to know if the system is blocked. if the watchdog is an irq, then to avoid this irq, the system must set it's counter periodically. if the counter is not reset, it will cross zero, and then launch the isr. |
|||
27 Feb 2008, 23:11 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.