Showing results for 
Search instead for 
Did you mean: 
Honored Contributor I

Wrong Timeout Value with ARM A9 private timer.


I am starting a bare-metal development on DE0-Nano-SoC_Computer. 

I use the development tool: DS5 AE. 

I begin by a timer program found in the document “DE0-Nano-SoC Computer System with ARM Cortex-A9”: 





equ bit_24_pattern, 0x01000000 






/* this program provides a simple example of code for the arm a9. it: 






* 1. starts the arm a9 private timer 






* 2. loops forever, toggling the hps green light ledg when the timer expires 




















.global _start 













ldr r0, =0xff709000 // gpio1 base address 






ldr r1, =0xfffec600 // mpcore private timer base address 






ldr r2, =bit_24_pattern // value to turn on the hps green light ledg 






str r2, [r0,# 0x4] // write to the data direction register to set 






// bit 24 (ledg) of gpio1 to be an output 






ldr r3, =200000000 // timeout = 1/(200 mhz) x 200×10∧6 = 1 sec 






str r3, [r1] // write to timer load register 






mov r3,# 0b011 // set bits: mode = 1 (auto), enable = 1 






str r3, [r1,# 0x8] // write to timer control register 













str r2, [r0] // turn on/off ledg 






wait: ldr r3, [r1,# 0xc] // read timer status 






cmp r3,# 0 






beq wait // wait for timer to expire 






str r3, [r1,# 0xc] // reset timer flag bit 






eor r2, r2,# bit_24_pattern // toggle ledg value 






b loop 













The timeout is not 1 sec but about 40 sec. the good value is 5 000 000 instead of 200 000 000. 

Is it necessary to initialize the system clocks before launching the program? 

Thanks for your help. 

0 Kudos
0 Replies