Mercurial > ecos
diff packages/hal/sh/arch/current/src/hal_misc.c @ 1423:440ddbf97b39
2003-09-21 Jonathan Larmour <jifl@eCosCentric.com>
* cdl/hal_sh.cdl: CYGHWR_HAL_SH_FPU_REGS is only needed if there's an
FPU.
* include/hal_var_bank.h (HAL_THREAD_INIT_CONTEXT_FPU): Use FPSCR
init value from HAL register definitions.
2003-09-19 John Dallaway <jld@ecoscentric.com>
* cdl/hal_sh.cdl: Specify default CDL values for sh4_202_md target.
2003-09-11 Nick Garnett <nickg@ecoscentric.com>
* include/hal_var_bank.h (HAL_THREAD_INIT_CONTEXT_FPU): Changed
initial value of fpscr to do round-to-nearest rather than
round-to-zero.
2003-09-08 Nick Garnett <nickg@ecoscentric.com>
* src/vectors.S (cyg_hal_default_exception_vsr): Added code to
switch to interrupt stack when fielding exceptions from RedBoot or
some other ROM monitor. Without this we get potential stack
overflows when debugging via the network.
2003-09-05 Nick Garnett <nickg@ecoscentric.com>
* include/hal_arch.h:
* include/hal_var_bank.h:
* include/hal_var_bank.inc:
* src/context.S:
Added support for floating point state save and restore and GDB
* src/hal_misc.c (hal_delay_us): Fixed implementation of this
routine so that it actually works.
* src/hal_syscall.c:
Added support for all supportable syscalls.
* src/sh_stub.c:
Added check in __is_bsp_syscall() for trap 34 traps using the TRA
register.
* src/vectors.S: Set startup stack size to the same as the
interrupt stack size. In some configurations of RedBoot the
previous value was too small.
* include/sh_stub.h:
Fixed HAL_STUB_PLATFORM_STUBS_FIXUP() to only rewind for a
breakpoint. Traps are not rewound.
* cdl/hal_sh.cdl: Added option for SH architecture FP register
count.
| author | nickg |
|---|---|
| date | Fri, 05 Dec 2003 17:06:23 +0000 |
| parents | d2c90368aeef |
| children | 74dbf4c3f2e1 |
line wrap: on
line diff
--- a/packages/hal/sh/arch/current/src/hal_misc.c +++ b/packages/hal/sh/arch/current/src/hal_misc.c @@ -9,6 +9,7 @@ // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -214,20 +215,32 @@ hal_delay_us(int usecs) volatile unsigned char *tstr = (volatile unsigned char *)CYGARC_REG_TSTR; volatile unsigned long *tcnt = (volatile unsigned long *)CYGARC_REG_TCNT1; volatile unsigned long *tcor = (volatile unsigned long *)CYGARC_REG_TCOR1; - unsigned long clocks_per_us = (CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED+(CYGHWR_HAL_SH_TMU_PRESCALE_0-1))/CYGHWR_HAL_SH_TMU_PRESCALE_0; // Rounded up - int diff, diff2; - cyg_uint32 val1, val2; + volatile unsigned short *tcr = (volatile unsigned short *)CYGARC_REG_TCR1; + unsigned long clocks_per_us = (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/1000000) + + (CYGHWR_HAL_SH_TMU_PRESCALE_0-1)) / + CYGHWR_HAL_SH_TMU_PRESCALE_0); + volatile int diff, diff2; + volatile cyg_uint32 val1, val2; + *tcr = (( 4==CYGHWR_HAL_SH_TMU_PRESCALE_0) ? CYGARC_REG_TCR_TPSC_4 : + (16==CYGHWR_HAL_SH_TMU_PRESCALE_0) ? CYGARC_REG_TCR_TPSC_16: + (64==CYGHWR_HAL_SH_TMU_PRESCALE_0) ? CYGARC_REG_TCR_TPSC_64: + CYGARC_REG_TCR_TPSC_256); + + *tcnt = 0x0FFFFFFF; + *tcor = 0x0FFFFFFF; + _tstr = *tstr; *tstr |= CYGARC_REG_TSTR_STR1; // Enable channel 1 while (usecs-- > 0) { diff = 0; + val1 = *tcnt; while (diff < clocks_per_us) { - val1 = *tcnt; while ((val2 = *tcnt) == val1) ; - diff2 = val2 - val1; + diff2 = val1 - val2; if (diff2 < 0) diff2 += *tcor; diff += diff2; + val1 = val2; } } *tstr = _tstr; // Restore timer to previous state
