Lecture 6 Timers NCHUEE 720A Lab Prof. Jichiang Tsai DMTimer The timer module contains a free running upward counter with auto reload capability on overflow The timer counter can be read and written in real-time The module includes compare logic to allow an interrupt event While counting On a programmable counter matching value A dedicated output signal can be pulsed or toggled on overflow and match event. This output offers a timing stamp trigger signal or PWM (pulse-width modulation) signal sources A output signal can be used for general purpose PORGPOCFG Directly driven by bit 14 of the TCLR register NCHUEE 720A Lab Prof. Jichiang Tsai DMTimer (cont.) A dedicated input signal is used to trigger automatic timer counter capture and interrupt event A programmable clock divider (prescaler) allows reduction of the timer input clock frequency All internal timer interrupt sources are merged in one module interrupt line and one wake-up line On programmable input signal transition type Each internal interrupt sources can be independently enabled/disabled This module is controllable through the OCP peripheral bus Two clock domains are managed inside this module Resynchronization is done by special logic between the OCP clock domain and the Timer clock domain At reset, synchronization logic allows utilization of all ratios between the OCP clock and the Timer clock NCHUEE 720A Lab Prof. Jichiang Tsai DMTimer (cont.) Write-posted mode is used to improve module access latency By setting the POSTED bit of the System Control Register (TSCR) OCP write command is granted before write process complete in the timer clock domain A drawback of this mode is that full-resynchronization path is used with access latency performance impact in terms of OCP clock cycles Observe write process completion (synchronization) at the software level by reading independent write posted status bits in the Write Posted Status Register (TWPS) The timer consists of the following features: Counter timer with compare and capture modes Auto-reload mode & Start-stop mode Programmable divider clock source & 16-32 bit addressing NCHUEE 720A Lab Prof. Jichiang Tsai DMTimer (cont.) “On the fly” read/write registers Interrupts generated on overflow, compare and capture Interrupt enable & Wake-up enable (only for Timer0) Write posted mode & OCP interface compatible Dedicated input trigger for capture mode and dedicated output trigger/PWM signal Dedicated output signal for general purpose use PORGPOCFG The Timer resolution and interrupt period are dependent on the selected input clock and clock prescale value NCHUEE 720A Lab Prof. Jichiang Tsai Timer Block Diagram NCHUEE 720A Lab Prof. Jichiang Tsai Timer Connectivity Attributes NCHUEE 720A Lab Prof. Jichiang Tsai Timer Clock and Reset Management Each DMTimer[2–7] functional clock is selected Within the PRCM Using the CLKSEL_TIMERx_CLK register The 24-MHz (typ) system clock (CLK_M_OSC) The PER PLL generated 32.768 KHz clock (CLK_32KHZ) The TCLKIN external timer input clock The DMTimer 0 functional clock is fixed Use the internal 32KHz RC Clock (CLK_RC32K) NCHUEE 720A Lab Prof. Jichiang Tsai Timer Pin List The timer PIEVENTCAPT input and PORTIMERPWM output signals are muxed onto a single TIMER I/O pad The pad direction (and hence the pin function) are controlled from within the DMTimer module Using the PORGPOCFG signal as an output enable NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes The general-purpose timer supports 3 functional modes Timer mode, Capture mode and Compare mode By default, after reset, the capture and compare modes are disabled Timer Mode The timer can be started and stopped at any time The Timer Counter Register (TCRR) can be loaded when stopped or on the fly (while counting) Through the Timer Control Register (TCLR ST bit) Loaded directly by a TCRR Write access with the new timer value TCRR can also be loaded with the value held in the Timer Load Register TLDR by a trigger register (TTGR) Write access The TCRR loading is done regardless the TTGR written value. The TCRR value can be read when stopped or captured on the fly by a TCRR Read access NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes (cont.) When the module’s reset is asserted When the timer is stopped, TCRR is frozen The TCRR is reloaded with the Timer Load Register (TLDR) value after a counting overflow Not recommended to put the overflow value (FFFF FFFFh) in TLDR The counter is stopped after counting overflow Counter value remains at zero When the auto-reload mode is enabled (TCLR AR bit = 1) It can be restarted from the frozen value unless reloaded with a new value In the one shot mode (TCLR AR bit = 0) The timer is stopped and the counter value is cleared to “0” The timer is maintained in stop after reset is released. Because it can lead to undesired results An interrupt can be issued on overflow if the overflow interrupt enable bit is set NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes (cont.) In the timer Interrupt Enable Register (IRQENABLE_SET OVF_IT_FLAG bit = 1) A dedicated output pin (PORTIMERPWM) is programmed through TCLR (TRG and PT bits) To generate one positive pulse (prescaler duration) or to invert the current value (toggle mode) when an overflow occurs NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes (cont.) Capture Mode The value in TCRR can be captured and saved in TCAR1 or TCAR2 when a transition is detected on the module input pin PIEVENTCAPT The edge detection circuitry monitors transitions on PIEVENTCAPT Rising transition, falling transition or both can be selected in TCLR (TCM bit) to trigger the timer counter capture The module sets the IRQSTATUS (TCAR_IT_FLAG bit) when an active transition is detected Function of the mode is selected in TCLR through the field CAPT_MODE The counter value TCRR is stored in one of the timer capture registers If TCLR’s CAPT_MODE field is 0, on the first enabled capture event, the value of the counter register is saved in TCAR1 register All the next events are ignored until the detection logic is reset or the interrupt status register is cleared on TCAR’s position No update on TCAR1 and no interrupt triggering NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes (cont.) The TCM value is 01 and CAPT_MODE is 0 Only rising edge of the PIEVENTCAPT will trigger a capture in TCAR and only TCAR1 will update NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes (cont.) If TCLR’s CAPT_MODE field is 1, on the first enabled captured event, the counter value is saved in TCAR1 register The edge detection logic is reset On the second enabled capture event, the value of the counter register is saved in TCAR2 register until the detection logic is reset or the interrupt status register is cleared on TCAR’s position All the other events are ignored No update on TCAR1/2 and no interrupt triggering This mechanism is useful for period calculation of a clock if that clock is connected to the PIEVENTCAPT input pin When the active capture interrupt is served TCAR_IT_FLAG bit of IRQSTATUS (previously 1) is cleared A new capture is enabled The timer functional clock (input to prescaler) is used to sample the input pin (PIEVENTCAPT) NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes (cont.) An interrupt can be issued on transition detection Input pulse can be detected as pulse time is above functional clock period If the capture interrupt enable bit is set in the Timer Interrupt Enable Register IRQENABLE_SET (TCAR_IT_FLAG bit) Compare Mode The timer value (TCRR) is permanently compared to the value held in timer match register (TMAR) When TCRR and TMAR values match, an interrupt can be issued When Compare Enable TCLR (CE bit) is set to 1 TMAR value can be loaded at any time (timer counting or stop) If the IRQENABLE_SET (MAT_EN_FLAG bit) is set The dedicated output pin (PORTIMERPWM) can be programmed through TCLR (TRG and PT bits) To generate one positive pulse (TIMER clock duration) or to invert the current value (toggle mode) when an overflow and a match occur NCHUEE 720A Lab Prof. Jichiang Tsai Functional Modes (cont.) The TCM value is 01 and CAPT_MODE is 1 Only rising edge of the PIEVENTCAPT will trigger a capture in TCAR1 on first enabled event TCAR2 will update on the second enabled event NCHUEE 720A Lab Prof. Jichiang Tsai Prescaler A prescaler counter can be used to divide the timer counter input clock frequency The prescaler is enabled when TCLR bit 5 is set (PRE) The 2n division ratio value (PTV) can be configured in TCLR The prescaler counter is reset when the timer counter is stopped or reloaded on the fly NCHUEE 720A Lab Prof. Jichiang Tsai Pulse-Width Modulation The timer can be configured to provide a programmable pulse-width modulation (PORTIMERPWM) output The output pin can be configured to toggle on specified event TCLR (TRG bits) determines on which register value the pin toggles Either overflow or match can be used to toggle the PORTIMERPWM pin, when a compare condition occurs In case of overflow and match mode, the match event will be ignored from the moment the mode was setup until the first overflow event occurs The TCLR (SCPWM bit) can be programmed to set or clear the PORTIMERPWM output signal While the counter is stopped or the triggering is off only Allows fixing a deterministic state of the output as modulation is stopped 0x0 = Clear PORTIMERPWM pin and select positive pulse for pulse mode 0x1 = Set PORTIMERPWM pin and select negative pulse for pulse mode NCHUEE 720A Lab Prof. Jichiang Tsai Pulse-Width Modulation (cont.) The modulation is synchronously stopped when TRG bit is cleared and overflow occurred The TLDR and TMAR registers must keep values smaller than the overflow value (FFFF FFFFh) with at least 2 units In case the PWM trigger events are both overflow and match, the difference between the values kept in TMAR register and the value in TLDR must be at least 2 units As match event is used, the compare mode TCLR (CE) must be set The internal overflow pulse is set each time (FFFF FFFFFh – TLDR + 1) value is reached Also set when the counter reaches TMAR register value According to TCLR (TRG and PT bits) programming value, the timer provides pulse or PWM on the output pin (PORTIMERPWM) PT: Pulse or toggle mode on PORTIMERPWM output pin NCHUEE 720A Lab Prof. Jichiang Tsai Pulse-Width Modulation (cont.) TCLR (SCPWM bit) is cleared to 0 NCHUEE 720A Lab Prof. Jichiang Tsai Pulse-Width Modulation (cont.) TCLR (SCPWM bit) is set to 1 NCHUEE 720A Lab Prof. Jichiang Tsai Timer Counting Rate The timer counter is composed of a prescaler stage and a timer counter Prescaler stage is clocked with the timer clock Acts as a clock divider for the timer counter stage The ratio can be managed by accessing the ratio definition field of the control register (PTV and PRE of TCLR) NCHUEE 720A Lab Prof. Jichiang Tsai Timer Counting Rate (cont.) The timer rate is defined by The value of the prescaler fields (PRE and PTV of TCLR register) The value loaded into the Timer Load Register (TLDR) (FFFF FFFFh – TLDR + 1) × timer Clock period × Clock Divider (PS) With timer Clock period = 1/ timer Clock frequency and PS = 2(PTV + 1) If we consider a timer clock input of 32 kHz, with a PRE field equal to 0, the timer output period is: NCHUEE 720A Lab Prof. Jichiang Tsai Accessing Registers All registers are 32-bit wide Accessible via OCP interface with 16-bit or 32-bit OCP access The 32-bit registers write update in 16 bits access must be LSB16 first and the second write access must be MSB16 The module allows skipping the MSB access if the user does not need to update the 16 MSB bits of the register The write operation on any functional register (TCLR, TCRR, TLDR, TTGR and TMAR) must be complete Only for registers TIDR, TIOCP_CFG, IRQSTATUS_RAW, IRQSTATUS, IRQENABLE_SET, IRQENABLE_CLR, IRQWAKEEN and TSICR The MSB must be written even if the MSB data is not used The registers write is done synchronously with OCP clock, by the host, using the OCP bus protocol TLDR, TCRR, TCLR, TIOCP_CFG, IRQSTATUS, IRQENABLE_SET, IRQENABLE_CLR, IRQWAKEEN, TTGR, TSICR and TMAR NCHUEE 720A Lab Prof. Jichiang Tsai Accessing Registers (cont.) The counter register (TCRR) is a 32-bit “atomic datum” 16-bit capture is done on the 16-bit LSB first to allow atomic LSB16 + MSB16 capture Atomic capture is also performed for the TCAR1 and TCAR2 registers as they may change due to internal processes A choice between the two synchronization modes Posted/non-posted Taking into account the frequency ratio and the stall periods that can be supported by the system Without impacting the global performance The posted mode selection applies only to functional registers that require synchronization on/from timer clock domain For write operation the registers affected by this selection are: TCLR, TLDR, TCRR, TTGR and TMAR NCHUEE 720A Lab Prof. Jichiang Tsai Accessing Registers (cont.) For read operation the register affected by this posted/nonpostedselection are: TCRR, TCAR1 and TCAR2 The OCP clock domain synchronous registers are not affected by the posted/non-posted mode selection TIDR, TIOCP_CFG, TISTAT, IRQSTATUS, IRQSTATUS_RAW, IRQENABLE_SET, IRQENABLE_CLR, IRQWAKEEN, TWPS and TSICR The write/read operation is effective and acknowledged (command accepted) after one OCP clock cycle from the command assertion Posted Mode Used when freq (timer) < freq (OCP)/4 It uses a posted-write scheme to update any internal register The write transaction is immediately acknowledged on the OCP interface The effective write operation will occur later due to a resynchronisation in the timer clock domain Not stalling either the interconnect system, or the CPU NCHUEE 720A Lab Prof. Jichiang Tsai Accessing Registers (cont.) The drawback of this automatic update mechanism is Assumes a given relationship between the OCP interface frequency and the timer functional frequency Non-Posted Mode Used regardless of the frequency range Uses a non posted-write scheme to update any internal register Recommended frequency is: freq (timer) >= freq (OCP)/4 Write transaction will not be acknowledged on the OCP interface, until the effective write operation occurs, after the resynchronisation Both the interconnect system and the CPU are stalled during this period The latency of the interrupt serving is increased An interconnect logic, including time-out logic to detect erroneous transactions, can generate an unwanted system abort event A register read following a write to the same register is always coherent NCHUEE 720A Lab Prof. Jichiang Tsai TIMER Registers NCHUEE 720A Lab Prof. Jichiang Tsai WATCHDOG The watchdog timer is an upward counter capable of Generating a pulse on the reset pin and an interrupt to the device system modules following an overflow condition. The watchdog timer serves resets to the PRCM module Also serves watchdog interrupts to the host ARM The watchdog timer can be accessed, loaded, and cleared by registers Through the L4 interface Connects to a single target agent port on the L4 interconnect It have the 32-kHz clock for their timer clock input The reset of the PRCM module causes warm reset of the device The default state of the watchdog timer is enabled and not running The main features of the watchdog timer controllers are L4 slave interface support NCHUEE 720A Lab Prof. Jichiang Tsai WATCHDOG (cont.) 32-bit data bus width & 32-/16-bit access supported 11-bit address bus width & Write nonposted transaction mode only Free-running 32-bit upward counter Programmable divider clock source (2n where n = 0-7) On-the-fly read/write register (while counting) Subset programming model of the GP timer The watchdog timers are reset either on power-on or after a warm reset before they start counting Reset or interrupt actions upon a timer overflow condition The watchdog timer generates a reset or an interrupt in its hardware integration NCHUEE 720A Lab Prof. Jichiang Tsai Power Management There are two clock domains in the watchdog timers Functional clock domain WDTi_FCLK is a 32 kHz watchdog timer functional clock Interface clock domain WDTi_ICLK is a 125 MHz watchdog timer interface clock Used to clock the watchdog timer internal logic Used to synchronize the watchdog timer L4 port to the L4 interconnect All accesses from the interconnect are synchronous to WDTi_ICLK. The clocks to the watchdog timers are always On The clocks cannot be turned off, even if the timer is not being used NCHUEE 720A Lab Prof. Jichiang Tsai Timer Operation Based on an upward 32-bit counter with a prescaler The counter overflow is signaled through two signals The interrupt generation mechanism is controlled through By accessing the WDT_WCLR[4:2] PTV bit field and the WDT_WCLR[5] PRE bit of the control register (WDT_WCLR) The current timer value can be accessed on-the-fly WDT_WIRQENSET/WDT_WIRQENCLR and WDT_WIRQSTAT The prescaler ratio can be set from 1 to 128 A simple reset signal and an interrupt signal Both active low By reading the watchdog timer counter register (WDT_WCRR) Modified by accessing the watchdog timer load register WDT_WLDR (no on-the-fly update) NCHUEE 720A Lab Prof. Jichiang Tsai Timer Operation (cont.) Or reloaded by following a specific reload sequence on the watchdog timer trigger register (WDT_WTGR) A start/stop sequence to the timer start/stop register (WDT_WSPR) can start and stop the watchdog timers NCHUEE 720A Lab Prof. Jichiang Tsai Overflow/Reset Generation The watchdog timers are enabled after reset To get the default reset values, software must read the corresponding WDT_WCLR[4:2] PTV bit field and the 32-bit register to retrieve the static configuration of the module When the counter register (WDT_WCRR) overflows, an active-low reset pulse is generated to the PRCM module This RESET pulse causes the PRCM module to generate global WARM reset of the device Also driven out of the device through the WD_OUT pin This pulse is one prescaled timer clock cycle wide Occurs at the same time as the timer counter overflow NCHUEE 720A Lab Prof. Jichiang Tsai Overflow/Reset Generation (cont.) After reset generation, the counter is automatically reloaded with the value stored in the load register (WDT_WLDR) The prescaler is reset (the prescaler ratio remains unchanged) When the reset pulse output is generated, the timer counter begins incrementing again NCHUEE 720A Lab Prof. Jichiang Tsai Start/Stop Sequence Through the start/stop register (WDT_WSPR) To disable the timer Write XXXX AAAAh in WDT_WSPR Write XXXX 5555h in WDT_WSPR Poll for posted write to complete using WDT_WWPS.W_PEND_WSPR To enable the timer Write XXXX BBBBh in WDT_WSPR Write XXXX 4444h in WDT_WSPR Poll for posted write to complete using WDT_WWPS.W_PEND_WSPR Poll for posted write to complete using WDT_WWPS.W_PEND_WSPR To modify the timer counter value, prescaler ratio, delay configuration value, or the load value The watchdog timer must be disabled by the start/stop sequence NCHUEE 720A Lab Prof. Jichiang Tsai Interrupt Generation When an interrupt source occurs The interrupt status bit (the WDT_WIRQSTAT[0] EVENT_OVF or WDT_WIRQSTAT[1] EVENT_DLY bit) is set The output interrupt line (WDTi_IRQ) is asserted (active low) Writing 1 to the enable bit (the status is already set at 1) also triggers the interrupt in the normal order (enable first, status next) The pending interrupt event is cleared when the set status bit is overwritten by a value of 1 By a write command in the WDT_WIRQSTAT register When status (the EVENT_xxx bit) and enable (the xx_IT_ENA bit) flags are set to 1 Reading the WDT_WIRQSTAT register and writing the value back allows a fast interrupt acknowledge process The watchdog timer issues an overflow interrupt NCHUEE 720A Lab Prof. Jichiang Tsai Interrupt Generation (cont.) If this interrupt is enabled in the watchdog interrupt enable register (WDT_WIRQENSET[0] OVF_IT_ENA = 1) When the overflow occurs, the interrupt status bit (the WDT_WIRQSTAT[0] EVENT_OVF bit) is set to 1 The output interrupt line (WDT_IRQ) is asserted (active low) This interrupt can be disabled When status (EVENT_OVF) and enable (OVF_IT_ENA) flags are set to 1 By setting the WDT_WIRQENCLR[0] OVF_IT_ENA bit to 1 The watchdog can issue the delay interrupt If this interrupt is enabled in the interrupt enable register (WDT_WIRQENSET[1] DLY_IT_ENA = 1) When the counter is running and the counter value matches the value stored in the delay configuration register WDT_WDLY NCHUEE 720A Lab Prof. Jichiang Tsai Interrupt Generation (cont.) The corresponding interrupt status bit is set in WDT_WIRQSTAT the output interrupt line is asserted (active low) This interrupt can be disabled When the flag (EVENT_DLY) and enable (DLY_IT_ENA) bits are 1 in the WDT_WIRQSTAT and WDT_WIRQENSET registers, respectively By setting the WDT_WIRQENCLR[1] DLY_IT_ENA bit to 1 The WDT_WDLY register is used to specify the value of the delay configuration register. The delay time to interrupt is the difference between the reload value stored in the counter load register (WDT_WLDR) and the programmed value in this register (WDT_WDLY) Delay time period = (WDT_WDLY – WDT_WLDR + 1) × Timer clock period × Clock divider If the counter value (WDT_WCRR) reaches the programmed value (WDT_WDLY), an interrupt occurs NCHUEE 720A Lab Prof. Jichiang Tsai