Abstract:
A timer unit of a microprocessor has a hardware timer limited to the size of its register, and microcode instructions in the timer unit increment a second register when the timer register rolls over to a clear state. The contents of the two registers are concatenated to obtain an extended timer value. A delay in processing the increment of the second register can cause non-coherency of the two registers. By setting a flag when the increment occurs and detecting from the hardware register value whether rollover has occurred, it is logically decided from the flag and the rollover information whether the registers are non-coherent and if so, a correction is made in the value used from one of the registers.

Description:
FIELD OF THE INVENTION 
     This invention relates to microprocessors and particularly to a method of extending the capacity of a timer beyond the register size allowed by a hardware timer. 
     BACKGROUND OF THE INVENTION 
     A microprocessor of the kind, for example, which are used in automotive engine controls and a wide variety of other applications is capable of carrying many control functions at the same time by interleaving the operations of the various functions. Generally the microprocessor has to receive signals representing time events, and respond to the signals by outputting other signals, also often critically timed to control engine functions such as spark timing and fuel injection. Such microprocessors may employ a timer processor unit (TPU) which has several channels individually programmed to deal with the various timed signals. 
     Such a timer processor operates independently of but under the control of a central processor unit (CPU) and must, among other functions, be able to provide time data to the CPU. Both the CPU and the TPU are driven by a system clock which operates at megahertz rates to rapidly step each unit through its program functions. A random access memory (RAM) in the TPU is accessible by the CPU so that time data is obtained by addressing registers in the RAM where the TPU has placed the relevant information. The microprocessor architecture defines the registers of a uniform size, for example 16 bits. One or more timers in the TPU is used to regulate the various channels. 
     For each timer, one of the registers is driven by the system clock to serve as a free-running counter, called a hardware timer, which rapidly accumulates counts up to its limit and then rolls over to a clear state and continues counting, repeating this process continuously. At any moment the timer value can be stored to another register for reading by the CPU or for use by other TPU functions. A limitation of the timer is that it has only the size of the register so that special manipulations are required to manage larger counts. The availability of a larger count is desirable to provide a larger time range or to accommodate faster clock rates for better timer resolution. 
     It is proposed to control a second register through microcode software in the TPU to increment each time the hardware timer (first register) rolls over to its clear state. Then an extended timer value is achieved by concatenating the values in the second register and the hardware counter. Either the CPU or the TPU can get the extended timer value by reading the two registers. In practice, there can be a delay between the rollover of the first register and the incrementing of the second register. This leads to a short time when the registers are non-coherent, i.e., the first register has been cleared and the second register does not yet indicate that event, so that the combination of the two values in that period would yield an erroneous result. 
     SUMMARY OF THE INVENTION 
     It is therefore an object of the invention to extend the capacity of a microprocessor timer in a manner to yield a correct timer value at all times. Another object is to extend the capacity of a timer by combining a hardware timer and a software timer to produce a coherent timer value at all times. An additional object is to obtain such an extended timer value without any additional CPU software. 
     The TPU of the microprocessor is controlled by microcode which is separate from that used by the CPU, and is able to manipulate the data in a plurality of timer channels to perform time related functions on data stored in the RAM. The functions involve receiving input pulses and suitably responding to them, and outputting pulses at precise times to control various functions, the channel operations being interleaved to effectively achieve parallel processing of the timer channel functions. The timer channel functions are coordinated on the basis of the ever changing timer value. The microcode in the TPU also operates a second timer register for extending the timer value beyond that permitted by the size of the register used by the hardware timer. 
     The hardware timer is a first register which is continuously incremented by the system clock to define a lower word at each &#34;tick&#34; of the timer, and when it is full it clears or rolls over to begin a new word. The TPU operates a software timer which is a second register that is incremented each time the first register rolls over to define an upper word of timer value; the total timer value being obtained by combining the two words by concatenation. It is vital to assure that the two words are consistent or coherent by guaranteeing that any time the two words are read they both reflect the register status either before rollover or after rollover. It is possible to read split status register values (non-coherence) because a busy TPU may delay incrementing the second register when managing functions of higher priority. This can result in reading the lower word after rollover and reading the upper word before incrementing. On the other hand, the lower word may be captured before rollover and, due to processing delay, the upper word is read after incrementing. In each case, the two words are non-coherent. The microcode then is provided with programs to identify occasions of non-coherence and to adjust the upper word to agree with the status of the lower word. 
     The two words are coherent nearly all the time; it is necessary to check for coherency only near the time of rollover of the first register. A special rollover flag is set a few counts before rollover and is reset or cleared a few counts after the rollover. The program checks that flag and enters a coherence check if the flag is set and bypasses the check procedure if the flag is clear. Another special flag, an increment flag, is set prior to reaching rollover and is cleared when the second register is incremented, and is used along with the lower word value in determining the relative status of the registers. 
     When the upper and lower words are read to determine the timer value and the rollover flag is set, the coherency check program then determines from the value of the lower word whether a rollover has just occurred and determines from the increment flag whether an increment has transpired. If both have occurred or if neither have occurred, the words are coherent. If the increment flag is clear and the lower word value indicates no rollover has happened, the value of the upper word to be used must be decremented to agree with the status of the lower word. If the increment flag is not clear and the lower word value indicates rollover has happened, the value of the upper word to be used must be incremented to agree with the status of the lower word. Alternatively, the lower word value could be adjusted instead of the upper word value to achieve coherency. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The above and other advantages of the invention will become more apparent from the following description taken in conjunction with the accompanying drawings wherein like references refer to like parts and wherein: 
     FIG. 1 is a diagram of a prior art microprocessor which is programmable to incorporate the invention; 
     FIG. 2 is a block diagram of a timer processor unit of the microprocessor of FIG. 1 programmed for an extended timer value according to the invention; 
     FIG. 3 is a timer diagram illustrating flag settings; 
     FIG. 4 is a timer diagram for the region of hardware timer rollover; 
     FIG. 5 is a flow chart representing a TPU program for guaranteeing coherency for a CPU timer value request; and 
     FIG. 6 is a flow chart representing a TPU program for guaranteeing coherency for an input capture function. 
    
    
     DESCRIPTION OF THE INVENTION 
     Referring to FIG. 1, a microprocessor 10, which may for example be a model M68332 manufactured by Motorola Semiconductor Products, Inc., Phoenix, Ariz., which includes a central processor unit CPU, a timer processor unit TPU, an internal module bus IMB, a random access memory RAM, a serial peripheral interface SPI, a clock, and other support modules including a chip select module CS, an external bus interface EBI, a system protect module SP, and a test module TEST. The TPU is a powerful subsystem in the processor and is a 16 bit timer peripheral which provides 16 microcoded channels for performing time-related functions. 
     FIG. 2 shows further details of the TPU which includes the timer channels, two 16-bit free running timers TCR1 and TCR2 that all timer channels can synchronize to, a micro engine programmed to operate the desired functions, a scheduler for queuing functions according to priority, and a host interface. Either one of the timers is software selected for operation with a software extension to generate a timer value larger than 16 bits. Since the registers are 16 bits, the addition of a software extension to the hardware register can result in a total timer value of 32 bits; alternatively only part of the extension register may be used if a smaller timer value, say, 24 bits is desired. Since only one of the timers is selected for operation in the extended mode, only one timer, TCR, is referred to hereinafter. 
     The host interface includes a 16 bit upper word register 20 which is incremented approximately when the selected timer TCR rolls over to a clear value, a timer upper word register 22 which receives a buffered value of the upper word, and a timer lower word register 26 which receives a value from the timer when timer access is commanded. The particular time that the upper word register is incremented in response to a timer command or request is determined by the scheduler in view of the priority of other instructions which are competing for processing. 
     Upon receiving a timer value request, the TPU immediately captures the timer value and stores it in the timer lower word register 26, and stores the contents of the upper word register 20 in the timer upper word register 22. Because the incrementing of the upper word register may be delayed for a short time after the rollover of the hardware timer, the timer upper and lower words in the interface may be non-coherent or out of synchronization. Two timer channel flags are used in determining whether there is non-coherence. FIG. 3 represents the changing value of the hardware timer as a circle increasing in value clockwise starting at $0000 at the top, $8000 at the bottom, and $FFFF at the top just before changing to $0000. As a matter of convention, the timer is said to be positive as it is advancing from $0000 to $8000 and negative as it further proceeds to $FFFF. A first flag, here called an increment flag, is set to a value of 1 at $8000 and is cleared when the second register increments at or just after $0000. A second flag, here called a rollover flag, is set just a few counts, say, 20 counts before rollover at point P in the timer cycle and is cleared a few counts after rollover at point Q. The rollover flag is set only when the timer is near rollover and since non-coherency can occur only in the region of rollover, a coherency check is not necessary when this flag is clear. 
     A more detailed illustration of events at the time of rollover is shown in FIG. 4. The timer TCR is advanced one count at every fourth microcycle of the system clock. Thus the timer value changes from $FFFF to $0000 to $0001. Operations which can be executed immediately are match and capture and a corresponding flag is set for each. For an exemplary scenario, events A, B and C occur in sequence. Event A is a rising edge of Input 1 signal and event C is a rising edge of Input 2 signal. The transition detect is asserted at each of those times, the TCR value is immediately captured in a register, and a flag is set to request servicing of the input capture. Event B occurs when the count reaches $0000 and a timer match is asserted for incrementing the second register. The function triggered by event A is still running when event C occurs, and the servicing of events B and C is delayed. After event A is done, the TPU may start event C next due to priority scheduling. The capture register for event C will have captured the lower word value of $0001, however it sees the old value for the timer upper word because event B has not run yet to increment the upper word. Thus this non-coherent condition must be recognized and corrected by incrementing the buffered value of the upper word. 
     In still another scenario, not illustrated, a timer match is asserted at $0000 and serviced immediately, and an input capture event occurring at about the same time is serviced next; due to subtleties of bus timing, if a timer value is written in one microcycle by one timer channel and read in the next microcycle by another timer channel, the old value is read. In that case, the lower word will be read as $FFFF and the upper word will have already been incremented. Thus it is necessary to recognize this condition and decrement the buffered value of the upper word. This occurs, for example, for the case of an input capture or an output compare function. On the other hand, a CPU request for the timer value is handled by one channel and the timing anomaly does not occur. 
     The flow charts of FIGS. 5 and 6 represent programs contained in microcode in the TPU for quaranteeing coherency. The description of the flow charts contains numerals in angle brackets &lt;nn&gt; which refer to functions in blocks with corresponding reference numerals. FIG. 5 is directed to an event wherein the CPU requests the timer value. When that request is received at the host interface the micro engine causes the TCR value to be written to the timer lower word value register in the host interface &lt;30&gt;. The upper word register in the interface will already contain the upper word as of the last update. If the lower word value is negative (between $8000 and $FFFF) &lt;32&gt; the upper word is copied into the timer upper word register and the timer value is the upper word concatenated with the lower word &lt;34&gt;. If the lower word is positive &lt;32&gt; and the increment flag is 0 &lt;36&gt; the block 34 instruction pertains, but if the increment flag is 1, one is added to the value of the upper word and written to the timer upper word register and then concatenated with the lower word &lt;38&gt;. 
     FIG. 6 is directed to an input capture operation, although the logic is the same for an output compare operation. When an edge occurs on an input signal the TCR value is captured and the lower word is set to that value &lt;40&gt;. If the rollover flag is clear &lt;42&gt;, the coherency test is bypassed and the normal input capture procedure continues &lt;43&gt;. If the rollover flag is set, and the lower word is negative &lt;44&gt;, the increment flag is tested. If it is clear &lt;46&gt;, the value of the upper word is decreased by one and written to the timer lower word register, and the capture time is set at the buffeted upper word concatenated with the lower word &lt;48&gt;. If the increment flag is 1, the timer words are coherent and the input capture procedure continues &lt;43&gt;. Where the lower word is positive &lt;44&gt;, and the increment flag is not clear &lt;50&gt;, the value of the upper word is increased by one and concatenated with the lower word &lt;52&gt; to yield the capture time. If the increment flag is 0 &lt;50&gt; the input capture procedure continues &lt;43&gt;. 
     It will thus be seen that the hardware timer of a microprocessor is readily extended in software by incrementing a second register for each rollover of the hardware register and assuring that the two registers are coherent even at the time of rollover and incrementing. The coherency is assured for either a CPU read request or a timer command by a simple algorithm embodied in microcode in the timer processor unit, there being no additional burden to the CPU.