Dear Reinhard Meyer, In message <4cc62b6c.30...@emk-elektronik.de> you wrote: > > In such cases I prefer to use: > > uint64_t etime; > ... > etime = get_ticks() + get_tbclk(); /* 1 second */ > do { > whatever; > udelay (xx); > } while (condition && get_ticks() <= etime); > > That is far more accurate than calling udelay() 100000 times.
It may be more accuratre, but it may also be HORRIBLY WRONG!! Do NOT do that!! NEVER implement such a delay loop as end = time() + delay; while (time() < end) ... It fails in case the timer wraps around. Assume 32 bit counters, start time = 0xFFFFFFF0, delay = 0x20. It will compute end = 0x10, the while codition is immediately false, and you don't have any delay at all, which most probably generates a false error condition. Correct implementation of a timeout like that should always look like that: start = time(); while ((time() - start) < delay) ... This works much better (assuming unsigned arithmetics). Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de Ein weiser Herrscher kann in einem großen Land mehr Gutes bewirken als in einem kleinen - ein dummer Herrscher aber auch viel mehr Un- fug. Da weise Herrscher seltener sind als dumme, war ich schon immer gegen große Reiche skeptisch. - Herbert Rosendorfer _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot