Mercurial > ecos
changeset 2589:9da21501bc5b
* include/hal_intr.h:
Fixed load value of SysTick counter.
* src/hal_misc.c:
Fixed wrap-around in hal_delay_us().
| author | nickg |
|---|---|
| date | Wed, 05 Nov 2008 09:59:41 +0000 |
| parents | 7e2527e87885 |
| children | e7ed167c871d |
| files | packages/hal/cortexm/arch/current/ChangeLog packages/hal/cortexm/arch/current/include/hal_intr.h packages/hal/cortexm/arch/current/src/hal_misc.c |
| diffstat | 3 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/hal/cortexm/arch/current/ChangeLog +++ b/packages/hal/cortexm/arch/current/ChangeLog @@ -1,3 +1,10 @@ +2008-11-04 Simon Kallweit <simon.kallweit@intefo.ch> + + * include/hal_intr.h: + Fixed load value of SysTick counter. + * src/hal_misc.c: + Fixed wrap-around in hal_delay_us(). + 2008-11-04 Simon Kallweit <simon.kallweit@intefo.ch> * include/hal_intr.h:
--- a/packages/hal/cortexm/arch/current/include/hal_intr.h +++ b/packages/hal/cortexm/arch/current/include/hal_intr.h @@ -326,7 +326,7 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; #define HAL_CLOCK_INITIALIZE( __period ) \ { \ cyg_uint32 __p = __period; \ - __p = hal_cortexm_systick_clock / ( 1000000 / __p ); \ + __p = hal_cortexm_systick_clock / ( 1000000 / __p ) - 1; \ HAL_WRITE_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_RELOAD, \ __p ); \ HAL_WRITE_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_CSR, \ @@ -345,8 +345,8 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; cyg_uint32 __period, __value; \ HAL_READ_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_RELOAD, __period ); \ HAL_READ_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_VALUE, __value ); \ - __value = __period - __value; \ - __value /= (hal_cortexm_systick_clock/ 1000000 ); \ + __value = ( __period + 1 ) - __value; \ + __value /= (hal_cortexm_systick_clock / 1000000 ); \ *(__pvalue) = __value; \ }
--- a/packages/hal/cortexm/arch/current/src/hal_misc.c +++ b/packages/hal/cortexm/arch/current/src/hal_misc.c @@ -500,8 +500,9 @@ void hal_deliver_interrupt( cyg_uint32 v { HAL_CLOCK_READ( &t1 ); if( t1 < t0 ) - t1 += CYGNUM_HAL_RTC_PERIOD; - us -= t1-t0; + us -= (t1 + CYGNUM_HAL_RTC_PERIOD - t0); + else + us -= t1 - t0; t0 = t1; } }
