I.MX31 Using CLKO

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

I.MX31 Using CLKO

I.MX31 Using CLKO

Using Clock Out - i.MX31PDK

i.MX31 has a clock out pin that can be used to output internal clock signals.
On the i.MX31PDK the clock out pin is accessible on TP1.

640px-CLKO_sch.JPG


The clock out is controlled by register COSR (Clock Out Source Register) at address 0x53F8001C.
There three fields on COSR:

FieldDescription
CLKOEN (bit 9)Clock output enable bit
CLKOUTDIV (bits 8-6)Clock output divide factor
CLKOSEL (bits 3-0)These bits select which clock is to be reflected on the clock output CKO.

Here are the values each field may assume:

CLKOEN ValuesCLKOUTDIV ValuesCLKOSEL Values
1 clock output IO pin is enabled
 0 clock output IO pin disabled 
000 => 1
 001 => 2
 010 => 4
 011 => 8
 100 => 16
 
0000 => mpl_dpdgck_clk 
0001 => ipg_clk_ccm 
0010 => upl_dpdgck_clk 
0011 => pll_ref_clk 
0100 => fpm_ckil512_clk 
0101 => ipg_clk_ahb_arm 
0110 => ipg_clk_arm 
0111 => spl_dpdgck_clk 
1000 => ckih 
1001 => ipg_clk_ahb _emi_clk 
1010 => ipg_clk_ipu_hsp 
1011 => ipg_clk_nfc_20m 
1100 => ipg_clk_perclk_uart1 
1101 => ref_cir1 (ref_cir_gateload) 
1110 => ref_cir2 (ref_cir_intrcload) 
1111 => ref_cir3 (ref_cir_path)


Based on the Clock Generation Scheme, we can play with COSR register using the
Register Accessing application to test Clock out pin by checking some i.MX31 internal clocks.

Clk_Generation.JPG


Testing

First we can check the value of CKIH, it should be 26MHz as a 26MHz is connected to that pin.
We can write 0x208 to COSR. [CLKOEN = 1| CLKOUTDIV = 1| CLKOSEL = ckih]

root@freescale /home$ ./io2 0x53f8001c w 0x208 
/dev/mem opened. 
Memory mapped on address 0x4001f000. 
Written: 0x208

256px-26MHz.jpg

Then we can check pll_ref_clock.
We can write 0x203 to COSR. [CLKOEN = 1| CLKOUTDIV = 1| CLKOSEL = pll_ref_clk]

root@freescale /home$ ./io2 0x53f8001c w 0x203 
/dev/mem opened. 
Memory mapped on address 0x4001f000. 
Written: 0x203

As expected, pll_ref_clock is equals to CKIH because CCMR[PCRS]=10.

  • Reading CCMR to confirm CCMR[PCRS]=10:
root@freescale /home$ ./io2 0x53f80000 
/dev/mem opened. 
Memory mapped on address 0x4001f000. 
Address value 0x53F80000 (0x4001f000): 0x174B0D7D

The pll_ref_clock inputs to MCU PLL and Serial PLL. We can check MCU PLL and Serial PLL configurations on MPCTL (0x53F80010) and SPCTL (0x53F80010) registers respectively.

  • Reading MPCTL and SPCTL:
root@freescale /home$ ./io2 0x53f80010 
/dev/mem opened. 
Memory mapped on address 0x4001f000. 
Address value 0x53F80010 (0x4001f010): 0x33280C
root@freescale /home$ ./io2 0x53f80018 
/dev/mem opened. 
Memory mapped on address 0x4001f000. 
Address value 0x53F80018 (0x4001f018): 0x2072356

Determine the PLL multiplication factor from MPCTL and SPCTL:

- MPCTL: PD = 1 (0000) | MFD = 52 (0000110011) | MFI = 10 (1010) | MFN = 12 (0000001100) 
- MCPTL Multiplication Factor: 20,46153 
- mpl-dpdgck-clk = 20,46153 * 26MHz = 532 MHz
- SPCTL: PD = 1 (0000) | MFD = 520 (1000000111) | MFI = 8 (1000) | MFN = -170 (1101010110) 
- SCPTL Multiplication Factor: 15,3461538 
- spl-dpdgck-clk = 15,3461538 * 26MHz = 399 MHz

Finally we can output mpl-dpdgck-clk and spl_dpdgck_clk values to check the calculations above.
We can write 0x300 to COSR for mpl-dpdgck-clk. [CLKOEN = 1| CLKOUTDIV = 16| CLKOSEL = mpl_dpdgck_clk]
And 0x307 for spl-dpdgck-clk. [CLKOEN = 1| CLKOUTDIV = 16| CLKOSEL = spl_dpdgck_clk]

root@freescale /home$ ./io2 0x53f8001c w 0x300 
/dev/mem opened. 
Memory mapped on address 0x4001f000. 
Written: 0x300
root@freescale /home$ ./io2 0x53f8001c w 0x307 
/dev/mem opened. 
Memory mapped on address 0x4001f000. 
Written: 0x307

256px-Mpl-dpdgck-clk.jpg

256px-Spl-dpdgck-clk.jpg

By multiplying the results above by 16 to compensate for CLKOUTDIV we have the expected results.


Tags (2)
%3CLINGO-SUB%20id%3D%22lingo-sub-1113915%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EI.MX31%20Using%20CLKO%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1113915%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CH1%20id%3D%22toc-hId-381506554%22%20id%3D%22toc-hId-381506554%22%20id%3D%22toc-hId-1297632720%22%3E%3CSPAN%20class%3D%22mw-headline%22%3EUsing%20Clock%20Out%20-%20i.MX31PDK%3C%2FSPAN%3E%3C%2FH1%3E%3CP%3Ei.MX31%20has%20a%20clock%20out%20pin%20that%20can%20be%20used%20to%20output%20internal%20clock%20signals.%3CBR%20%2F%3E%20On%20the%20i.MX31PDK%20the%20clock%20out%20pin%20is%20accessible%20on%20TP1.%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22640px-CLKO_sch.JPG%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22640px-CLKO_sch.JPG%22%20style%3D%22width%3A%20640px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F37811i3AA4B27F6F06D808%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22640px-CLKO_sch.JPG%22%20alt%3D%22640px-CLKO_sch.JPG%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%20The%20clock%20out%20is%20controlled%20by%20%3CA%20href%3D%22http%3A%2F%2Fwww.imxdev.org%2Fwiki%2Findex.php%3Ftitle%3DI.MX31_Using_CLKO%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%20style%3D%22text-decoration%3A%20underline%3B%22%20title%3D%22Powered%20by%20Text-Enhance%22%20target%3D%22_blank%22%3Eregister%3C%2FA%3E%20COSR%20(Clock%20Out%20Source%20Register)%20at%20address%200x53F8001C.%3CBR%20%2F%3E%20There%20three%20fields%20on%20COSR%3A%3C%2FP%3E%3CTABLE%20border%3D%221%22%20cellpadding%3D%225%22%20cellspacing%3D%225%22%20width%3D%2250%25%22%3E%3CTBODY%3E%3CTR%3E%3CTD%3EField%3C%2FTD%3E%3CTD%3EDescription%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3ECLKOEN%20(bit%209)%3C%2FTD%3E%3CTD%3EClock%20output%20enable%20bit%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3ECLKOUTDIV%20(bits%208-6)%3C%2FTD%3E%3CTD%3EClock%20output%20divide%20factor%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3ECLKOSEL%20(bits%203-0)%3C%2FTD%3E%3CTD%3EThese%20bits%20select%20which%20clock%20is%20to%20be%20reflected%20on%20the%20clock%20output%20CKO.%3C%2FTD%3E%3C%2FTR%3E%3C%2FTBODY%3E%3C%2FTABLE%3E%3CP%3EHere%20are%20the%20values%20each%20field%20may%20assume%3A%3C%2FP%3E%3CTABLE%20border%3D%221%22%20cellpadding%3D%225%22%20cellspacing%3D%225%22%20jive-data-cell%3D%22%7B%22%20color%3D%22%22%3E%3CTBODY%3E%3CTR%3E%3CTD%3ECLKOEN%20Values%3C%2FTD%3E%3CTD%3ECLKOUTDIV%20Values%3C%2FTD%3E%3CTD%3ECLKOSEL%20Values%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3E%3CPRE%20class%3D%22jive-pre%22%3E1%20clock%20output%20IO%20pin%20is%20enabled%0A%200%20clock%20output%20IO%20pin%20disabled%20%3C%2FPRE%3E%3C%2FTD%3E%3CTD%3E%3CPRE%20class%3D%22jive-pre%22%3E000%20%3D%26gt%3B%201%0A%20001%20%3D%26gt%3B%202%0A%20010%20%3D%26gt%3B%204%0A%20011%20%3D%26gt%3B%208%0A%20100%20%3D%26gt%3B%2016%0A%20%3C%2FPRE%3E%3C%2FTD%3E%3CTD%3E%3CPRE%20class%3D%22jive-pre%22%3E0000%20%3D%26gt%3B%20mpl_dpdgck_clk%20%0A0001%20%3D%26gt%3B%20ipg_clk_ccm%20%0A0010%20%3D%26gt%3B%20upl_dpdgck_clk%20%0A0011%20%3D%26gt%3B%20pll_ref_clk%20%0A0100%20%3D%26gt%3B%20fpm_ckil512_clk%20%0A0101%20%3D%26gt%3B%20ipg_clk_ahb_arm%20%0A0110%20%3D%26gt%3B%20ipg_clk_arm%20%0A0111%20%3D%26gt%3B%20spl_dpdgck_clk%20%0A1000%20%3D%26gt%3B%20ckih%20%0A1001%20%3D%26gt%3B%20ipg_clk_ahb%20_emi_clk%20%0A1010%20%3D%26gt%3B%20ipg_clk_ipu_hsp%20%0A1011%20%3D%26gt%3B%20ipg_clk_nfc_20m%20%0A1100%20%3D%26gt%3B%20ipg_clk_perclk_uart1%20%0A1101%20%3D%26gt%3B%20ref_cir1%20(ref_cir_gateload)%20%0A1110%20%3D%26gt%3B%20ref_cir2%20(ref_cir_intrcload)%20%0A1111%20%3D%26gt%3B%20ref_cir3%20(ref_cir_path)%0A%3C%2FPRE%3E%3C%2FTD%3E%3C%2FTR%3E%3C%2FTBODY%3E%3C%2FTABLE%3E%3CP%3E%3CBR%20%2F%3EBased%20on%20the%20Clock%20Generation%20Scheme%2C%20we%20can%20play%20with%20COSR%20register%20using%20the%20%3CBR%20%2F%3E%20Register%20Accessing%20application%20to%20test%20Clock%20out%20pin%20by%20checking%20some%20i.MX31%20internal%20clocks.%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Clk_Generation.JPG%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Clk_Generation.JPG%22%20style%3D%22width%3A%20402px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F37852i0CAF6451C4A4D77F%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Clk_Generation.JPG%22%20alt%3D%22Clk_Generation.JPG%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CH1%20id%3D%22toc-hId--1425947909%22%20id%3D%22toc-hId--1425947909%22%20id%3D%22toc-hId--509821743%22%3E%3CSPAN%20class%3D%22mw-headline%22%3E%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FH1%3E%3CH1%20id%3D%22toc-hId-1061564924%22%20id%3D%22toc-hId-1061564924%22%20id%3D%22toc-hId-1977691090%22%3E%3CSPAN%20class%3D%22mw-headline%22%3ETesting%20%3C%2FSPAN%3E%3C%2FH1%3E%3CP%3EFirst%20we%20can%20check%20the%20value%20of%20CKIH%2C%20it%20should%20be%2026MHz%20as%20a%2026MHz%20is%20connected%20to%20that%20pin.%3CBR%20%2F%3E%20We%20can%20write%200x208%20to%20COSR.%20%5BCLKOEN%20%3D%201%7C%20CLKOUTDIV%20%3D%201%7C%20CLKOSEL%20%3D%20ckih%5D%3C%2FP%3E%3CPRE%20class%3D%22jive-pre%22%3Eroot%40freescale%20%2Fhome%24%20.%2Fio2%200x53f8001c%20w%200x208%20%0A%2Fdev%2Fmem%20opened.%20%0AMemory%20mapped%20on%20address%200x4001f000.%20%0AWritten%3A%200x208%0A%3C%2FPRE%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22256px-26MHz.jpg%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22256px-26MHz.jpg%22%20style%3D%22width%3A%20256px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F37868i4FB16A331AC88023%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22256px-26MHz.jpg%22%20alt%3D%22256px-26MHz.jpg%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3EThen%20we%20can%20check%20pll_ref_clock.%3CBR%20%2F%3E%20We%20can%20write%200x203%20to%20COSR.%20%5BCLKOEN%20%3D%201%7C%20CLKOUTDIV%20%3D%201%7C%20CLKOSEL%20%3D%20pll_ref_clk%5D%3C%2FP%3E%3CPRE%20class%3D%22jive-pre%22%3Eroot%40freescale%20%2Fhome%24%20.%2Fio2%200x53f8001c%20w%200x203%20%0A%2Fdev%2Fmem%20opened.%20%0AMemory%20mapped%20on%20address%200x4001f000.%20%0AWritten%3A%200x203%0A%3C%2FPRE%3E%3CP%3EAs%20expected%2C%20pll_ref_clock%20is%20equals%20to%20CKIH%20because%20CCMR%5BPCRS%5D%3D10.%3C%2FP%3E%3CUL%3E%3CLI%3EReading%20CCMR%20to%20confirm%20CCMR%5BPCRS%5D%3D10%3A%3C%2FLI%3E%3C%2FUL%3E%3CPRE%20class%3D%22jive-pre%22%3Eroot%40freescale%20%2Fhome%24%20.%2Fio2%200x53f80000%20%0A%2Fdev%2Fmem%20opened.%20%0AMemory%20mapped%20on%20address%200x4001f000.%20%0AAddress%20value%200x53F80000%20(0x4001f000)%3A%200x174B0D7D%0A%3C%2FPRE%3E%3CP%3EThe%20pll_ref_clock%20inputs%20to%20MCU%20PLL%20and%20Serial%20PLL.%20We%20can%20check%20MCU%20PLL%20and%20Serial%20PLL%20configurations%20on%20MPCTL%20(0x53F80010)%20and%20SPCTL%20(0x53F80010)%20registers%20respectively.%3C%2FP%3E%3CUL%3E%3CLI%3EReading%20MPCTL%20and%20SPCTL%3A%3C%2FLI%3E%3C%2FUL%3E%3CTABLE%20border%3D%221%22%20cellpadding%3D%225%22%20cellspacing%3D%225%22%20height%3D%2268%22%20style%3D%22width%3A%201963px%3B%22%3E%3CTBODY%3E%3CTR%3E%3CTD%3E%3CPRE%20class%3D%22jive-pre%22%3Eroot%40freescale%20%2Fhome%24%20.%2Fio2%200x53f80010%20%0A%2Fdev%2Fmem%20opened.%20%0AMemory%20mapped%20on%20address%200x4001f000.%20%0AAddress%20value%200x53F80010%20(0x4001f010)%3A%200x33280C%0A%3C%2FPRE%3E%3C%2FTD%3E%3CTD%3E%3CPRE%20class%3D%22jive-pre%22%3Eroot%40freescale%20%2Fhome%24%20.%2Fio2%200x53f80018%20%0A%2Fdev%2Fmem%20opened.%20%0AMemory%20mapped%20on%20address%200x4001f000.%20%0AAddress%20value%200x53F80018%20(0x4001f018)%3A%200x2072356%0A%3C%2FPRE%3E%3C%2FTD%3E%3C%2FTR%3E%3C%2FTBODY%3E%3C%2FTABLE%3E%3CP%3EDetermine%20the%20PLL%20multiplication%20factor%20from%20MPCTL%20and%20SPCTL%3A%3C%2FP%3E%3CPRE%20class%3D%22jive-pre%22%3E-%20MPCTL%3A%20PD%20%3D%201%20(0000)%20%7C%20MFD%20%3D%2052%20(0000110011)%20%7C%20MFI%20%3D%2010%20(1010)%20%7C%20MFN%20%3D%2012%20(0000001100)%20%0A-%20MCPTL%20Multiplication%20Factor%3A%2020%2C46153%20%0A-%20mpl-dpdgck-clk%20%3D%2020%2C46153%20*%2026MHz%20%3D%20532%20MHz%0A%3C%2FPRE%3E%3CPRE%20class%3D%22jive-pre%22%3E-%20SPCTL%3A%20PD%20%3D%201%20(0000)%20%7C%20MFD%20%3D%20520%20(1000000111)%20%7C%20MFI%20%3D%208%20(1000)%20%7C%20MFN%20%3D%20-170%20(1101010110)%20%0A-%20SCPTL%20Multiplication%20Factor%3A%2015%2C3461538%20%0A-%20spl-dpdgck-clk%20%3D%2015%2C3461538%20*%2026MHz%20%3D%20399%20MHz%0A%3C%2FPRE%3E%3CP%3EFinally%20we%20can%20output%20mpl-dpdgck-clk%20and%20spl_dpdgck_clk%20values%20to%20check%20the%20calculations%20above.%3CBR%20%2F%3E%20We%20can%20write%200x300%20to%20COSR%20for%20mpl-dpdgck-clk.%20%5BCLKOEN%20%3D%201%7C%20CLKOUTDIV%20%3D%2016%7C%20CLKOSEL%20%3D%20mpl_dpdgck_clk%5D%3CBR%20%2F%3E%20And%200x307%20for%20spl-dpdgck-clk.%20%5BCLKOEN%20%3D%201%7C%20CLKOUTDIV%20%3D%2016%7C%20CLKOSEL%20%3D%20spl_dpdgck_clk%5D%3C%2FP%3E%3CTABLE%20border%3D%221%22%20cellpadding%3D%225%22%20cellspacing%3D%225%22%20style%3D%22width%3A%2050%25%3B%22%3E%3CTBODY%3E%3CTR%3E%3CTD%3E%3CPRE%20class%3D%22jive-pre%22%3Eroot%40freescale%20%2Fhome%24%20.%2Fio2%200x53f8001c%20w%200x300%20%0A%2Fdev%2Fmem%20opened.%20%0AMemory%20mapped%20on%20address%200x4001f000.%20%0AWritten%3A%200x300%0A%3C%2FPRE%3E%3C%2FTD%3E%3CTD%3E%3CPRE%20class%3D%22jive-pre%22%3Eroot%40freescale%20%2Fhome%24%20.%2Fio2%200x53f8001c%20w%200x307%20%0A%2Fdev%2Fmem%20opened.%20%0AMemory%20mapped%20on%20address%200x4001f000.%20%0AWritten%3A%200x307%0A%3C%2FPRE%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3E%3CP%20class%3D%22center%22%3E%3C%2FP%3E%3CDIV%20class%3D%22floatnone%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22256px-Mpl-dpdgck-clk.jpg%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22256px-Mpl-dpdgck-clk.jpg%22%20style%3D%22width%3A%20256px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F37802i8578F7645F258C78%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22256px-Mpl-dpdgck-clk.jpg%22%20alt%3D%22256px-Mpl-dpdgck-clk.jpg%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CP%3E%3C%2FP%3E%3C%2FDIV%3E%3C%2FTD%3E%3CTD%3E%3CP%20class%3D%22center%22%3E%3C%2FP%3E%3CDIV%20class%3D%22floatnone%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22256px-Spl-dpdgck-clk.jpg%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22256px-Spl-dpdgck-clk.jpg%22%20style%3D%22width%3A%20256px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F37803i8F85E54C92EFF5C1%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22256px-Spl-dpdgck-clk.jpg%22%20alt%3D%22256px-Spl-dpdgck-clk.jpg%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CP%3E%3C%2FP%3E%3C%2FDIV%3E%3C%2FTD%3E%3C%2FTR%3E%3C%2FTBODY%3E%3C%2FTABLE%3E%3CP%3EBy%20multiplying%20the%20results%20above%20by%2016%20to%20compensate%20for%20CLKOUTDIV%20we%20have%20the%20expected%20results.%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22mce_paste_marker%22%3E%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E
No ratings
Version history
Last update:
‎09-10-2020 02:23 AM
Updated by: