Talk:CPU Frequency

From wiki.gp2x.org

Could someone explain this?

I didn't find any explanation in the docs (MMSP2 Databook v1.0). Did anybody measure the resulting frequency?

The question restated using C code (mm points to 0xc0000000):

unsigned cpuHz920() {

 /* Crystal input p.31 */
 const unsigned XTI=7372800;
 uint16_t *mm16=(unsigned short *)mm;
 /* p.108 FCLK PLL Value Setting Register 
    PLL = phase-locked loop?
    http://en.wikipedia.org/wiki/PLL
  */
 uint16_t FPLLVSETREG=mm16[0x912>>1];
 /* p.109
    [15:8] mdiv of pll */
 uint8_t FMDIVR= (FPLLVSETREG & 0xff00) >> 8;
 DEBUG(FMDIVR);
 /* [7:2] pdiv of pll */
 uint8_t FPDIVR = (FPLLVSETREG & 0xfc) >> 2;
 DEBUG(FPDIVR);
 /* [1:0] sdiv of pll */
 uint8_t FSDIVR = FPLLVSETREG & 3;
 DEBUG(FSDIVR);
 /* p. 88, 109 
    System clock set register
  */
 uint16_t SYSCSETREG=mm16[0x91c>>1];
 /* [8:6] DCLK Clock Generation F-PLL Divide Set Value (N-1)
    DCLK means Double Clock, it is used for the memory controller
    so, BCLK is DCLK*1/2 */
 uint8_t DCLKDIV = (SYSCSETREG & 0x1c0) >> 6;
 DEBUG(DCLKDIV);
 /* [5:3] A940T FCLK Clock Generation F-PLL Divide Set Value (N-1) */
 uint8_t A940TFDIV = (SYSCSETREG & 0x38) >> 3;
 DEBUG(A940TFDIV);
 /* [2:0] A920T FCLK Clock Generation F-PLL Divide Set Value (N-1) */
 uint8_t A920TFDIV = SYSCSETREG & 7;
 DEBUG(A920TFDIV);
 /* why? perhaps p.85? */
 unsigned FCLKin = (XTI * (((unsigned)FMDIVR) + 8))
   /((((unsigned)FPDIVR) + 2) << FSDIVR);
 return FCLKin / (((unsigned)A920TFDIV)+1);

}

The FCLKin line is the one I couldn't verify in the docs.

Personal tools