changeset 1914:d485b9fe6131

Adjust HALs to match the updated gprof support
author bartv
date Mon, 21 Mar 2005 14:14:54 +0000
parents b179f89c8a4f
children 0fd6e58dc450
files packages/hal/arm/sa11x0/var/current/ChangeLog packages/hal/arm/sa11x0/var/current/src/sa11x0_misc.c packages/hal/powerpc/mpc8xx/current/ChangeLog packages/hal/powerpc/mpc8xx/current/src/var_misc.c
diffstat 4 files changed, 29 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/arm/sa11x0/var/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/var/current/ChangeLog
@@ -1,3 +1,10 @@
+2004-02-08  Bart Veer  <bartv@ecoscentric.com>
+
+	* src/sa11x0_misc.c (hal_enable_profile_timer): 
+	Update this function to return the actual resolution, as 
+	required by the updated gprof package. Make the profiling
+	actually work.
+
 2003-12-05  Andrew Lunn  <andrew.lunn@ascom.ch>
 
 	* include/hal_diag.h: hal_delay_us() is a C function.
--- a/packages/hal/arm/sa11x0/var/current/src/sa11x0_misc.c
+++ b/packages/hal/arm/sa11x0/var/current/src/sa11x0_misc.c
@@ -221,29 +221,38 @@ void hal_delay_us(cyg_int32 usecs)
 // Can't rely on Cyg_Interrupt class being defined.
 #define Cyg_InterruptHANDLED 1
 
+static int  profile_period  = 0;
+
 // Profiling timer ISR
 static cyg_uint32 
 profile_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data, HAL_SavedRegisters *regs)
 {
+    // Load new match value
+    *SA11X0_OSMR1 = *SA11X0_OSCR + profile_period;
+    // Clear any pending interrupt
+    *SA11X0_OSSR = SA11X0_OSSR_TIMER1;
     HAL_INTERRUPT_ACKNOWLEDGE(CYGNUM_HAL_INTERRUPT_TIMER1);
     __profile_hit(regs->pc);
     return Cyg_InterruptHANDLED;
 }
 
-void
+int
 hal_enable_profile_timer(int resolution)
 {
     // Run periodic timer interrupt for profile 
     // The resolution is specified in us, the hardware generates 3.6864
     // ticks/us
-    int period = (resolution*36864) / 10000;
+    profile_period = (resolution*36864) / 10000;
 
     // Attach ISR.
     HAL_INTERRUPT_ATTACH(CYGNUM_HAL_INTERRUPT_TIMER1, &profile_isr, 0x1111, 0);
     HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_TIMER1);
 
-    // Set period.
-    *SA11X0_OSMR1 = period;
+    // Set period and enable timer interrupts
+    *SA11X0_OSMR1 = *SA11X0_OSCR + profile_period;
+    *SA11X0_OIER |= SA11X0_OIER_TIMER1;
+
+    return resolution;
 }
 #endif
 
--- a/packages/hal/powerpc/mpc8xx/current/ChangeLog
+++ b/packages/hal/powerpc/mpc8xx/current/ChangeLog
@@ -3,6 +3,12 @@ 2004-09-16  Gary Thomas  <gary@mlbassoc.
 	* src/var_misc.c (hal_variant_init): Remove [possibly incorrect]
 	parallel port initializations - leave them to the platform.
 
+2004-04-27  Bart Veer  <bartv@ecoscentric.com>
+
+	* src/var_misc.c (hal_enable_profile_timer):
+	Update this function to return the actual resolution, as 
+	required by the updated gprof package
+
 2004-04-22  Jani Monoses <jani@iv.ro>
 
 	 * cdl/hal_powerpc_mpc8xx.cdl :
--- a/packages/hal/powerpc/mpc8xx/current/src/var_misc.c
+++ b/packages/hal/powerpc/mpc8xx/current/src/var_misc.c
@@ -238,7 +238,7 @@ isr_pit(CYG_ADDRWORD vector, CYG_ADDRWOR
     return Cyg_InterruptHANDLED;
 }
 
-void
+int
 hal_enable_profile_timer(int resolution)
 {
     // Run periodic timer interrupt for profile 
@@ -265,6 +265,8 @@ hal_enable_profile_timer(int resolution)
     HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
     piscr |= CYGARC_REG_IMM_PISCR_PTE;
     HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
+
+    return resolution;
 }
 #endif