If you're going to be accessing the hardware registers directly, why not just read the CPU frequency from them? This is how I do it for the VZ -- the SZ may be different (if that's what the NR70 uses).
int32 EmRegsVz::GetSystemClockFrequency (void) { uint16 pllControl = READ_REGISTER (pllControl); uint16 pllFreqSel = READ_REGISTER (pllFreqSel); // Convert the 32.768KHz clock (CLK32) into the PLLCLK frequency. uint16 PC = (pllFreqSel & 0x00FF); uint16 QC = (pllFreqSel & 0x0F00) >> 8; uint32 result = 32768L * 2 * (14 * (PC + 1) + QC + 1); // Divide by the first prescaler, if needed. if ((pllControl & hwrVZ328PLLControlPreSc1Div2) != 0) { result /= 2; } // Divide by the second prescaler, if needed. if ((pllControl & hwrVZ328PLLControlPreSc2Div2) != 0) { result /= 2; } // Divide by the system clock scaler, if needed. switch (pllControl & 0x0F00) { case hwrVZ328PLLControlSysDMADiv2: result /= 2; break; case hwrVZ328PLLControlSysDMADiv4: result /= 4; break; case hwrVZ328PLLControlSysDMADiv8: result /= 8; break; case hwrVZ328PLLControlSysDMADiv16: result /= 16; break; } return result; } -- Keith At 11:11 AM -0700 7/20/02, Robert Hildinger wrote: >I've created the code below to calculate the CPU speed of a Sony >Clie NR70 in MHz. The code works by calculating the time it takes to >execute a block of 250 NOP instructions, which according to Motorola >documentation takes 4 cycles to execute. 250 NOPs therefore equate >to 1000 CPU cycles. The clock frequency is then easy to compute as a >1000 cycles divided by the time take to execute in seconds. Easy, >huh? > >Well, here's the problem... This code returns a value of 42-43 MHz >every time, which is great except that the NR70's processor is >supposed to run at 66 Mhz, and I'm at a loss as to figure out why >there is such a discrepancy. I believe this calculation to be >accurate, but the difference in results is undeniable. I thought >that the problem might lie in interrupt procesing during my timing >block, but the block is only a 1000 cycles long, but I can't see >interrupts coming in consistently during such a short duration... > >Any thoughts???? > >Thanks! >-Robert Hildinger > >#define TCN1 0xfffff608; // Address of hardware TIMER 1 on Sony > // NR70 (DragonBall Super VZ- runs at > // 5526869 Hz >#define IMR 0xfffff304; // Address of NR70 Interrupt Mask Reg. > >static void RunSpeedTest(void) >{ > ... > time = (volatile UInt16 *)TCN1; > imr = (volatile UInt32 *)IMR; > ... >} -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/