changeset 2510:0c2a776fc7f4

* src/ea2468_misc.c: Added hal_lpc_can_init() to initialize CAN channels * include/plf_io.h: Added HAL_LPC2XXX_INIT_CAN() macro for CAN channel initialisation
author asl
date Fri, 25 Jul 2008 11:13:36 +0000
parents a52d470bc691
children 1f18f909a18e
files packages/hal/arm/lpc24xx/ea2468/current/ChangeLog packages/hal/arm/lpc24xx/ea2468/current/cdl/hal_arm_lpc24xx_ea2468.cdl packages/hal/arm/lpc24xx/ea2468/current/include/plf_io.h packages/hal/arm/lpc24xx/ea2468/current/src/ea2468_misc.c
diffstat 4 files changed, 54 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/arm/lpc24xx/ea2468/current/ChangeLog
+++ b/packages/hal/arm/lpc24xx/ea2468/current/ChangeLog
@@ -1,3 +1,10 @@
+2008-07-21  Uwe Kindler  <uwe_kindler@web.de>
+
+	* src/ea2468_misc.c: Added hal_lpc_can_init() to initialize CAN
+	channels
+	* include/plf_io.h: Added HAL_LPC2XXX_INIT_CAN() macro for CAN channel
+	initialisation
+	
 2008-07-06  Uwe Kindler  <uwe_kindler@web.de>
 
 	* Initial release of Embedded Artists LPC2468 OEM board package
--- a/packages/hal/arm/lpc24xx/ea2468/current/cdl/hal_arm_lpc24xx_ea2468.cdl
+++ b/packages/hal/arm/lpc24xx/ea2468/current/cdl/hal_arm_lpc24xx_ea2468.cdl
@@ -134,7 +134,8 @@ cdl_package CYGPKG_HAL_ARM_LPC24XX_EA246
             channel, UART0, ist routed to an USB-to-serial bridge and
             the second channel, UART1, is available on the Sub-D9
             RS232 connector. This option chooses which channel will be
-            used to connect to a host running GDB."  }
+            used to connect to a host running GDB."  
+    }
 
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD {
          display       "GDB serial port baud rate"
--- a/packages/hal/arm/lpc24xx/ea2468/current/include/plf_io.h
+++ b/packages/hal/arm/lpc24xx/ea2468/current/include/plf_io.h
@@ -60,6 +60,16 @@
 extern void hal_plf_hardware_init(void);
 #define HAL_PLF_HARDWARE_INIT() \
     hal_plf_hardware_init()
+
+//-----------------------------------------------------------------------------
+// LPX24xx variant specific initialisation of CAN channels
+// This function configures the pin functions for CAN use
+//-----------------------------------------------------------------------------            
+#ifdef CYGPKG_DEVS_CAN_LPC2XXX
+externC void hal_lpc_can_init(cyg_uint8 can_chan_no);            
+#define HAL_LPC2XXX_INIT_CAN(_can_chan_no_) hal_lpc_can_init(_can_chan_no_)
+#endif // CYGPKG_DEVS_CAN_LPC2XXX   
+
 #endif  //__ASSEMBLER__ 
 
 //-----------------------------------------------------------------------------
--- a/packages/hal/arm/lpc24xx/ea2468/current/src/ea2468_misc.c
+++ b/packages/hal/arm/lpc24xx/ea2468/current/src/ea2468_misc.c
@@ -58,6 +58,7 @@
 #include <cyg/hal/hal_io.h>             // IO macros
 
 #include <cyg/infra/cyg_type.h>         // base types
+#include <cyg/infra/cyg_ass.h>          // assertion macros
 #include <cyg/hal/var_io.h>
 #include <cyg/hal/plf_io.h>
 #include <pkgconf/hal.h>
@@ -160,7 +161,7 @@ void hal_pll_init(void)
     	// Enable PLL, disconnected
     	//
     	HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PLLCON,  
-                         CYGARC_HAL_LPC24XX_REG_PLLCON_PLLE);
+    	                  CYGARC_HAL_LPC24XX_REG_PLLCON_PLLE);
     	HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PLLFEED, 0xaa);
     	HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PLLFEED, 0x55); 
     }
@@ -255,7 +256,7 @@ void hal_pll_init(void)
 
 
 //===========================================================================
-// hal_mem_init - initalize external memory interface
+// hal_mem_init - initialize external memory interface
 //===========================================================================
 void hal_mem_init(void)
 {
@@ -428,5 +429,37 @@ void hal_lpc24xx_set_leds (int mask)
     //
 }
 
+
+#ifdef CYGPKG_DEVS_CAN_LPC2XXX
+//===========================================================================
+// Configure CAN pins
+//===========================================================================
+void hal_lpc_can_init(cyg_uint8 can_chan_no)
+{
+    CYG_ASSERT(can_chan_no < 2, "CAN channel number out of bounds");
+    
+    cyg_uint32 pinsel0_val;
+    cyg_uint32 pconp_val;
+    HAL_READ_UINT32(PIN_BASE + CYGARC_HAL_LPC24XX_REG_PINSEL0, pinsel0_val);
+    HAL_READ_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PCONP, pconp_val);
+    switch (can_chan_no)
+    {
+        case 0:
+             CYGARC_HAL_LPC24XX_SET_PIN_FUN(pinsel0_val, 0, 1);
+             CYGARC_HAL_LPC24XX_SET_PIN_FUN(pinsel0_val, 1, 1);
+             pconp_val |= CYGARC_HAL_LPC24XX_REG_PCONP_CAN1;
+             break;
+        
+        case 1:
+             CYGARC_HAL_LPC24XX_SET_PIN_FUN(pinsel0_val, 4, 2);
+             CYGARC_HAL_LPC24XX_SET_PIN_FUN(pinsel0_val, 5, 2); 
+             pconp_val |= CYGARC_HAL_LPC24XX_REG_PCONP_CAN2;
+             break;
+    }
+    HAL_WRITE_UINT32(PIN_BASE + CYGARC_HAL_LPC24XX_REG_PINSEL0, pinsel0_val);
+    HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PCONP, pconp_val);
+}
+#endif // #ifdef CYGPKG_DEVS_CAN_LPC2XXX
+
 //--------------------------------------------------------------------------
 // EOF ea2468_misc.c