Initialisation for the AT91... PIT if there is no kernel...
Andrew Lunn
andrew@lunn.ch
Thu Mar 23 20:03:00 GMT 2006
On Tue, Mar 21, 2006 at 11:49:38PM +0100, oliver munz @ s p e a g wrote:
> This Patch fixes problems whit the AT91 PIT, if it should run whitout the
> kernel.
This fixes the problem a different way.
Andrew
-------------- next part --------------
Index: hal/arm/at91/var/current/ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/hal/arm/at91/var/current/ChangeLog,v
retrieving revision 1.32
diff -u -r1.32 ChangeLog
--- hal/arm/at91/var/current/ChangeLog 13 Mar 2006 07:47:23 -0000 1.32
+++ hal/arm/at91/var/current/ChangeLog 23 Mar 2006 20:00:24 -0000
@@ -1,3 +1,9 @@
+2006-03-23 Andrew Lunn <andrew.lunn@ascom.ch>
+
+ * src/timer_pit.c (hal_delay_us): Start the PIT if it is not
+ running when hal_delay_us is called. This happens when the kernel
+ is not used. Problem found by Oliver Munz.
+
2006-03-10 Oliver Munz <munz@speag.ch>
* src/hal_diag.c (cyg_hal_plf_serial_isr): Change the #ifdefs to
Index: hal/arm/at91/var/current/src/timer_pit.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/hal/arm/at91/var/current/src/timer_pit.c,v
retrieving revision 1.1
diff -u -r1.1 timer_pit.c
--- hal/arm/at91/var/current/src/timer_pit.c 19 Feb 2006 19:08:28 -0000 1.1
+++ hal/arm/at91/var/current/src/timer_pit.c 23 Mar 2006 20:00:24 -0000
@@ -105,7 +105,14 @@
{
cyg_int64 ticks;
cyg_uint32 val1, val2;
- cyg_uint32 piv;
+ cyg_uint32 pimr;
+
+ // Check that the PIT is running. If not start it.
+ HAL_READ_UINT32((AT91_PITC + AT91_PITC_PIMR),pimr);
+ if (!(pimr & AT91_PITC_PIMR_PITEN)) {
+ HAL_WRITE_UINT32((AT91_PITC + AT91_PITC_PIMR),
+ 0xffff | AT91_PITC_PIMR_PITEN);
+ }
// Calculate how many PIT ticks the required number of microseconds
// equate to. We do this calculation in 64 bit arithmetic to avoid
@@ -118,8 +125,6 @@
// why, please let me know!
ticks = ticks / 3;
- HAL_READ_UINT32(AT91_PITC + AT91_PITC_PIMR, piv);
-
while (ticks > 0) {
hal_clock_read(&val1);
do {
More information about the Ecos-patches
mailing list