Mercurial > ecos
changeset 3050:b8cb8bedf5e1
* cdl/hal_cortexm.cdl: New CDL option CYGIMP_HAL_ARCH_ENDIAN
* include/cortexm_endian.h: New file
* include/cortexm_regs.h: New file
[ Bugzilla 1001275 ]
| author | sergeig |
|---|---|
| date | Wed, 24 Aug 2011 17:30:56 +0000 |
| parents | a142ddec4dad |
| children | 654ce0d409ee |
| files | packages/hal/cortexm/arch/current/ChangeLog packages/hal/cortexm/arch/current/cdl/hal_cortexm.cdl packages/hal/cortexm/arch/current/include/cortexm_endian.h packages/hal/cortexm/arch/current/include/cortexm_regs.h |
| diffstat | 4 files changed, 180 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/hal/cortexm/arch/current/ChangeLog +++ b/packages/hal/cortexm/arch/current/ChangeLog @@ -1,3 +1,10 @@ +2011-08-23 Ilija Kocho <ilijak@siva.com.mk> + + * cdl/hal_cortexm.cdl: New CDL option CYGIMP_HAL_ARCH_ENDIAN + * include/cortexm_endian.h: New file + * include/cortexm_regs.h: New file + [ Bugzilla 1001275 ] + 2011-04-06 Nick Garnett <nickg@ecoscentric.com> * cdl/cortexm.cdl: Remove M1 CPU family from architecture config
--- a/packages/hal/cortexm/arch/current/cdl/hal_cortexm.cdl +++ b/packages/hal/cortexm/arch/current/cdl/hal_cortexm.cdl @@ -129,6 +129,20 @@ cdl_package CYGPKG_HAL_CORTEXM { Use the Floating Point Unit." } + cdl_option CYGIMP_HAL_ARCH_ENDIAN { + display "Architecture optimized endian functions" + flavor bool + default_value 1 + description " + Cortex-M architecture implements instructions for endian + manipulation (byte swapping). If enabled, this feature + can produce shorter and faster code for that." + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_ENDIAN_H <cyg/hal/cortexm_endian.h>" + } + } + cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_MAX { display "Maximum usable priority" flavor data
new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/cortexm_endian.h @@ -0,0 +1,77 @@ +#ifndef CYGONCE_CORTEXM_ENDIAN_H +#define CYGONCE_CORTEXM_ENDIAN_H +//========================================================================== +// +// cortexm_endian.h +// +// Cortex-M architecture endian conversion macros/functions. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// 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 +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho <ilijak@siva.com.mk> +// Sergei Gavrikov +// Date: 2011-08-20 +// Description: Endian conversion macros/functions optimized for Cortex-M +// Usage: #include <cyg/hal/cortexm_endian.h> +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <cyg/hal/cortexm_regs.h> + +//=========================================================================== +// Endian operations optimized for Cortex-M architecture. + +static __inline__ cyg_uint32 cyg_hal_swap32(cyg_uint32 original) +{ + cyg_uint32 swapped; + CYGARC_REV(swapped, original); + return swapped; +} + +static __inline__ cyg_uint16 cyg_hal_swap16(cyg_uint16 original) +{ + cyg_uint16 swapped; + CYGARC_REV16(swapped, original); + return swapped; +} + +#define CYG_SWAP32(__val) cyg_hal_swap32(__val) +#define CYG_SWAP16(__val) cyg_hal_swap16(__val) + +//========================================================================== +#endif //CYGONCE_CORTEXM_ENDIAN_H
new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/cortexm_regs.h @@ -0,0 +1,82 @@ +#ifndef CYGONCE_CORTEXM_REGS_H +#define CYGONCE_CORTEXM_REGS_H +//========================================================================== +// +// cortexm_regs.h +// +// Cortex-M architecture, special machine instruction wrappers +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// 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 +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho <ilijak@siva.com.mk> +// Sergei Gavrikov +// Date: 2011-06-18 +// Description: C wrappers for some special architecture instructions. +// +//####DESCRIPTIONEND#### +// +//========================================================================= + +#ifndef __ASSEMBLER__ + +//--------------------------------------------------------------------------- +// Change processor state instructions + +// Disable / enable interrupts +#define CYGARC_CPSID( _flags_ ) __asm__ volatile ("cpsid " #_flags_ "\n") + +// Enable interrupts and fault handlers (clear FAULTMASK) +#define CYGARC_CPSIE( _flags_ ) __asm__ volatile ("cpsie " #_flags_ "\n") + +//--------------------------------------------------------------------------- +// Byte swapping instructions + +// Reverse word +#define CYGARC_REV( _swapped_, _origin_ ) \ + __asm__ volatile ("rev %0, %1\n" : "=r"(_swapped_) : "r"(_origin_)) + +// Reverse halfwords +#define CYGARC_REV16( _swapped_, _origin_ ) \ + __asm__ volatile ("rev16 %0, %1\n" : "=r"(_swapped_) : "r"(_origin_)) + +// Reverse signed halfword +#define CYGARC_REVSH( _swapped_, _origin_ ) \ + __asm__ volatile ("revsh %0, %1\n" : "=r"(_swapped_) : "r"(_origin_)) + +#endif // __ASSEMBLER__ + +//========================================================================== +#endif // CYGONCE_CORTEXM_REGS_H
