This is the mail archive of the
ecos-patches@sources.redhat.com
mailing list for the eCos project.
AT91: implementation of HAL_IDLE_THREAD_ACTION
- From: daniel dot neri at sigicom dot se (Daniel Néri)
- To: ecos-patches at sources dot redhat dot com
- Date: Fri, 16 May 2003 18:11:05 +0000
- Subject: AT91: implementation of HAL_IDLE_THREAD_ACTION
- Cancel-lock: sha1:HiQBykLCXLm2tN3H/0qkRAmx1zM=
- Organization: Sigicom AB, Stockholm, Sweden
- References: <87r89nxbho.fsf@fnord.local.sigicom.com> <3E655589.1070401@eCosCentric.com><87fznehjqo.fsf@fnord.local.sigicom.com>
daniel.neri@sigicom.se (Daniel Néri) writes:
> I'll make a separate post with a HAL_IDLE_THREAD_ACTION
> implementation for the new AT91 variant HAL.
And here it comes, also including some missing I/O register defines.
Cheers,
--Daniel
cvs diff: Diffing hal/arm/at91/var
cvs diff: Diffing hal/arm/at91/var/current
Index: hal/arm/at91/var/current/ChangeLog
===================================================================
RCS file: /home/dne/cvsroot/redhat/ecos/packages/hal/arm/at91/var/current/ChangeLog,v
retrieving revision 1.1.1.2
retrieving revision 1.3
diff -u -5 -p -r1.1.1.2 -r1.3
--- hal/arm/at91/var/current/ChangeLog 2003/05/16 09:09:54 1.1.1.2
+++ hal/arm/at91/var/current/ChangeLog 2003/05/16 17:18:37 1.3
@@ -1,5 +1,15 @@
+2003-05-16 Daniel Néri <daniel.neri@sigicom.se>
+
+ * cdl/hal_arm_at91.cdl: Implement CYGINT_HAL_ARM_VAR_IDLE_THREAD_ACTION.
+
+ * src/at91_misc.c (hal_arm_var_idle_thread_action): New function,
+ used for HAL_IDLE_THREAD_ACTION.
+
+ * include/var_io.h: Add missing PIO register defines. Add
+ AT91_PS_CR idle mode command bit.
+
2003-05-15 Nick Garnett <nickg@balti.calivar.com>
* src/at91_misc.c (hal_delay_us): Added calculation to better
approximate the number of timer ticks for a given number of
microseconds. This code also now adjust to the actual CPU clock
cvs diff: Diffing hal/arm/at91/var/current/cdl
Index: hal/arm/at91/var/current/cdl/hal_arm_at91.cdl
===================================================================
RCS file: /home/dne/cvsroot/redhat/ecos/packages/hal/arm/at91/var/current/cdl/hal_arm_at91.cdl,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -5 -p -r1.1.1.1 -r1.2
--- hal/arm/at91/var/current/cdl/hal_arm_at91.cdl 2003/05/14 08:47:18 1.1.1.1
+++ hal/arm/at91/var/current/cdl/hal_arm_at91.cdl 2003/05/16 17:23:35 1.2
@@ -64,10 +64,11 @@ cdl_package CYGPKG_HAL_ARM_AT91 {
implements CYGINT_HAL_DEBUG_GDB_STUBS
implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT
implements CYGINT_HAL_ARM_ARCH_ARM7
implements CYGINT_HAL_ARM_THUMB_ARCH
+ implements CYGINT_HAL_ARM_VAR_IDLE_THREAD_ACTION
# Let the architectural HAL see this variant's files
define_proc {
puts $::cdl_system_header "#define CYGBLD_HAL_ARM_VAR_IO_H"
}
cvs diff: Diffing hal/arm/at91/var/current/include
Index: hal/arm/at91/var/current/include/var_io.h
===================================================================
RCS file: /home/dne/cvsroot/redhat/ecos/packages/hal/arm/at91/var/current/include/var_io.h,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -5 -p -r1.1.1.1 -r1.3
--- hal/arm/at91/var/current/include/var_io.h 2003/05/14 08:47:19 1.1.1.1
+++ hal/arm/at91/var/current/include/var_io.h 2003/05/16 17:00:51 1.3
@@ -139,13 +139,23 @@
#define AT91_PIO_PER 0x00 // PIO enable
#define AT91_PIO_PDR 0x04 // PIO disable
#define AT91_PIO_PSR 0x08 // PIO status
#define AT91_PIO_OER 0x10 // Output enable
+#define AT91_PIO_ODR 0x14 // Output disable
+#define AT91_PIO_OSR 0x18 // Output status
+#define AT91_PIO_IFER 0x20 // Input Filter enable
+#define AT91_PIO_IFDR 0x24 // Input Filter disable
+#define AT91_PIO_IFSR 0x28 // Input Filter status
#define AT91_PIO_SODR 0x30 // Set out bits
#define AT91_PIO_CODR 0x34 // Clear out bits
+#define AT91_PIO_ODSR 0x38 // Output data status
#define AT91_PIO_PDSR 0x3C // Pin data status
+#define AT91_PIO_IER 0x40 // Interrupt enable
+#define AT91_PIO_IDR 0x44 // Interrupt disable
+#define AT91_PIO_IMR 0x48 // Interrupt mask
+#define AT91_PIO_ISR 0x4C // Interrupt status
//=============================================================================
// Advanced Interrupt Controller (AIC)
#ifndef AT91_AIC
@@ -376,10 +386,11 @@
#ifndef AT91_PS
#define AT91_PS 0xFFFF4000
#endif
#define AT91_PS_CR 0x000 // Control
+#define AT91_PS_CR_IDLE (1<<0) // Disable CPU clock (idle mode)
#define AT91_PS_PCER 0x004 // Peripheral clock enable
#define AT91_PS_PCDR 0x004 // Peripheral clock disable
#define AT91_PS_PCSR 0x004 // Peripheral clock status
#elif defined(CYGHWR_HAL_ARM_AT91_M42800A) || \
cvs diff: Diffing hal/arm/at91/var/current/src
Index: hal/arm/at91/var/current/src/at91_misc.c
===================================================================
RCS file: /home/dne/cvsroot/redhat/ecos/packages/hal/arm/at91/var/current/src/at91_misc.c,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -u -5 -p -r1.1.1.2 -r1.2
--- hal/arm/at91/var/current/src/at91_misc.c 2003/05/16 09:09:54 1.1.1.2
+++ hal/arm/at91/var/current/src/at91_misc.c 2003/05/16 17:23:40 1.2
@@ -261,8 +261,14 @@ void hal_interrupt_set_level(int vector,
void hal_show_IRQ(int vector, int data, int handler)
{
// UNDEFINED(__FUNCTION__); // FIXME
}
+void
+hal_arm_var_idle_thread_action(cyg_uint32 loop_count)
+{
+ HAL_WRITE_UINT32(AT91_PS+AT91_PS_CR, AT91_PS_CR_IDLE);
+}
+
//--------------------------------------------------------------------------
// EOF at91_misc.c