changeset 3187:635199c996bc

Add functions and macros for clock gating control to Kinetis.
author vae
date Mon, 06 Aug 2012 06:56:59 +0000
parents 4b141bb8701f
children cb5a35f3fda4
files packages/hal/cortexm/kinetis/var/current/ChangeLog packages/hal/cortexm/kinetis/var/current/include/var_io.h packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c
diffstat 3 files changed, 44 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/cortexm/kinetis/var/current/ChangeLog
+++ b/packages/hal/cortexm/kinetis/var/current/ChangeLog
@@ -1,3 +1,8 @@
+2012-08-01  Ilija Kocho  <ilijak@siva.com.mk>
+
+	* include/var_io.h, src/kinetis_misc.c: Add functions and macros
+	for clock gating control to Kinetis.       [Bugzilla 1001642]
+
 2012-05-18  Ilija Kocho  <ilijak@siva.com.mk>
 
 	* include/hal_cache.h, src/kinetis_misc.c: Provide for cache
--- a/packages/hal/cortexm/kinetis/var/current/include/var_io.h
+++ b/packages/hal/cortexm/kinetis/var/current/include/var_io.h
@@ -952,6 +952,23 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_MCR_DDRSREN_S          0
 
 
+// The following encodes the control register and clock bit number
+// into 16 bit descriptor.
+#define CYGHWR_HAL_CLOCK( __reg, __bit ) (((__reg-1)&0xF) + ((__bit<<8)&0x1F00))
+
+// Macros to extract encoded values.
+#define CYGHWR_HAL_CLOCK_REG( __desc ) ((__desc)&0xF)
+#define CYGHWR_HAL_CLOCK_BIT( __desc ) (((__desc)>>8)&0x1F)
+
+// Functions and macros to enable/disable clocks.
+#define CYGHWR_HAL_KINETIS_CLOCK_NONE (0xFFFF)
+__externC void hal_clock_enable( cyg_uint32 desc );
+__externC void hal_clock_disable( cyg_uint32 desc );
+
+#define CYGHWR_HAL_CLOCK_ENABLE( __desc ) hal_clock_enable( __desc )
+#define CYGHWR_HAL_CLOCK_DISABLE( __desc ) hal_clock_disable( __desc )
+
+
 //---------------------------------------------------------------------------
 // PORT - Peripheral register structure
 
--- a/packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c
+++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c
@@ -255,5 +255,27 @@ hal_dump_pin_setting(cyg_uint32 pin)
     }
 }
 
+void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
+hal_clock_enable(cyg_uint32 desc)
+{
+    volatile cyg_uint32 *scgc_p;
+    
+    if(desc != CYGHWR_HAL_KINETIS_CLOCK_NONE) {
+        scgc_p = &CYGHWR_HAL_KINETIS_SIM_P->scgc1 + CYGHWR_HAL_CLOCK_REG(desc);
+        *scgc_p |= 1 << CYGHWR_HAL_CLOCK_BIT(desc);
+    }    
+}
+
+void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
+hal_clock_disable(cyg_uint32 desc)
+{
+    volatile cyg_uint32 *scgc_p;
+    
+    if(desc != CYGHWR_HAL_KINETIS_CLOCK_NONE) {
+        scgc_p = &CYGHWR_HAL_KINETIS_SIM_P->scgc1 + CYGHWR_HAL_CLOCK_REG(desc);
+        *scgc_p &= ~(1 << CYGHWR_HAL_CLOCK_BIT(desc));
+    }    
+}
+
 //==========================================================================
 // EOF kinetis_misc.c