TM4C123 Using PLL

From EdWiki

Revision as of 05:25, 25 June 2018 by Jshankar (Talk | contribs)

Using PLL

TM4C123GH6PM MCU has four different clock sources:

  1. Precision Internal Oscillator (PIOSC) : 16 MHz.
  2. Main Oscillator (MOSC) : It can use an external clock source or an external crystal.
  3. Low-Frequency Internal Oscillator (LFIOSC) : An on-chip internal 30 kHz Oscillator used for Deep-Sleep power-saving modes.
  4. Hibernate RTC Oscillator (RTCOSC) : It can be configured to be the 32.768 KHz external oscillator source from the Hibernation (HIB) module or the HIB Low-Frequency clock source (HIB LFIOSC), which is intended to provide the system with a real-time clock source.

Block Diagram

Block Diagram of the main clock tree on the TM4C including the PLL

The system clock is generated by a PLL that can be driven by any crystals or oscillators running between 5 and 25 MHz. The output frequency of the PLL is always 400 MHz, and it is independent on the input clock sources.

Two clock sources, Main OSC (MOSC) and Precision Internal osc (PIOSC) 16 MHz, can work as a clock source for the PLL, and this source can be selected via the MUX. Two multiplexers (MUXs) are used to select different clock sources, and two ways can be used to create a system clock to be used by the CPU:

  1. One way is to use the Phase-Locked Loop (PLL) clock generator that needs a clock source as the input source to create this system clock.
  2. Another way is to directly use any one of four clock sources, and this can be selected via a MUX. An easy way is to use Precision Internal OSC (16 MHz) divided by 4 to get a 4-MHz system clock.

When using the PLL, the output frequency of 400 MHz is pre-divided by 2 (becomes 200 MHz) before the user’s divisor is applied. Users can modify this 200-MHz system clock by adding different dividing factors in the SYSDIV in their program to use a lower-frequency system clock. The selected clock source can avoid the SYSDIV and USESYSDIV dividing operations via BYPASS for both MUXs and can be directly sent out as the system clock.

Two registers, Run-Mode Clock Configuration (RCC) register and Run-Mode Clock Configuration 2 (RCC2) register, provide controls for the system clock. The RCC2 register is used to provide additional control parameters that offer additional encodings over the RCC register. These registers control the following clock functionality:

  • Source of clocks in sleep and deep-sleep modes
  • System clock derived from PLL or other clock source
  • Enable or disable the oscillators and PLL
  • Clock divisors
  • Crystal input selection

Run-Mode Clock Configuration (SYSCTL_RCC_R)

Run-Mode Clock Configuration RCC

Bit Function
0 MOSCDIS 0: The main oscillator is enabled
1: The main oscillator is disabled—Default
5-4 OSCSRC Oscillator Source Selection:
0x0: Main Oscillator (MOSC)
0x1: Precision Internal Oscillator (PIOSC)—Default
0x2: Precision Internal Oscillator/4 (PIOSC/4)
0x3: Low-Frequency Internal Oscillator (LFIOSC)
11 BYPASS 0: The system clock uses the PLL output clock divided by the
divisor specified by SYSDIV (bits 26–23 in this register)
1: The system clock uses the OSC source and divided by the
divisor specified by SYSDIV (bits 26–23 in this register)
13 PWRDN 0: The PLL is operating normally
1: The PLL is powered down. Make sure that another clock
source is functioning and that the BYPASS bit is set before
setting this bit
22 USESYSDIV 0: The system clock is used undivided
1: The system clock divider is used for the system clock.
The system clock divider is forced to be used when the PLL is
selected as the source
26-23 SYSDIV System Clock Divisor
Specifies which divisor is used to generate the system clock from
either the PLL output or from the oscillator source, depending on
how the BYPASS bit in this register is configured.
27 ACG 0: The Run-Mode Clock Gating Control (RCGCn) registers are
used when the microcontroller enters a sleep mode
1: The SCGCn or DCGCn registers are used to control the clocks
distributed to the peripherals when the microcontroller is in a
sleep mode.

In the RCC register, the SYSDIV field specifies which divisor is used to generate the system clock from either the PLL output or the oscillator source. When using the PLL, the VCO frequency of 400 MHz is pre-divided by 2 before the divisor is applied. The XTAL (bits 6-10) field specifies Crystal Frequency and is given in the following table.

XTAL Crystal Freq (MHz) XTAL Crystal Freq (MHz) XTAL Crystal Freq (MHz)
0x4 3.579545 MHz 0xC 6.144 MHz 0x14 14.31818 MHz
0x5 3.6864 MHz 0xD 7.3278 MHz 0x15 16.0 MHz
0x06 4 MHz 0xE 8 MHz 0x16 16.384 MHz
0x7 4.096 MHz 0xF 8.192 MHz 0x17 18.0 MHz
0x8 4.9152 MHz 0x10 10.0 MHz 0x18 20.0 MHz
0x9 5 MHz 0x11 12.0 MHz 0x19 24.0 MHz
0xA 5.12 MHz 0x12 12.288 MHz 0x1A 25.0 MHz
0xB 6 MHz (reset value) 0x13 13.56 MHz others reserved

Run-Mode Clock Configuration 2 (SYSCTL_RCC2_R)

Run-Mode Clock Configuration RCC2

Address 31 30 28-23 13 11 6-4 NAME

Raw Interrupt Status (RIS)

Raw Interrupt Status (RIS)

Programming the PLL

The Main Oscillator (MOSC) for the TM4C on the evaluation board is 16 MHz. This means the reference clock (Ref Clk) input to the phase/frequency detector will be 16 MHz. For a 16 MHz crystal, we set the XTAL bits to 10101 (0x15). We use RCC2 because it provides more options

  1. Configure the system to use RCC2 for advanced features.
  2. Set BYPASS2 (bit 11). At this point the PLL is bypassed and there is no system clock divider.
  3. Specify the crystal frequency in the four XTAL bits. The OSCSRC2 bits are cleared to select the main oscillator as the oscillator clock source.
  4. Clear PWRDN2 (bit 13) to activate the PLL.
  5. Configure and enable the clock divider using the 7-bit SYSDIV2 field. If the 7-bit SYSDIV2 is n, then the clock will be divided by n+1. To get the desired 80 MHz from the 400 MHz PLL, we need to divide by 5. So, we place a 4 into the SYSDIV2 field.
  6. Wait for the PLL to stabilize by waiting for PLLRIS (bit 6) in the SYSCTL_RIS_R to become high.
  7. Connect the PLL by clearing the BYPASS2 bit.

TM4C123 PLL Source Code