This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

PMU in arm11 results

Hi,

I am programming raspbery pi model b ARM1176 bare metal (in assembly and c). I need to calculate the clock cycles used to execute an assembly code.

I am using the following code for PMU counter:

  1.   mov r0,#1 
  2.   MCR p15, 0, r0, c15, c12, 0 ; Write Performance Monitor Control Register 
  3.   /* Reset Cycle Counter */ 
  4.   mov r0,#5 
  5.   MCR p15, 0, r0, c15, c12, 0 ; Write Performance Monitor Control Register 
  6.   /* Meaure */ 
  7.   MRC p15, 0, r0, c15, c12, 1 @ Read Cycle Counter Register 
  8.   <MY CODES> 
  9.   MRC p15, 0, r1, c15, c12, 1 @ Read Cycle Counter Register 

From this if I have

add r3,#3

in place of my code i get r1=8 and r0=0, which seems correct since arm11 has 8 pipeline stages and it takes 8 clock cycles to execute it.

But when I add more instructions I am getting ridiculous results like

add r3,#3

add r4,#1

r0=0,r1=97/96/94 (the result of r1 should also be constant!!!)

I am using uart to see results of registers on minicom. I have aatached my code files

10261.zip