If the bit is 0 it works as binary counter and if its value is 1 it works as BCD coounter. After the Control Word is written, OUT is initially low, and will remain low until the counter reaches zero it is decremented by 1 after every clock cycle. OUT then goes high and remains high until a new count or a new Mode 0 Control Word is written into the counter. OUT will go low on the CLK pulse following a trigger to begin the one-shot pulse, and will remain low until the counter reaches zero. When counting is enabled, it becomes high and this process repeats periodically. This mode works as a frequency divider.
|Published (Last):||10 June 2005|
|PDF File Size:||14.33 Mb|
|ePub File Size:||4.49 Mb|
|Price:||Free* [*Free Regsitration Required]|
The original PC used a single "base oscillator" to generate a frequency of This base frequency was divided by 3 to give a frequency of 4. By logically ANDing these signals together a frequency equivalent to the base frequency divided by 12 was created. This frequency is 1. At the time it was a brilliant method of reducing costs, as the Frequency Dividers The basic principle of a frequency divider is to divide one frequency to obtain a slower frequency. This is typically done by using a counter.
Each "pulse" from the input frequency causes the counter to be decreased, and when that counter has reached zero a pulse is generated on the output and the counter is reset. The PIT has only 16 bits that are used as frequency divider, which can represent the values from 0 to Software also specifies an action to be taken when the counter reaches zero on each individual channel.
Each PIT channel also has a "gate input" pin which can be used to control whether the input signal the 1. For PIT channels 0 and 1, the associated gate input pin is not connected to anything. Outputs Channel 0 is connected directly to IRQ0, so it is best to use it only for purposes that should generate interrupts. Channel 1 is unusable, and may not even exist.
Channel 2 is connected to the PC speaker, but can be used for other purposes without producing audible speaker tones.
Typically during boot the BIOS sets channel 0 with a count of or 0 which translates to , which gives an output frequency of It can be used to generate an infinte series of "timer ticks" at a frequency of your choice as long as it is higher than 18 Hz , or to generate single CPU interrupts in "one shot" mode after programmable short delays less than an 18th of a second. When choosing an operating mode, below, it is useful to remember that the IRQ0 is generated by the rising edge of the Channel 0 output voltage ie.
On modern computers where the functionality of the PIT is implemented in a large scale integrated circuit, PIT channel 1 is no longer usable and may not be implemented at all. Channel 2 The output of PIT channel 2 is connected to the PC speaker, so the frequency of the output determines the frequency of the sound produced by the speaker.
Details of how to program the PC speaker can be found here. How the current count and reload value are used and what they contain depends on which mode the PIT channel is configured to use. The "read back" command is discussed later. The "Access Mode" bits tell the PIT what access mode you wish to use for the selected channel, and also specify the "counter latch" command to the CTC more on the "counter latch" command later.
For the "read back" command also discussed later , these bits have a different meaning. For the remaining combinations, these bits specify what order data will be read and written to the data port for the associated PIT channel. For "hibyte only", only the highest 8 bits of the counter value is read or written.
For the "read back" command and the "counter latch" command, these bits have different meanings see the information corresponding to these commands below. There are 6 different operating modes. Each operating mode will be discussed separately later. Although it should still be possible to use BCD mode, it may not work properly on some "compatible" chips. For the "read back" command and the "counter latch" command, this bit has different meanings see the information corresponding to these commands below.
Operating Modes While each operating mode behaves differently, some things are common to all operating modes. The operating mode determines the exact effect that this will have. Current Counter The current counter value is always either decremented or reset to the reload value on the falling edge of the 1. Current Counter Reload In modes where the current count is decremented when it is reloaded, the current count is not decremented on the same input clock pulse as the reload - it starts decrementing on the next input clock pulse.
After the reload register has been set, the current count will be set to the reload value on the next falling edge of the 1. Subsequent falling edges of the input signal will decrement the current count if the gate input is high on the preceding rising edge of the input signal.
The reload value can be changed at any time. Once the full reload value is set in any access mode , the next falling edge of the 1. Note: despite the misleading name of this mode, it only generates interrupts on channel 0. After the reload register has been set the PIT will wait for the next rising edge of the gate input.
Once this occurs, the output signal will go low and the current count will be set to the reload value on the next falling edge of the 1. Subsequent falling edges of the input signal will decrement the current count. If the gate input signal goes low during this process it will have no effect.
However, if the gate input goes high again it will cause the current count to be reloaded from the reload register on the next falling edge of the input signal, and restart the count again the same as when counting first started. The reload value can be changed at any time, however the new value will not affect the current count until the current count is reloaded on the next rising edge of the gate input.
So if you want to do this, clear and then reset bit 0 of IO port 0x61, after modifying the reload value. Mode 2 - Rate Generator This mode operates as a frequency divider. When the current count decrements from two to one, the output goes low, and on the next falling edge of the 1. If the gate input goes low, counting stops and the output goes high immediately. Once the gate input has returned high, the next falling edge on input signal will cause the current count to be set to the reload value and operation will continue.
The reload value can be changed at any time, however the new value will not effect the current count until the current count is reloaded when it is decreased from two to one, or the gate input going low then high. When this occurs counting will continue using the new reload value. A reload value or divisor of one must not be used with this mode. This mode creates a high output signal that drops low for one input signal cycle 0. For this reason mode 2 is useless for producing sounds with PIT channel 2.
Mode 3 - Square Wave Generator For mode 3, the PIT channel operates as a frequency divider like mode 2, however the output signal is fed into an internal "flip flop" to produce a square wave rather than a short pulse. This causes the actual output to change state half as often, so to compensate for this the current count is decremented twice on each falling edge of the input signal instead of once , and the current count is set to the reload value twice as often.
Subsequent falling edges of the input signal will decrement the current count twice if the gate input is high on the preceding rising edge of the input signal. The output will then go high, which will generate an immediate perhaps spurious IRQ0. For even reload values, when the current count decrements from two to zero the output of the flop-flop changes state; the current count will be reset to the reload value and counting will continue. For odd reload values, the current count is always set to one less than the reload value.
If the output of the flip flop is low when the current count decrements from two to zero it will behave the same as the equivalent even reload value. However, if the output of the flip flop is high the reload will be delayed for one input signal cycle 0.
Because the reload value is rounded down to the nearest even number anyway, it is recommended that only even reload values be used which means you should mask the value before sending it to the port.
Note: This even value limitation on the reload value in mode 3 reduces the number of possible output frequencies in half. If you want to be able to control the frequency of IRQ0 to a somewhat higher degree, then think about using mode 2 instead for channel 0. On channel 2, if the gate input goes low, counting stops and the output goes high immediately. Once the gate input has returned high, the next falling edge on input signal will cause the current count to be set to the reload value and operation will continue with the output left high.
The reload value can be changed at any time, however the new value will not effect the current count until the current count is reloaded when it is decreased from two to zero, or the gate input going low then high. Mode 4 - Software Triggered Strobe Mode four operates as a retriggerable delay, and generates a pulse when the current count reaches zero.
When the current count decrements from one to zero, the output goes low for one cycle of the input signal 0. If the gate input goes low, counting stops but the output will not be affected and the current count will not be reset to the reload value. Mode 5 - Hardware Triggered Strobe Mode 5 is similar to mode 4, except that it waits for the rising edge of the gate input to trigger or re-trigger the delay period like mode 1. Once this occurs, the current count will be set to the reload value on the next falling edge of the 1.
Counter Latch Command To prevent the current count from being updated, it is possible to "latch" a PIT channel using the latch command. When the latch command has been sent, the current count is copied into an internal "latch register" which can then be read via.
The main benefit of the latch command is that it allows both bytes of the current count to be read without inconsistencies. Bits 1 to 3 of the read back command select which PIT channels are affected, and allow multiple channels to be selected at the same time.
Bit 6 indicates whether a newly-programmed divisor value has been loaded into the current count yet if clear or the channel is still waiting for a trigger signal or for the current count to count down to zero before a newly programmed reload value is loaded into the current count if set. Reading The Current Count To read the current count using the "lobyte only" or "hibyte only" access modes, you can just do an "in al,0x40" for PIT channel 0 without problems.
For frequencies higher than 4. Disabling interrupts works for single CPU computers. For the "lobyte only" or "hibyte only" access modes this only takes a single "out 0x40,al" for PIT channel 0. The idea is to provide a single routine to initialize PIT channel 0 for any possible frequency and use IRQ 0 to accurately keep track of real time in milliseconds since the PIT was configured. For the sake of accuracy, the initialization code will calculate the number of whole milliseconds to add to the "system timer tick" each IRQ, and the number of "fractions of a millisecond" to avoid drift.
Hopefully, everyone is familiar with fixed point mathematics. For example, with the " In a similar way, the fraction 0. To begin with, this following code contains all of the data used by this example.
It is assumed that the ". In this case the following code will find the nearest possible frequency. Once it has calculated the nearest possible frequency it will reverse the calculation to find the actual frequency selected rounded to the nearest integer, intended for display purposes only. This is mostly pointless due to inaccurate hardware I just like being correct.
I assume Pascal calling convention - the called function cleans the stack. CountDown--; if timerblocks[i]. For example, if the timer interval is 10 milliseconds per tick, tell the programmer to issue Sleep ; to sleep for a single second.
To give the currently running task some time to run, set a threshold, for example of 3 ticks.
Microprocessor | 8254 programmable interval timer
The counter will then generate a low pulse for 1 clock cycle a strobe — after that the output will become high again. Mode 5 : Hardware Triggered Strobe[ edit ] This mode is similar to mode 4. However, the counting process is triggered by the GATE input. Once the device detects a rising edge on the GATE input, it will start counting.
Intel 8253 - Programmable Interval Timer