OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/hal/powerpc/mpc5xx/v2_0
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/cdl/hal_powerpc_mpc5xx.cdl
0,0 → 1,365
# ====================================================================
#
# hal_powerpc_mpc5xx.cdl
#
# PowerPC/MPC5xx variant architectural HAL package configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): Bob Koninckx
# Contributors:
# Date: 2001-08-12
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_HAL_POWERPC_MPC5xx {
display "PowerPC 5xx variant HAL"
parent CYGPKG_HAL_POWERPC
hardware
include_dir cyg/hal
define_header hal_powerpc_mpc5xx.h
description "
The PowerPC 5xx variant HAL package provides generic support
for this processor variant. It is also necessary to
select a specific target platform HAL package."
 
cdl_interface CYGINT_HAL_USE_ROM_MONITOR_UNSUPPORTED {
display "ROM monitor configuration is unsupported"
no_define
}
cdl_option CYGSEM_HAL_USE_ROM_MONITOR {
display "Work with a ROM monitor"
flavor bool
default_value { (CYG_HAL_STARTUP == "RAM" &&
!CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS &&
!CYGINT_HAL_USE_ROM_MONITOR_UNSUPPORTED &&
!CYGSEM_HAL_POWERPC_COPY_VECTORS) ? 1 : 0 }
parent CYGPKG_HAL_ROM_MONITOR
requires { CYG_HAL_STARTUP == "RAM" }
requires ! CYGSEM_HAL_POWERPC_COPY_VECTORS
requires ! CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
requires ! CYGINT_HAL_USE_ROM_MONITOR_UNSUPPORTED
description "
Allow coexistence with ROM monitor (GDB stubs) by
only initializing interrupt vectors on startup, thus leaving
exception handling to the ROM monitor."
}
 
#cdl_option CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP {
# calculated 0
#}
 
#cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP {
# calculated 0
#}
 
# FIXME: the option above should be adjusted to select between monitor
# variants
cdl_option CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs {
display "Bad CDL workaround"
calculated 1
active_if CYGSEM_HAL_USE_ROM_MONITOR
}
 
 
# Note: This should be sub-variant specific to reduce memory use.
define_proc {
puts $cdl_header "#define CYGHWR_HAL_VSR_TABLE (CYGHWR_HAL_POWERPC_VECTOR_BASE + 0x3f9800)"
puts $cdl_header "#define CYGHWR_HAL_VIRTUAL_VECTOR_TABLE (CYGHWR_HAL_VSR_TABLE + 0x200)"
}
 
cdl_component CYGPKG_HAL_POWERPC_MPC555 {
display "PowerPC 555 microcontroller"
implements CYGINT_HAL_POWERPC_VARIANT
description "
The PowerPC 555 microcontroller. This is an embedded part that in
addition to the PowerPC processor core has built in peripherals
such as memory controllers, DMA controllers, serial ports and
timers/counters."
 
cdl_option CYGHWR_HAL_POWERPC_FPU {
display "Variant FPU support"
flavor bool
default_value 0
description "
Enable or disable hardware support for floating point operations."
}
 
cdl_option CYGSEM_HAL_POWERPC_IEEE_FLOATING_POINT {
display "Fully IEEE floating point compliant"
flavor bool
default_value 0
active_if CYGHWR_HAL_POWERPC_FPU
requires CYGHWR_HAL_POWERPC_FPU
description "
Generate a floating point exception when the limits of the
floating point unit are reached. A software envelope can then
be used to generate the correct IEEE result for e.g. denormalized
numbers. If not enabled, the hardware will generate more than acceptable
values for these situation."
}
 
cdl_option CYGSEM_HAL_POWERPC_MPC5XX_OCD_ENABLE {
display "Enable On Chip Debugging (OCD, BDM)"
flavor bool
default_value 0
description "
This option forces the startup code to leave the OCD registers
unchanged. This allows for debugging with a BDM debugger."
}
 
cdl_option CYGHWR_HAL_POWERPC_MPC5XX_IFLASH_ENABLE {
display "Enable internal flash"
flavor bool
default_value 0
description "
Enable or disable the internal flash on the MPC5xx micro."
}
 
cdl_option CYGSEM_HAL_POWERPC_MPC5XX_IFLASH_DUAL_MAP {
display "Dual mapping of the internal flash"
default_value 1
active_if !CYGHWR_HAL_POWERPC_MPC5XX_IFLASH_ENABLE
requires !CYGHWR_HAL_POWERPC_MPC5XX_IFLASH_ENABLE
description "
This option allows to re-map the internal flash array to external RAM
memory."
}
 
cdl_option CYGHWR_HAL_POWERPC_DISABLE_MMU {
display "Disable Memory Management Unit (MMU)"
calculated 1
description "
The MPC5xx does not have an MMU, there is no use in enabling it."
}
 
cdl_option CYGSEM_HAL_POWERPC_MPC5XX_IMB3_ARBITER {
display "IMB3 arbitration ISR"
flavor bool
default_value 1
description "
The MPC5XX maps all IMB3 interrupt levels above 7 to SIU interrupt
level 7. If more than one IMB3 module is used at an interrupt level
higher than 7, interrupt arbiters must be chained on this level. This
option allows to chain multiple interrupt arbiters on SIU level 7.
This can be done using the functions hal_mpc5xx_install_imb3_arbiter
and hal_mpc5xx_remove_imb3_arbiter"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_TB {
display "Time base interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_PIT {
display "PIT interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_RTC {
display "RTC interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_PLL {
display "PLL interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_A_QUEUE1 {
display "QUADC A, QUEUE 1 interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_A_QUEUE2 {
display "QUADC A, QUEUE 2 interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_B_QUEUE1 {
display "QUADC B, QUEUE 1 interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_B_QUEUE2 {
display "QUADC B, QUEUE 2 interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI {
display "QSCI interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSPI {
display "QSPI interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A {
display "TOUCAN A interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B {
display "TOUCAN B interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A {
display "TPU A interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B {
display "TPU B interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A {
display "MIOS A interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
 
cdl_option CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B {
display "MIOS B interrupt source priority"
flavor data
legal_values 0 to 31
default_value 0
description "Time base interrupt source priority. O-6 are mapped to SIU levels 0-6.
7-31 are mapped to SIU level 7"
}
}
 
define_proc {
puts $::cdl_header "#include <pkgconf/hal_powerpc.h>"
}
 
compile var_intr.c var_misc.c variant.S
 
cdl_option CYGPKG_HAL_POWERPC_MPC5xx_TESTS {
display "PowerPC MPC5xx tests"
flavor data
no_define
calculated { "tests/intr0" }
 
description "
This option specifies the set of tests for the PowerPC MPC5xx HAL."
}
 
cdl_option CYGBLD_BUILD_VERSION_TOOL {
display "Build MPC5xx version dump tool"
default_value 0
requires { CYG_HAL_STARTUP == "RAM" }
no_define
description "This option enables the building of a tool which will print the version identifiers of the CPU."
make -priority 320 {
<PREFIX>/bin/mpc5xxrev : <PACKAGE>/src/mpc5xxrev.c
@sh -c "mkdir -p src $(dir $@)"
$(CC) -c $(INCLUDE_PATH) -Wp,-MD,deps.tmp -I$(dir $<) $(CFLAGS) -o src/mpc5xxrev.o $<
@echo $@ ": \\" > $(notdir $@).deps
@echo $(wildcard $(PREFIX)/lib/*) " \\" >> $(notdir $@).deps
@tail +2 deps.tmp >> $(notdir $@).deps
@echo >> $(notdir $@).deps
@rm deps.tmp
$(CC) $(LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ src/mpc5xxrev.o
}
}
 
}
/tests/intr0.c
0,0 → 1,307
//=================================================================
//
// intr0.c
//
// Interrupt test 0
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov
// Contributors: jskov
// Date: 1998-12-01
// Description: Simple test of MPC860 interrupt handling when the
// kernel has not been configured. Uses timer interrupts.
// Options:
//####DESCRIPTIONEND####
 
//#define DEBUG_PRINTFS
#ifdef DEBUG_PRINTFS
extern diag_printf( char *format, ... );
#endif
 
#include <pkgconf/hal.h>
 
#define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
#include <cyg/hal/ppc_regs.h>
 
#include <cyg/hal/hal_intr.h>
 
#include <cyg/infra/testcase.h>
 
#ifdef CYGSEM_HAL_POWERPC_MPC860_CPM_ENABLE
 
#undef CHECK(b)
#define CHECK(b) CYG_TEST_CHECK(b,#b)
 
// Can't rely on Cyg_Interrupt class being defined.
#define Cyg_InterruptHANDLED 1
 
// This is the period between interrupts, measured in decrementer ticks.
// Period must be longer than the time required for setting up all the
// interrupt handlers.
#define PIT_PERIOD 5000
 
#ifdef CYGPKG_HAL_POWERPC_MBX
#define TB_PERIOD (PIT_PERIOD*384) // PTA period is 15.36 uS
#else
#define TB_PERIOD (PIT_PERIOD*32) // assuming 512/16 divisors
#endif
 
#define ID_RTC_SEC 12345
#define ID_RTC_ALR 23451
#define ID_PIT 34512
#define ID_TBA 45123
#define ID_TBB 51234
 
volatile cyg_uint32 count = 0;
 
// Time/PERIOD 0 1 2 3 4 5 6 7 8 9 10
// Interrupt PIT TBA PIT PIT TBB PIT PIT
// pit_count 0 0 0 1 1 2 2 3 3 4 4
// count 0 0 1 3 4 4 5 40 41 42
 
static cyg_uint32 count_verify_table[] = {1, 4, 5, 41, 42};
static int pit_count = 0;
 
// These are useful for debugging:
static cyg_uint32 count_actual_table[] = { -1, -1, -1, -1, -1};
static cyg_uint32 tbr_actual_table[] = { -1, -1, -1, -1, -1};
 
// Periodic timer ISR. Should be executing 5 times.
static cyg_uint32 isr_pit(CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
cyg_uint32 verify_value;
 
CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
 
CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_PIT == vector, "Wrong vector!");
CYG_ASSERT (ID_PIT == data, "Wrong data!");
 
HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_PIT);
 
count++;
 
count_actual_table[pit_count] = count;
{
cyg_uint32 tbl;
CYGARC_MFTB (TBL_R, tbl);
tbr_actual_table[pit_count] = tbl;
}
 
verify_value = count_verify_table[pit_count++];
 
#ifdef DEBUG_PRINTFS
diag_printf( "ISR_PIT executed %d of 5\n", pit_count );
#endif
 
CYG_ASSERT (count == verify_value, "Count wrong!");
 
// End of test when count is 42. Mask interrupts and print PASS text.
if (42 <= count || 5 == pit_count) {
HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_PIT);
HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
 
#ifdef DEBUG_PRINTFS
diag_printf( "INFO: Actual counts: %d %d %d %d %d\n",
count_actual_table[0],
count_actual_table[1],
count_actual_table[2],
count_actual_table[3],
count_actual_table[4] );
diag_printf( "INFO: Actuals tbrs: %d %d %d %d %d\n",
tbr_actual_table[0],
tbr_actual_table[1],
tbr_actual_table[2],
tbr_actual_table[3],
tbr_actual_table[4] );
#endif
if (42 == count && 5 == pit_count)
CYG_TEST_PASS_FINISH("Intr 0 OK");
else
CYG_TEST_FAIL_FINISH("Intr 0 Failed.");
}
 
return Cyg_InterruptHANDLED;
}
 
// TimeBase A ISR. Should be executing once.
static cyg_uint32 isr_tba(CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
 
CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_TB_A == vector, "Wrong vector!");
CYG_ASSERT (ID_TBA == data, "Wrong data!");
 
HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
 
count = count * 3;
 
#ifdef DEBUG_PRINTFS
diag_printf( "ISR_TBA executed\n" );
#endif
 
return Cyg_InterruptHANDLED;
}
 
// TimeBase B ISR. Should be executing once.
static cyg_uint32 isr_tbb(CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
 
CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_TB_B == vector, "Wrong vector!");
CYG_ASSERT (ID_TBB == data, "Wrong data!");
 
HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
 
count = count * 8;
 
#ifdef DEBUG_PRINTFS
diag_printf( "ISR_TBB executed\n" );
#endif
 
return Cyg_InterruptHANDLED;
}
 
void intr0_main( void )
{
CYG_TEST_INIT();
 
#if 0
// The A.3 revision of the CPU I'm using at the moment generates a
// machine check exception when writing to IMM_RTCSC. Smells a
// bit like the "SIU4. Spurious External Bus Transaction Following
// PLPRCR Write." CPU errata. Have to find out for sure. Run real
// time clock interrupts on level 0
{
// Still to do.
}
#endif
 
// Run periodic timer interrupt on level 1
{
cyg_uint16 piscr;
 
// Attach pit arbiter.
HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_LVL1,
&hal_arbitration_isr_pit, ID_PIT, 0);
HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_LVL1);
 
// Attach pit isr.
HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_PIT, &isr_pit,
ID_PIT, 0);
HAL_INTERRUPT_SET_LEVEL (CYGNUM_HAL_INTERRUPT_SIU_PIT, 1);
HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_PIT);
 
 
// Set period.
HAL_WRITE_UINT32 (CYGARC_REG_IMM_PITC,
(2*PIT_PERIOD) << CYGARC_REG_IMM_PITC_COUNT_SHIFT);
 
#ifdef DEBUG_PRINTFS
diag_printf( "PIT set to %d\n", 2*PIT_PERIOD );
#endif
// Enable.
HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
piscr |= CYGARC_REG_IMM_PISCR_PTE;
HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
}
 
// Run timebase interrupts on level 2
{
cyg_uint16 tbscr;
cyg_uint32 tbl;
 
// Attach tb arbiter.
HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_LVL2,
&hal_arbitration_isr_tb, ID_TBA, 0);
HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_LVL2);
 
// Attach tb isrs.
HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_TB_A, &isr_tba,
ID_TBA, 0);
HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_TB_B, &isr_tbb,
ID_TBB, 0);
HAL_INTERRUPT_SET_LEVEL (CYGNUM_HAL_INTERRUPT_SIU_TB_A, 2);
HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
 
// Set reference A & B registers.
CYGARC_MFTB (TBL_R, tbl);
tbl += TB_PERIOD*3;
HAL_WRITE_UINT32 (CYGARC_REG_IMM_TBREF0, tbl);
tbl += TB_PERIOD*4;
HAL_WRITE_UINT32 (CYGARC_REG_IMM_TBREF1, tbl);
 
#ifdef DEBUG_PRINTFS
diag_printf( "TB initial %d, !1 %d !2 %d\n",
tbl - 7*TB_PERIOD,
tbl - 4*TB_PERIOD,
tbl - 0*TB_PERIOD );
#endif
// Enable.
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr |= (CYGARC_REG_IMM_TBSCR_REFA | CYGARC_REG_IMM_TBSCR_REFB |
CYGARC_REG_IMM_TBSCR_TBE);
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr |= CYGARC_REG_IMM_TBSCR_REFAE | CYGARC_REG_IMM_TBSCR_REFBE;
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
}
 
HAL_ENABLE_INTERRUPTS();
 
for (;;);
}
 
externC void
cyg_start( void )
{
intr0_main();
}
 
#else // ifdef CYGSEM_HAL_POWERPC_MPC860_CPM_ENABLE
 
externC void
cyg_start( void )
{
CYG_TEST_INIT();
CYG_TEST_PASS_FINISH("N/A: CYGSEM_HAL_POWERPC_MPC860_CPM_ENABLE disabled");
}
 
#endif // ifdef CYGSEM_HAL_POWERPC_MPC860_CPM_ENABLE
 
// EOF intr0.c
/include/var_cache.h
0,0 → 1,177
#ifndef CYGONCE_VAR_CACHE_H
#define CYGONCE_VAR_CACHE_H
//=============================================================================
//
// var_cache.h
//
// Variant HAL cache control API
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Bob Koninckx
// Contributors:Bob Koninckx
// Date: 2001-12-11
// Purpose: Variant cache control API
// Description: The macros defined here provide the HAL APIs for handling
// cache control operations on the MPC8xx variant CPUs.
// Usage: Is included via the architecture cache header:
// #include <cyg/hal/hal_cache.h>
// ...
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <pkgconf/hal.h>
#include <cyg/infra/cyg_type.h>
 
#include <cyg/hal/ppc_regs.h>
 
#include <cyg/hal/plf_cache.h>
 
 
//-----------------------------------------------------------------------------
// MPC5xx has no data or instruction cache. This is going to be a relatively
// simple file
 
//-----------------------------------------------------------------------------
// Global control of data cache
 
// Enable the data cache
#define HAL_DCACHE_ENABLE() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Disable the data cache
#define HAL_DCACHE_DISABLE() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Invalidate the entire cache
#define HAL_DCACHE_INVALIDATE_ALL() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Synchronize the contents of the cache with memory.
#define HAL_DCACHE_SYNC() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Query the state of the data cache
#define HAL_DCACHE_IS_ENABLED(_state_) \
CYG_MACRO_START \
_state_ = 0; \
CYG_MACRO_END
 
// Load the contents of the given address range into the data cache
// and then lock the cache so that it stays there.
 
//#define HAL_DCACHE_LOCK(_base_, _size_)
// Undo a previous lock operation
//#define HAL_DCACHE_UNLOCK(_base_, _size_)
 
// Unlock entire cache
//#define HAL_DCACHE_UNLOCK_ALL()
 
 
//-----------------------------------------------------------------------------
// Data cache line control
 
// Write dirty cache lines to memory and invalidate the cache entries
// for the given address range.
//#define HAL_DCACHE_FLUSH( _base_ , _size_ )
// Invalidate cache lines in the given range without writing to memory.
//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ )
 
// Write dirty cache lines to memory for the given address range.
//#define HAL_DCACHE_STORE( _base_ , _size_ )
 
// Preread the given range into the cache with the intention of reading
// from it later.
//#define HAL_DCACHE_READ_HINT( _base_ , _size_ )
 
// Preread the given range into the cache with the intention of writing
// to it later.
//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ )
 
// Allocate and zero the cache lines associated with the given range.
//#define HAL_DCACHE_ZERO( _base_ , _size_ )
 
//-----------------------------------------------------------------------------
// Global control of Instruction cache
 
// Enable the instruction cache
#define HAL_ICACHE_ENABLE() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Disable the instruction cache
#define HAL_ICACHE_DISABLE() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Invalidate the entire cache
#define HAL_ICACHE_INVALIDATE_ALL() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Synchronize the contents of the cache with memory.
#define HAL_ICACHE_SYNC() \
CYG_MACRO_START \
CYG_MACRO_END
 
// Query the state of the instruction cache
#define HAL_ICACHE_IS_ENABLED(_state_) \
CYG_MACRO_START \
_state_ = 0; \
CYG_MACRO_END
 
// Load the contents of the given address range into the instruction cache
// and then lock the cache so that it stays there.
//#define HAL_ICACHE_LOCK(_base_, _size_)
 
// Undo a previous lock operation
//#define HAL_ICACHE_UNLOCK(_base_, _size_)
 
// Unlock entire cache
//#define HAL_ICACHE_UNLOCK_ALL()
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_VAR_CACHE_H
// End of var_cache.h
/include/var_intr.h
0,0 → 1,2845
#ifndef CYGONCE_VAR_INTR_H
#define CYGONCE_VAR_INTR_H
//=============================================================================
//
// var_intr.h
//
// Variant HAL interrupt and clock support
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Bob Koninckx
// Contributors:Bob Koninckx
// Date: 2001-12-15
// Purpose: Variant interrupt support
// Description: The macros defined here provide the HAL APIs for handling
// interrupts and the clock on the MPC5xx variant CPUs.
// Usage: Is included via the architecture interrupt header:
// #include <cyg/hal/hal_intr.h>
// ...
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <pkgconf/hal.h>
 
#include <cyg/hal/plf_intr.h>
 
#include <cyg/infra/cyg_type.h> // types
 
#include <cyg/hal/ppc_regs.h> // register definitions
 
#include <cyg/hal/hal_io.h> // io macros
#include <cyg/infra/cyg_ass.h> // CYG_FAIL
 
//-----------------------------------------------------------------------------
// Special IMB3 arbitration code
typedef struct t_hal_mpc5xx_arbitration_data {
cyg_uint32 priority;
CYG_ADDRWORD data;
cyg_uint32 (* arbiter)(CYG_ADDRWORD, CYG_ADDRWORD);
void * reserved;
} hal_mpc5xx_arbitration_data;
 
externC void
hal_mpc5xx_install_arbitration_isr(hal_mpc5xx_arbitration_data *adata);
externC void
hal_mpc5xx_remove_arbitration_isr(hal_mpc5xx_arbitration_data *adata);
 
//-----------------------------------------------------------------------------
// Exception vectors.
 
// Additional exceptions on the MPC5xx CPUs
#define CYGNUM_HAL_VECTOR_RESERVED_F 15
#define CYGNUM_HAL_VECTOR_SW_EMUL 16
#define CYGNUM_HAL_VECTOR_RESERVED_11 17
#define CYGNUM_HAL_VECTOR_RESERVED_12 18
#define CYGNUM_HAL_VECTOR_ITLB_ERROR 19
#define CYGNUM_HAL_VECTOR_DTLB_ERROR 20
#define CYGNUM_HAL_VECTOR_RESERVED_15 21
#define CYGNUM_HAL_VECTOR_RESERVED_16 22
#define CYGNUM_HAL_VECTOR_RESERVED_17 23
#define CYGNUM_HAL_VECTOR_RESERVED_18 24
#define CYGNUM_HAL_VECTOR_RESERVED_19 25
#define CYGNUM_HAL_VECTOR_RESERVED_1A 26
#define CYGNUM_HAL_VECTOR_RESERVED_1B 27
#define CYGNUM_HAL_VECTOR_DATA_BP 28
#define CYGNUM_HAL_VECTOR_INSTRUCTION_BP 29
#define CYGNUM_HAL_VECTOR_PERIPHERAL_BP 30
#define CYGNUM_HAL_VECTOR_NMI 31
 
#define CYGNUM_HAL_VSR_MAX CYGNUM_HAL_VECTOR_NMI
 
// These are the values used when passed out to an
// external exception handler using cyg_hal_deliver_exception()
#define CYGNUM_HAL_EXCEPTION_RESERVED_0 CYGNUM_HAL_VECTOR_RESERVED_0
#define CYGNUM_HAL_EXCEPTION_MACHINE_CHECK CYGNUM_HAL_VECTOR_MACHINE_CHECK
#define CYGNUM_HAL_EXCEPTION_RESERVED_3 CYGNUM_HAL_VECTOR_RESERVED_3
#define CYGNUM_HAL_EXCEPTION_RESERVED_4 CYGNUM_HAL_VECTOR_RESERVED_4
#define CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS CYGNUM_HAL_VECTOR_ALIGNMENT
#define CYGNUM_HAL_EXCEPTION_FPU_NOT_AVAIL CYGNUM_HAL_VECTOR_FP_UNAVAILABLE
#define CYGNUM_HAL_EXCEPTION_RESERVED_A CYGNUM_HAL_VECTOR_RESERVED_A
#define CYGNUM_HAL_EXCEPTION_RESERVED_B CYGNUM_HAL_VECTOR_RESERVED_B
#define CYGNUM_HAL_EXCEPTION_SYSTEM_CALL CYGNUM_HAL_VECTOR_SYSTEM_CALL
#define CYGNUM_HAL_EXCEPTION_TRACE CYGNUM_HAL_VECTOR_TRACE
#define CYGNUM_HAL_EXCEPTION_FP_ASSIST CYGNUM_HAL_VECTOR_FP_ASSIST
#define CYGNUM_HAL_EXCEPTION_RESERVED_F CYGNUM_HAL_VECTOR_RESERVED_F
#define CYGNUM_HAL_EXCEPTION_SW_EMUL CYGNUM_HAL_VECTOR_SW_EMUL
#define CYGNUM_HAL_EXCEPTION_RESERVED_11 CYGNUM_HAL_VECTOR_RESERVED_11
#define CYGNUM_HAL_EXCEPTION_RESERVED_12 CYGNUM_HAL_VECTOR_RESERVED_12
#define CYGNUM_HAL_EXCEPTION_CODE_TLBERROR_ACCESS CYGNUM_HAL_VECTOR_ITLB_ERROR
#define CYGNUM_HAL_EXCEPTION_DATA_TLBERROR_ACCESS CYGNUM_HAL_VECTOR_DTLB_ERROR
#define CYGNUM_HAL_EXCEPTION_RESERVED_15 CYGNUM_HAL_VECTOR_RESERVED_15
#define CYGNUM_HAL_EXCEPTION_RESERVED_16 CYGNUM_HAL_VECTOR_RESERVED_16
#define CYGNUM_HAL_EXCEPTION_RESERVED_17 CYGNUM_HAL_VECTOR_RESERVED_17
#define CYGNUM_HAL_EXCEPTION_RESERVED_18 CYGNUM_HAL_VECTOR_RESERVED_18
#define CYGNUM_HAL_EXCEPTION_RESERVED_19 CYGNUM_HAL_VECTOR_RESERVED_19
#define CYGNUM_HAL_EXCEPTION_RESERVED_1A CYGNUM_HAL_VECTOR_RESERVED_1A
#define CYGNUM_HAL_EXCEPTION_RESERVED_1B CYGNUM_HAL_VECTOR_RESERVED_1B
#define CYGNUM_HAL_EXCEPTION_DATA_BP CYGNUM_HAL_VECTOR_DATA_BP
#define CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP CYGNUM_HAL_VECTOR_INSTRUCTION_BP
#define CYGNUM_HAL_EXCEPTION_PERIPHERAL_BP CYGNUM_HAL_VECTOR_PERIPHERAL_BP
#define CYGNUM_HAL_EXCEPTION_NMI CYGNUM_HAL_VECTOR_NMI
 
// decoded exception vectors (decoded program exception)
#define CYGNUM_HAL_EXCEPTION_TRAP (-1)
#define CYGNUM_HAL_EXCEPTION_PRIVILEGED_INSTRUCTION (-2)
#define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION (-3)
#define CYGNUM_HAL_EXCEPTION_FPU (-4)
 
#define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_RESERVED_0
#define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_NMI
 
#define CYGHWR_HAL_EXCEPTION_VECTORS_DEFINED
 
//-----------------------------------------------------------------------------
// Interrupts
 
// The first level of external interrupts
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ0 1
#define CYGNUM_HAL_INTERRUPT_SIU_LVL0 2
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ1 3
#define CYGNUM_HAL_INTERRUPT_SIU_LVL1 4
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ2 5
#define CYGNUM_HAL_INTERRUPT_SIU_LVL2 6
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ3 7
#define CYGNUM_HAL_INTERRUPT_SIU_LVL3 8
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ4 9
#define CYGNUM_HAL_INTERRUPT_SIU_LVL4 10
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ5 11
#define CYGNUM_HAL_INTERRUPT_SIU_LVL5 12
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ6 13
#define CYGNUM_HAL_INTERRUPT_SIU_LVL6 14
#define CYGNUM_HAL_INTERRUPT_SIU_IRQ7 15
#define CYGNUM_HAL_INTERRUPT_SIU_LVL7 16
 
// Further decoded interrupts
#define CYGNUM_HAL_INTERRUPT_SIU_TB_A 17 // Time base reference A
#define CYGNUM_HAL_INTERRUPT_SIU_TB_B 18 // Time base reference B
#define CYGNUM_HAL_INTERRUPT_SIU_PIT 19 // Periodic interrupt timer
#define CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC 20 // Real time clock once per second
#define CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR 21 // Real time clock alarm
#define CYGNUM_HAL_INTERRUPT_SIU_COL 22 // Change of lock of the PLL
 
// Even further decoded interrupts
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI1 23 // QUADCA queue 1 completion
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI1 24 // QUADCA queue 1 pause
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI2 25 // QUADCA queue 2 completion
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI2 26 // QUADCA queue 2 pause
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI1 27 // QUADCB queue 1 completion
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI1 28 // QUADCB queue 1 pause
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI2 29 // QUADCB queue 2 completion
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI2 30 // QUADCB queue 2 pause
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TX 31 // SCI 0 transmit
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TXC 32 // SCI 0 transmit complete
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX 33 // SCI 0 receiver full
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_IDLE 34 // SCI 0 idle line detected
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TX 35 // SCI 1 transmit
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXC 36 // SCI 1 transmit complete
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX 37 // SCI 1 receiver full
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_IDLE 38 // SCI 1 idle line detected
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQTHF 39 // SCI 1 RX Queue top half full
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQBHF 40 // SCI 1 RX Queue bottom half full
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQTHE 41 // SCI 1 TX Queue top half full
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQBHE 42 // SCI 1 TX Queue bottom half full
#define CYGNUM_HAL_INTERRUPT_IMB3_SPI_FI 43 // SPI finished
#define CYGNUM_HAL_INTERRUPT_IMB3_SPI_MODF 44 // SPI Mode fault
#define CYGNUM_HAL_INTERRUPT_IMB3_SPI_HALTA 45 // SPI Halt Acknowledge
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_BOFF 46 // TOUCANA buss off
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_ERR 47 // TOUCANA error
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_WU 48 // TOUCANA wake up
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0 49 // TOUCANA buffer 0
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B1 50 // TOUCANA buffer 1
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B2 51 // TOUCANA buffer 2
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B3 52 // TOUCANA buffer 3
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B4 53 // TOUCANA buffer 4
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B5 54 // TOUCANA buffer 5
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B6 55 // TOUCANA buffer 6
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B7 56 // TOUCANA buffer 7
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B8 57 // TOUCANA buffer 8
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B9 58 // TOUCANA buffer 9
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B10 59 // TOUCANA buffer 10
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B11 60 // TOUCANA buffer 11
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B12 61 // TOUCANA buffer 12
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B13 62 // TOUCANA buffer 13
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B14 63 // TOUCANA buffer 14
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B15 64 // TOUCANA buffer 15
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_BOFF 65 // TOUCANB buss off
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_ERR 66 // TOUCANB error
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_WU 67 // TOUCANB wake up
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0 68 // TOUCANB buffer 0
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B1 69 // TOUCANB buffer 1
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B2 70 // TOUCANB buffer 2
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B3 71 // TOUCANB buffer 3
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B4 72 // TOUCANB buffer 4
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B5 73 // TOUCANB buffer 5
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B6 74 // TOUCANB buffer 6
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B7 75 // TOUCANB buffer 7
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B8 76 // TOUCANB buffer 8
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B9 77 // TOUCANB buffer 9
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B10 78 // TOUCANB buffer 10
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B11 79 // TOUCANB buffer 11
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B12 80 // TOUCANB buffer 12
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B13 81 // TOUCANB buffer 13
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B14 82 // TOUCANB buffer 14
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B15 83 // TOUCANB buffer 15
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0 84 // TPU A channel 0
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH1 85 // TPU A channel 1
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH2 86 // TPU A channel 2
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH3 87 // TPU A channel 3
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH4 88 // TPU A channel 4
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH5 89 // TPU A channel 5
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH6 90 // TPU A channel 6
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH7 91 // TPU A channel 7
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH8 92 // TPU A channel 8
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH9 93 // TPU A channel 9
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH10 94 // TPU A channel 10
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH11 95 // TPU A channel 11
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH12 96 // TPU A channel 12
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH13 97 // TPU A channel 13
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH14 98 // TPU A channel 14
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH15 99 // TPU A channel 15
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0 100 // TPU B channel 0
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH1 101 // TPU B channel 1
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH2 102 // TPU B channel 2
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH3 103 // TPU B channel 3
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH4 104 // TPU B channel 4
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH5 105 // TPU B channel 5
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH6 106 // TPU B channel 6
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH7 107 // TPU B channel 7
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH8 108 // TPU B channel 8
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH9 109 // TPU B channel 9
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH10 110 // TPU B channel 10
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH11 111 // TPU B channel 11
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH12 112 // TPU B channel 12
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH13 113 // TPU B channel 13
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH14 114 // TPU B channel 14
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH15 115 // TPU B channel 15
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM0 116 // MIOS PWM0
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM1 117 // MIOS PWM1
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM2 118 // MIOS PWM2
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM3 119 // MIOS PWM3
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM6 120 // MIOS MCSM6
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM11 121 // MIOS MDASM11
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM12 122 // MIOS MDASM12
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM13 123 // MIOS MDASM13
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM14 124 // MIOS MDASM14
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM15 125 // MIOS MDASM15
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM16 126 // MIOS PWM16
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM17 127 // MIOS PWM17
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM18 128 // MIOS PWM18
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM19 129 // MIOS PWM19
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM22 130 // MIOS MCSM22
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM27 131 // MIOS MDASM27
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM28 132 // MIOS MDASM28
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM29 133 // MIOS MDASM29
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM30 134 // MIOS MDASM30
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM31 135 // MIOS MDASM31
 
#define CYGNUM_HAL_ISR_MIN CYGNUM_HAL_INTERRUPT_DECREMENTER
#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM31
 
//--------------------------------------------------------------------------
// Interrupt controller access
static __inline__ void
cyg_hal_interrupt_mask ( cyg_uint32 vector )
{
switch (vector) {
case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
{
// SIU interrupt vectors
cyg_uint32 simask;
 
HAL_READ_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
simask &= ~(((cyg_uint32) CYGARC_REG_IMM_SIMASK_IRM0)
>> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_TB_A :
{
// TimeBase A interrupt
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFAE);
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFA); // Prevent from clearing interrupt flags
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFB); // accidently. Just do what is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_TB_B :
{
// TimeBase B interrupt
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFBE);
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFA); // Prevent from clearing interrupt flags
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFB); // accidently. Just do what is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_PIT:
{
// Periodic Interrupt
cyg_uint16 piscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
piscr &= ~(CYGARC_REG_IMM_PISCR_PIE);
piscr &= ~(CYGARC_REG_IMM_PISCR_PS); // Prevent from clearing interrupt flag.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
{
// Real Time Clock Second
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SIE);
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SEC); // Prevent from clearing interrupt flags
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALR); // Accidently. Just do what is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
{
// Real Time Clock Alarm
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALE);
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SEC); // Prevent from clearing interrupt flags
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALR); // accidently. Just do what is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_COL:
{
// PLL change of lock
cyg_uint16 colir;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_COLIR, colir);
colir &= ~(CYGARC_REG_IMM_COLIR_COLIE);
colir &= ~(CYGARC_REG_IMM_COLIR_COLIS); // Prevent from clearing interrupt flag accidently.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_COLIR, colir);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
quacr1 &= ~(CYGARC_REG_IMM_QUACR1_CIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
quacr1 &= ~(CYGARC_REG_IMM_QUACR1_PIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI2:
{
cyg_uint16 quacr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
quacr2 &= ~(CYGARC_REG_IMM_QUACR2_CIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI2:
{
cyg_uint16 quacr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
quacr2 &= ~(CYGARC_REG_IMM_QUACR2_PIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
quacr1 &= ~(CYGARC_REG_IMM_QUACR1_CIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
quacr1 &= ~(CYGARC_REG_IMM_QUACR1_PIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI2:
{
cyg_uint16 quacr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
quacr2 &= ~(CYGARC_REG_IMM_QUACR2_CIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI2:
{
cyg_uint16 quacr2;
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
quacr2 &= ~(CYGARC_REG_IMM_QUACR2_PIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_TIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TXC:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_TCIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_RIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_IDLE:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_ILIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_TIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXC:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_TCIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_RIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_IDLE:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 &= ~(CYGARC_REG_IMM_SCCxR1_ILIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQTHF:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr &= ~(CYGARC_REG_IMM_QSCI1CR_QTHFI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQBHF:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr &= ~(CYGARC_REG_IMM_QSCI1CR_QBHFI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQTHE:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr &= ~(CYGARC_REG_IMM_QSCI1CR_QTHEI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQBHE:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr &= ~(CYGARC_REG_IMM_QSCI1CR_QBHEI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_FI:
{
cyg_uint16 spcr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SPCR2, spcr2);
spcr2 &= ~(CYGARC_REG_IMM_SPCR2_SPIFIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SPCR2, spcr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_MODF:
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_HALTA:
{
cyg_uint16 spcr3;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SPCR3, spcr3);
spcr3 &= ~(CYGARC_REG_IMM_SPCR3_HMIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SPCR3, spcr3);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_BOFF:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
canctrl0 &= ~(CYGARC_REG_IMM_CANCTRL0_BOFFMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
break;
}
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_ERR:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
canctrl0 &= ~(CYGARC_REG_IMM_CANCTRL0_ERRMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_WU:
{
cyg_uint16 tcnmcr;
HAL_READ_UINT16(CYGARC_REG_IMM_TCNMCR_A, tcnmcr);
tcnmcr &= ~(CYGARC_REG_IMM_TCNMCR_WAKEMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_TCNMCR_A, tcnmcr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B15:
{
cyg_uint16 imask;
 
HAL_READ_UINT16(CYGARC_REG_IMM_IMASK_A, imask);
imask &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_IMASK_A, imask);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_BOFF:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
canctrl0 &= ~(CYGARC_REG_IMM_CANCTRL0_BOFFMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_ERR:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
canctrl0 &= ~(CYGARC_REG_IMM_CANCTRL0_ERRMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_WU:
{
cyg_uint16 tcnmcr;
HAL_READ_UINT16(CYGARC_REG_IMM_TCNMCR_B, tcnmcr);
tcnmcr &= ~(CYGARC_REG_IMM_TCNMCR_WAKEMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_TCNMCR_B, tcnmcr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B15:
{
cyg_uint16 imask;
 
HAL_READ_UINT16(CYGARC_REG_IMM_IMASK_B, imask);
imask &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_IMASK_B, imask);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH15:
{
cyg_uint16 cier;
HAL_READ_UINT16(CYGARC_REG_IMM_CIER_A, cier);
cier &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_CIER_A, cier);
break;
}
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH15:
{
cyg_uint16 cier;
HAL_READ_UINT16(CYGARC_REG_IMM_CIER_B, cier);
cier &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_CIER_B, cier);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM0:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN0);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM1:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM2:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM3:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN3);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM6:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN6);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM11:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN11);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM12:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN12);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM13:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN13);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM14:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN14);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM15:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 &= ~(CYGARC_REG_IMM_MIOS1ER0_EN15);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM16:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN16);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM17:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN17);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM18:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN18);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM19:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN19);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM22:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN22);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM27:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN27);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM28:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN28);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM29:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN29);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM30:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN30);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM31:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 &= ~(CYGARC_REG_IMM_MIOS1ER1_EN31);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
default:
CYG_FAIL("Unknown Interrupt!!!");
break;
}
}
 
static __inline__ void
cyg_hal_interrupt_unmask ( cyg_uint32 vector )
{
switch (vector) {
case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
{
// SIU interrupt vectors
cyg_uint32 simask;
 
HAL_READ_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
simask |= (((cyg_uint32) CYGARC_REG_IMM_SIMASK_IRM0)
>> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_TB_A :
{
// TimeBase A interrupt
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr |= (CYGARC_REG_IMM_TBSCR_REFAE);
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFA); // Prevent from clearing interrupt flags
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFB); // accidently. Just do what is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_TB_B :
{
// TimeBase B interrupt
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr |= (CYGARC_REG_IMM_TBSCR_REFBE);
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFA); // Prevent from clearing interrupt flags
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFB); // accidently. Just do what is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_PIT:
{
// Periodic Interrupt
cyg_uint16 piscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
piscr |= (CYGARC_REG_IMM_PISCR_PIE);
piscr &= ~(CYGARC_REG_IMM_PISCR_PS); // Prevent from clearing interrupt flag.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
{
// Real Time Clock Second
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
rtcsc |= (CYGARC_REG_IMM_RTCSC_SIE);
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SEC); // Prevent from clearing interrupt flags
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALR); // accidently. Just do what is asdked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
break;
}
case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
{
// Real Time Clock Alarm
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
rtcsc |= (CYGARC_REG_IMM_RTCSC_ALE);
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SEC); // Prevent from clearing interrupt flags
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALR); // accidently. Just do what is asdked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_COL:
{
// PLL change of lock
cyg_uint16 colir;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_COLIR, colir);
colir |= (CYGARC_REG_IMM_COLIR_COLIE);
colir &= ~(CYGARC_REG_IMM_COLIR_COLIS); // Prevent from clearing interrupt flag accidently.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_COLIR, colir);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
quacr1 |= (CYGARC_REG_IMM_QUACR1_CIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
quacr1 |= (CYGARC_REG_IMM_QUACR1_PIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_A, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI2:
{
cyg_uint16 quacr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
quacr2 |= (CYGARC_REG_IMM_QUACR2_CIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI2:
{
cyg_uint16 quacr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
quacr2 |= (CYGARC_REG_IMM_QUACR2_PIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_A, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
quacr1 |= (CYGARC_REG_IMM_QUACR1_CIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI1:
{
cyg_uint16 quacr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
quacr1 |= (CYGARC_REG_IMM_QUACR1_PIE1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR1_B, quacr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI2:
{
cyg_uint16 quacr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
quacr2 |= (CYGARC_REG_IMM_QUACR2_CIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI2:
{
cyg_uint16 quacr2;
HAL_READ_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
quacr2 |= (CYGARC_REG_IMM_QUACR2_PIE2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUACR2_B, quacr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_TIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TXC:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_TCIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_RIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_IDLE:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_ILIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC1R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_TIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXC:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_TCIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_RIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_IDLE:
{
cyg_uint16 sccxr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
sccxr1 |= (CYGARC_REG_IMM_SCCxR1_ILIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SCC2R1, sccxr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQTHF:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr |= (CYGARC_REG_IMM_QSCI1CR_QTHFI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQBHF:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr |= (CYGARC_REG_IMM_QSCI1CR_QBHFI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQTHE:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr |= (CYGARC_REG_IMM_QSCI1CR_QTHEI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQBHE:
{
cyg_uint16 qsci1cr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
qsci1cr |= (CYGARC_REG_IMM_QSCI1CR_QBHEI);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1CR, qsci1cr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_FI:
{
cyg_uint16 spcr2;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SPCR2, spcr2);
spcr2 |= (CYGARC_REG_IMM_SPCR2_SPIFIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SPCR2, spcr2);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_MODF:
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_HALTA:
{
cyg_uint16 spcr3;
 
HAL_READ_UINT16(CYGARC_REG_IMM_SPCR3, spcr3);
spcr3 |= (CYGARC_REG_IMM_SPCR3_HMIE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SPCR3, spcr3);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_BOFF:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
canctrl0 |= (CYGARC_REG_IMM_CANCTRL0_BOFFMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
break;
}
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_ERR:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
canctrl0 |= (CYGARC_REG_IMM_CANCTRL0_ERRMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A, canctrl0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_WU:
{
cyg_uint16 tcnmcr;
HAL_READ_UINT16(CYGARC_REG_IMM_TCNMCR_A, tcnmcr);
tcnmcr |= (CYGARC_REG_IMM_TCNMCR_WAKEMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_TCNMCR_A, tcnmcr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B15:
{
cyg_uint16 imask;
 
HAL_READ_UINT16(CYGARC_REG_IMM_IMASK_A, imask);
imask |= (((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_IMASK_A, imask);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_BOFF:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
canctrl0 |= (CYGARC_REG_IMM_CANCTRL0_BOFFMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_ERR:
{
cyg_uint16 canctrl0;
HAL_READ_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
canctrl0 |= (CYGARC_REG_IMM_CANCTRL0_ERRMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B, canctrl0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_WU:
{
cyg_uint16 tcnmcr;
HAL_READ_UINT16(CYGARC_REG_IMM_TCNMCR_B, tcnmcr);
tcnmcr |= (CYGARC_REG_IMM_TCNMCR_WAKEMSK);
HAL_WRITE_UINT16(CYGARC_REG_IMM_TCNMCR_B, tcnmcr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B15:
{
cyg_uint16 imask;
 
HAL_READ_UINT16(CYGARC_REG_IMM_IMASK_B, imask);
imask |= (((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_IMASK_B, imask);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH15:
{
cyg_uint16 cier;
HAL_READ_UINT16(CYGARC_REG_IMM_CIER_A, cier);
cier |= (((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_CIER_A, cier);
break;
}
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH15:
{
cyg_uint16 cier;
HAL_READ_UINT16(CYGARC_REG_IMM_CIER_B, cier);
cier |= (((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_CIER_B, cier);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM0:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN0);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM1:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM2:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM3:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN3);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM6:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN6);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM11:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN11);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM12:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN12);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM13:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN13);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM14:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN14);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM15:
{
cyg_uint16 mios1er0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
mios1er0 |= (CYGARC_REG_IMM_MIOS1ER0_EN15);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER0, mios1er0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM16:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN16);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM17:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN17);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM18:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN18);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM19:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN19);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM22:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN22);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM27:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN27);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM28:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN28);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM29:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN29);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM30:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN30);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM31:
{
cyg_uint16 mios1er1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
mios1er1 |= (CYGARC_REG_IMM_MIOS1ER1_EN31);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1ER1, mios1er1);
break;
}
 
default:
CYG_FAIL("Unknown Interrupt!!!");
break;
}
}
 
static __inline__ void
cyg_hal_interrupt_acknowledge ( cyg_uint32 vector )
{
switch (vector) {
case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
{
// SIU interrupt vectors
cyg_uint32 sipend;
 
// When IRQx is configured as an edge interrupt it needs to be
// cleared. Write to INTx and IRQ/level bits are ignore so
// it's safe to do always.
HAL_READ_UINT32 (CYGARC_REG_IMM_SIPEND, sipend);
sipend |= (((cyg_uint32) CYGARC_REG_IMM_SIPEND_IRQ0)
>> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIPEND, sipend);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_TB_A:
{
// TimeBase A interrupt
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr |= CYGARC_REG_IMM_TBSCR_REFA;
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFB); // Only acknowledge the requested one
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_TB_B:
{
// TimeBase B interrupt
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr |= CYGARC_REG_IMM_TBSCR_REFB;
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFA); // Only acknowledge the requested one.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_PIT:
{
// Periodic Interrupt
cyg_uint16 piscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
piscr |= CYGARC_REG_IMM_PISCR_PS;
HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
{
// Real Time Clock Second
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
rtcsc |= CYGARC_REG_IMM_RTCSC_SEC;
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALR); // Only acknowledge the requested one
HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
{
// Real Time Clock Alarm
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
rtcsc |= CYGARC_REG_IMM_RTCSC_ALR;
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SEC); // Only acknowledge the requested one
HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_COL:
{
cyg_uint16 colir;
 
HAL_READ_UINT16(CYGARC_REG_IMM_COLIR, colir);
colir |= CYGARC_REG_IMM_COLIR_COLIS;
HAL_WRITE_UINT16(CYGARC_REG_IMM_COLIR, colir);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI1:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_CF1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI1:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_PF1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI2:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_CF2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI2:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_PF2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_A, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI1:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_CF1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI1:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_PF1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI2:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_CF2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI2:
{
cyg_uint16 quasr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
quasr0 &= ~(CYGARC_REG_IMM_QUASR0_PF2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUASR0_B, quasr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TX:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TXC:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX:
// Nothing needs to be done here
break;
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_IDLE:
{
cyg_uint16 scxsr;
HAL_READ_UINT16(CYGARC_REG_IMM_SC1SR, scxsr);
scxsr &= ~(CYGARC_REG_IMM_SCxSR_IDLE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SC1SR, scxsr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TX:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXC:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX:
// nothing needs to be done here
break;
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_IDLE:
{
cyg_uint16 scxsr;
HAL_READ_UINT16(CYGARC_REG_IMM_SC2SR, scxsr);
scxsr &= ~(CYGARC_REG_IMM_SCxSR_IDLE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SC2SR, scxsr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQTHF:
{
cyg_uint16 qsci1sr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
qsci1sr &= ~(CYGARC_REG_IMM_QSCI1SR_QTHF);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQBHF:
{
cyg_uint16 qsci1sr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
qsci1sr &= ~(CYGARC_REG_IMM_QSCI1SR_QBHF);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQTHE:
{
cyg_uint16 qsci1sr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
qsci1sr &= ~(CYGARC_REG_IMM_QSCI1SR_QTHE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQBHE:
{
cyg_uint16 qsci1sr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
qsci1sr &= ~(CYGARC_REG_IMM_QSCI1SR_QBHE);
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSCI1SR, qsci1sr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_FI:
{
cyg_uint16 spsr;
HAL_READ_UINT16(CYGARC_REG_IMM_SPSR, spsr);
spsr &= ~(CYGARC_REG_IMM_SPSR_SPIF);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SPSR, spsr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_MODF:
{
cyg_uint16 spsr;
HAL_READ_UINT16(CYGARC_REG_IMM_SPSR, spsr);
spsr &= ~(CYGARC_REG_IMM_SPSR_MODF);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SPSR, spsr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_HALTA:
{
cyg_uint16 spsr;
HAL_READ_UINT16(CYGARC_REG_IMM_SPSR, spsr);
spsr &= ~(CYGARC_REG_IMM_SPSR_HALTA);
HAL_WRITE_UINT16(CYGARC_REG_IMM_SPSR, spsr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_BOFF:
{
cyg_uint16 estat;
HAL_READ_UINT16(CYGARC_REG_IMM_ESTAT_A, estat); // Read the flag as a one
estat &= ~(CYGARC_REG_IMM_ESTAT_BOFFINT);
HAL_WRITE_UINT16(CYGARC_REG_IMM_ESTAT_A, estat); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_ERR:
{
cyg_uint16 estat;
HAL_READ_UINT16(CYGARC_REG_IMM_ESTAT_A, estat); // Read the flag as a one
estat &= ~(CYGARC_REG_IMM_ESTAT_ERRINT);
HAL_WRITE_UINT16(CYGARC_REG_IMM_ESTAT_A, estat); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_WU:
{
cyg_uint16 estat;
HAL_READ_UINT16(CYGARC_REG_IMM_ESTAT_A, estat); // Read tthe flag as a one
estat &= ~(CYGARC_REG_IMM_ESTAT_WAKEINT);
HAL_WRITE_UINT16(CYGARC_REG_IMM_ESTAT_A, estat); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B15:
{
cyg_uint16 iflag;
 
HAL_READ_UINT16(CYGARC_REG_IMM_IFLAG_A, iflag); // Read the flag as a one
iflag &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_IFLAG_A, iflag); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_BOFF:
{
cyg_uint16 estat;
HAL_READ_UINT16(CYGARC_REG_IMM_ESTAT_B, estat); // Read the flag as a one
estat &= ~(CYGARC_REG_IMM_ESTAT_BOFFINT);
HAL_WRITE_UINT16(CYGARC_REG_IMM_ESTAT_B, estat); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_ERR:
{
cyg_uint16 estat;
HAL_READ_UINT16(CYGARC_REG_IMM_ESTAT_B, estat); // Read the flag as a one
estat &= ~(CYGARC_REG_IMM_ESTAT_ERRINT);
HAL_WRITE_UINT16(CYGARC_REG_IMM_ESTAT_B, estat); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_WU:
{
cyg_uint16 estat;
HAL_READ_UINT16(CYGARC_REG_IMM_ESTAT_B, estat); // Read the flag as a one
estat &= ~(CYGARC_REG_IMM_ESTAT_WAKEINT);
HAL_WRITE_UINT16(CYGARC_REG_IMM_ESTAT_B, estat); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B15:
{
cyg_uint16 iflag;
 
HAL_READ_UINT16(CYGARC_REG_IMM_IFLAG_B, iflag); // Read the flag as a one
iflag &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_IFLAG_B, iflag); // And write it as a zero
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH15:
{
cyg_uint16 cisr;
HAL_READ_UINT16(CYGARC_REG_IMM_CISR_A, cisr);
cisr &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_CISR_A, cisr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH15:
{
cyg_uint16 cisr;
HAL_READ_UINT16(CYGARC_REG_IMM_CISR_B, cisr);
cisr &= ~(((cyg_uint16)0x0001) << (vector - CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0));
HAL_WRITE_UINT16(CYGARC_REG_IMM_CISR_B, cisr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM0:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL0);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM1:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL1);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM2:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL2);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM3:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL3);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM6:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL6);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM11:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL11);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM12:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL12);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM13:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL13);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM14:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL14);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM15:
{
cyg_uint16 mios1sr0;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
mios1sr0 &= ~(CYGARC_REG_IMM_MIOS1SR0_FL15);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR0, mios1sr0);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM16:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL16);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM17:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL17);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM18:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL18);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM19:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL19);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM22:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL22);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM27:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL27);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM28:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL28);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM29:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL29);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM30:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL30);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM31:
{
cyg_uint16 mios1sr1;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
mios1sr1 &= ~(CYGARC_REG_IMM_MIOS1SR1_FL31);
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1SR1, mios1sr1);
break;
}
 
 
default:
CYG_FAIL("Unknown Interrupt!!!");
break;
}
}
 
static __inline__ void
cyg_hal_interrupt_configure ( cyg_uint32 vector,
cyg_bool level,
cyg_bool up )
{
switch (vector) {
// Only external interrupts can be fully configured in the true meaning of the word
case CYGNUM_HAL_INTERRUPT_SIU_IRQ0:
case CYGNUM_HAL_INTERRUPT_SIU_IRQ1:
case CYGNUM_HAL_INTERRUPT_SIU_IRQ2:
case CYGNUM_HAL_INTERRUPT_SIU_IRQ3:
case CYGNUM_HAL_INTERRUPT_SIU_IRQ4:
case CYGNUM_HAL_INTERRUPT_SIU_IRQ5:
case CYGNUM_HAL_INTERRUPT_SIU_IRQ6:
case CYGNUM_HAL_INTERRUPT_SIU_IRQ7:
{
// External interrupts
cyg_uint32 siel, bit;
 
CYG_ASSERT( level || !up, "Only falling edge is supported");
 
bit = (((cyg_uint32) CYGARC_REG_IMM_SIEL_ED0)
>> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
 
HAL_READ_UINT32 (CYGARC_REG_IMM_SIEL, siel);
siel &= ~bit;
if (!level) {
// Set edge detect bit.
siel |= bit;
}
HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIEL, siel);
break;
}
 
// Attempts to configure all other interrupt sources should fail
default:
CYG_FAIL("Unknown Interrupt!!!");
break;
}
}
 
static __inline__ void
cyg_hal_interrupt_set_level ( cyg_uint32 vector, cyg_uint32 level )
{
if(vector < CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI1)
{
// Note: highest priority has the lowest numerical value.
CYG_ASSERT( level >= CYGARC_SIU_PRIORITY_HIGH, "Invalid priority");
CYG_ASSERT( level <= CYGARC_SIU_PRIORITY_LOW, "Invalid priority");
}
else
{
CYG_ASSERT( level >= CYGARC_IMB3_PRIORITY_HIGH, "Invalid priority");
CYG_ASSERT( level <= CYGARC_IMB3_PRIORITY_LOW, "Invalid priority");
}
 
switch (vector) {
case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
// These cannot be configured.
break;
 
case CYGNUM_HAL_INTERRUPT_SIU_TB_A:
case CYGNUM_HAL_INTERRUPT_SIU_TB_B:
{
// TimeBase A+B interrupt
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
tbscr &= ~(CYGARC_REG_IMM_TBSCR_IRQMASK);
tbscr |= CYGARC_REG_IMM_TBSCR_IRQ0 >> level;
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFA); // Prevent fom clearing interrupt flags
tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFB); // accidently. Just do what is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_PIT:
{
// Periodic Interrupt
cyg_uint16 piscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
piscr &= ~(CYGARC_REG_IMM_PISCR_IRQMASK);
piscr |= CYGARC_REG_IMM_PISCR_IRQ0 >> level;
piscr &= ~(CYGARC_REG_IMM_PISCR_PS); // Prevent from clearing interrupt flag.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
{
// Real Time Clock Second & Real Time Clock Alarm
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_IRQMASK);
rtcsc |= CYGARC_REG_IMM_RTCSC_IRQ0 >> level;
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SEC); // Prevent from clearing interrupt flags
rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALR); // accidently. Just do wahat is asked.
HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
break;
}
 
case CYGNUM_HAL_INTERRUPT_SIU_COL:
{
cyg_uint16 colir;
HAL_READ_UINT16(CYGARC_REG_IMM_COLIR, colir);
colir &= ~(CYGARC_REG_IMM_COLIR_COLIRQ); // mask out the level
colir |= CYGARC_REG_IMM_COLIR_IRQ0 >> level; // and set the new level
colir &= ~(CYGARC_REG_IMM_COLIR_COLIS); // Prevent from clearing interrupt flag accidently.
HAL_WRITE_UINT16(CYGARC_REG_IMM_COLIR, colir);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI1:
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI1:
{
cyg_uint16 quadc64int;
cyg_uint16 the_level = level << CYGARC_REG_IMM_QUADC64INT_IRL1_SHIFT;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUADC64INT_A, quadc64int);
quadc64int &= ~(CYGARC_REG_IMM_QUADC64INT_IRL1);
quadc64int |= the_level;
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUADC64INT_A, quadc64int);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI2:
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI2:
{
cyg_uint16 quadc64int;
cyg_uint16 the_level = level << CYGARC_REG_IMM_QUADC64INT_IRL2_SHIFT;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUADC64INT_A, quadc64int);
quadc64int &= ~(CYGARC_REG_IMM_QUADC64INT_IRL2);
quadc64int |= the_level;
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUADC64INT_A, quadc64int);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI1:
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI1:
{
cyg_uint16 quadc64int;
cyg_uint16 the_level = level << CYGARC_REG_IMM_QUADC64INT_IRL1_SHIFT;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUADC64INT_B, quadc64int);
quadc64int &= ~(CYGARC_REG_IMM_QUADC64INT_IRL1);
quadc64int |= the_level;
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUADC64INT_B, quadc64int);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI2:
case CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI2:
{
cyg_uint16 quadc64int;
cyg_uint16 the_level = level << CYGARC_REG_IMM_QUADC64INT_IRL2_SHIFT;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QUADC64INT_B, quadc64int);
quadc64int &= ~(CYGARC_REG_IMM_QUADC64INT_IRL2);
quadc64int |= the_level;
HAL_WRITE_UINT16(CYGARC_REG_IMM_QUADC64INT_B, quadc64int);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TX:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TXC:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI0_IDLE:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TX:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXC:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_IDLE:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQTHF:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQBHF:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQTHE:
case CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQBHE:
{
cyg_uint16 qdsci_il;
cyg_uint16 the_level = level << CYGARC_REG_IMM_QDSCI_IL_ILDSCI_SHIFT;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QDSCI_IL, qdsci_il);
qdsci_il &= ~(CYGARC_REG_IMM_QDSCI_IL_ILDSCI);
qdsci_il |= the_level;
HAL_WRITE_UINT16(CYGARC_REG_IMM_QDSCI_IL, qdsci_il);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_FI:
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_MODF:
case CYGNUM_HAL_INTERRUPT_IMB3_SPI_HALTA:
{
cyg_uint16 qspi_il;
cyg_uint16 the_level = level << CYGARC_REG_IMM_QSPI_IL_ILQSPI_SHIFT;
 
HAL_READ_UINT16(CYGARC_REG_IMM_QSPI_IL, qspi_il);
qspi_il &= ~(CYGARC_REG_IMM_QSPI_IL_ILQSPI);
qspi_il |= the_level;
HAL_WRITE_UINT16(CYGARC_REG_IMM_QSPI_IL, qspi_il);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_BOFF:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_ERR:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_WU:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B15:
{
cyg_uint16 irl = (level % 8) << CYGARC_REG_IMM_CANICR_IRL_SHIFT;
cyg_uint16 ilsb = (level / 8) << CYGARC_REG_IMM_CANICR_ILBS_SHIFT;
cyg_uint16 canicr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_CANICR_A, canicr);
canicr &= ~(CYGARC_REG_IMM_CANICR_IRL);
canicr &= ~(CYGARC_REG_IMM_CANICR_ILBS);
canicr |= irl;
canicr |= ilsb;
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANICR_A, canicr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_BOFF:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_ERR:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_WU:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B1:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B2:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B3:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B4:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B5:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B6:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B7:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B8:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B9:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B10:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B11:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B12:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B13:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B14:
case CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B15:
{
cyg_uint16 irl = (level % 8) << CYGARC_REG_IMM_CANICR_IRL_SHIFT;
cyg_uint16 ilsb = (level / 8) << CYGARC_REG_IMM_CANICR_ILBS_SHIFT;
cyg_uint16 canicr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_CANICR_B, canicr);
canicr &= ~(CYGARC_REG_IMM_CANICR_IRL);
canicr &= ~(CYGARC_REG_IMM_CANICR_ILBS);
canicr |= irl;
canicr |= ilsb;
HAL_WRITE_UINT16(CYGARC_REG_IMM_CANICR_B, canicr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH15:
{
cyg_uint16 cirl = (level % 8) << CYGARC_REG_IMM_TICR_CIRL_SHIFT;
cyg_uint16 ilsb = (level / 8) << CYGARC_REG_IMM_TICR_ILBS_SHIFT;
cyg_uint16 ticr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_TICR_A, ticr);
ticr &= ~(CYGARC_REG_IMM_TICR_CIRL);
ticr &= ~(CYGARC_REG_IMM_TICR_ILBS);
ticr |= cirl;
ticr |= ilsb;
HAL_WRITE_UINT16(CYGARC_REG_IMM_TICR_A, ticr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH1:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH2:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH3:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH4:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH5:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH6:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH7:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH8:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH9:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH10:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH11:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH12:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH13:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH14:
case CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH15:
{
cyg_uint16 cirl = (level % 8) << CYGARC_REG_IMM_TICR_CIRL_SHIFT;
cyg_uint16 ilsb = (level / 8) << CYGARC_REG_IMM_TICR_ILBS_SHIFT;
cyg_uint16 ticr;
 
HAL_READ_UINT16(CYGARC_REG_IMM_TICR_B, ticr);
ticr &= ~(CYGARC_REG_IMM_TICR_CIRL);
ticr &= ~(CYGARC_REG_IMM_TICR_ILBS);
ticr |= cirl;
ticr |= ilsb;
HAL_WRITE_UINT16(CYGARC_REG_IMM_TICR_B, ticr);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM0:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM1:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM2:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM3:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM6:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM11:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM12:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM13:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM14:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM15:
{
cyg_uint16 lvl = (level % 8) << CYGARC_REG_IMM_MIOS1LVL_LVL_SHIFT;
cyg_uint16 tm = (level / 8) << CYGARC_REG_IMM_MIOS1LVL_TM_SHIFT;
cyg_uint16 mios1lvl;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1LVL0, mios1lvl);
mios1lvl &= ~(CYGARC_REG_IMM_MIOS1LVL_LVL);
mios1lvl &= ~(CYGARC_REG_IMM_MIOS1LVL_TM);
mios1lvl |= lvl;
mios1lvl |= tm;
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1LVL0, mios1lvl);
break;
}
 
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM16:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM17:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM18:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM19:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM22:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM27:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM28:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM29:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM30:
case CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM31:
{
cyg_uint16 lvl = (level % 8) << CYGARC_REG_IMM_MIOS1LVL_LVL_SHIFT;
cyg_uint16 tm = (level / 8) << CYGARC_REG_IMM_MIOS1LVL_TM_SHIFT;
cyg_uint16 mios1lvl;
 
HAL_READ_UINT16(CYGARC_REG_IMM_MIOS1LVL1, mios1lvl);
mios1lvl &= ~(CYGARC_REG_IMM_MIOS1LVL_LVL);
mios1lvl &= ~(CYGARC_REG_IMM_MIOS1LVL_TM);
mios1lvl |= lvl;
mios1lvl |= tm;
HAL_WRITE_UINT16(CYGARC_REG_IMM_MIOS1LVL1, mios1lvl);
break;
}
 
default:
CYG_FAIL("Unknown Interrupt!!!");
break;
}
}
// The decrementer interrupt cannnot be masked, configured or acknowledged.
 
#define HAL_INTERRUPT_MASK( _vector_ ) \
CYG_MACRO_START \
if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
cyg_hal_interrupt_mask ( (_vector_) ); \
CYG_MACRO_END
 
#define HAL_INTERRUPT_UNMASK( _vector_ ) \
CYG_MACRO_START \
if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
cyg_hal_interrupt_unmask ( (_vector_) ); \
CYG_MACRO_END
 
#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \
CYG_MACRO_START \
if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
cyg_hal_interrupt_acknowledge ( (_vector_) ); \
CYG_MACRO_END
 
#define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) \
CYG_MACRO_START \
if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
cyg_hal_interrupt_configure ( (_vector_), (_level_), (_up_) ); \
CYG_MACRO_END
 
#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \
CYG_MACRO_START \
if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
cyg_hal_interrupt_set_level ( (_vector_) , (_level_) ); \
CYG_MACRO_END
 
#define CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED
 
//--------------------------------------------------------------------------
// Interrupt arbiters
externC cyg_uint32 hal_arbitration_isr_tb (CYG_ADDRWORD vector,
CYG_ADDRWORD data);
externC cyg_uint32 hal_arbitration_isr_pit (CYG_ADDRWORD vector,
CYG_ADDRWORD data);
externC cyg_uint32 hal_arbitration_isr_rtc (CYG_ADDRWORD vector,
CYG_ADDRWORD data);
 
//-----------------------------------------------------------------------------
// Symbols used by assembly code
#define CYGARC_VARIANT_DEFS \
DEFINE(CYGNUM_HAL_VECTOR_NMI, CYGNUM_HAL_VECTOR_NMI);
 
//-----------------------------------------------------------------------------
// Interrupt source priorities
// Maybe this is not the best way to do this. Fact remains that these priorities
// are not hard wired by the board layout, but are all software configurable. Not
// so easy to combine flexibility with generality
#define CYGNUM_HAL_INTERRUPT_SIU_TB_A_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TB
#define CYGNUM_HAL_INTERRUPT_SIU_TB_B_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TB
#define CYGNUM_HAL_INTERRUPT_SIU_PIT_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_PIT
#define CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_RTC
#define CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_RTC
#define CYGNUM_HAL_INTERRUPT_SIU_COL_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_PLL
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_A_QUEUE1
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_A_QUEUE1
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_CI2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_A_QUEUE2
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCA_PI2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_A_QUEUE2
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_B_QUEUE1
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_B_QUEUE1
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_CI2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_B_QUEUE2
#define CYGNUM_HAL_INTERRUPT_IMB3_QUADCB_PI2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QUADC_B_QUEUE2
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TX_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_TXC_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI0_IDLE_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TX_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXC_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_IDLE_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQTHF_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RXQBHF_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQTHE_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SCI1_TXQBHE_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSCI
#define CYGNUM_HAL_INTERRUPT_IMB3_SPI_FI_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSPI
#define CYGNUM_HAL_INTERRUPT_IMB3_SPI_MODF_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSPI
#define CYGNUM_HAL_INTERRUPT_IMB3_SPI_HALTA_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_QSPI
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_BOFF_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_ERR_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_WU_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B0_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B3_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B4_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B5_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B6_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B7_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B8_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B9_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B10_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B11_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B12_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B13_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B14_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANA_B15_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_BOFF_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_ERR_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_WU_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B0_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B3_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B4_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B5_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B6_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B7_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B8_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B9_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B10_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B11_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B12_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B13_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B14_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TOUCANB_B15_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TOUCAN_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH0_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH3_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH4_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH5_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH6_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH7_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH8_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH9_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH10_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH11_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH12_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH13_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH14_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUA_CH15_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_A
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH0_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH3_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH4_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH5_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH6_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH7_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH8_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH9_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH10_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH11_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH12_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH13_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH14_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_TPUB_CH15_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_TPU_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM0_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM1_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM2_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM3_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM6_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM11_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM12_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM13_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM14_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM15_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_A
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM16_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM17_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM18_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MPWM19_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MMCSM22_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM27_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM28_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM29_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM30_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
#define CYGNUM_HAL_INTERRUPT_IMB3_MIOS_MDASM31_PRIORITY CYGNUM_HAL_ISR_SOURCE_PRIORITY_MIOS_B
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_VAR_INTR_H
// End of var_intr.h
/include/variant.inc
0,0 → 1,273
#ifndef CYGONCE_HAL_VARIANT_INC
#define CYGONCE_HAL_VARIANT_INC
##=============================================================================
##
## variant.inc
##
## MPC5xx family assembler header file
##
##=============================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
##=============================================================================
#######DESCRIPTIONBEGIN####
##
## Author(s): Bob Koninckx
## Contributors:Bob Koninckx
## Date: 2001-12-15
## Purpose: MPC5xx family definitions.
## Description: This file contains various definitions and macros that are
## useful for writing assembly code for the MPC5xx CPU family.
## Usage:
## #include <cyg/hal/variant.inc>
## ...
##
##
######DESCRIPTIONEND####
##
##=============================================================================
 
##------------------------------------------------------------------------------
## Handle denormalized numbers etc in hardware, or use a software envelope to
## generate 100% IEEE correct results
#define FULL_IEEE_FLOATING_POINT_SUPPORT 29
 
#include <pkgconf/hal.h>
#include <cyg/hal/arch.inc>
 
##-----------------------------------------------------------------------------
## MPC5xx defined vectors
 
.macro hal_extra_vectors
# MPC5xx vectors
exception_vector software_emu
exception_vector reserved_01100
exception_vector reserved_01200
exception_vector instruction_tlb_error
exception_vector data_tlb_error
exception_vector reserved_01500
exception_vector reserved_01600
exception_vector reserved_01700
exception_vector reserved_01800
exception_vector reserved_01900
exception_vector reserved_01A00
exception_vector reserved_01B00
exception_vector data_breakpoint
exception_vector instruction_breakpoint
exception_vector peripheral_breakpoint
exception_vector NMI_port
.endm
##-----------------------------------------------------------------------------
## MPC5xx CPU initialization
##
## Initialize CPU to a post-reset state, ensuring the ground doesn''t
## shift under us while we try to set things up.
 
.macro hal_cpu_init
 
# Set up MSR
lwi r3,CYG_MSR
sync
mtmsr r3
sync
 
#ifndef CYGSEM_HAL_USE_ROM_MONITOR
#ifndef CYGSEM_HAL_POWERPC_MPC5XX_OCD_ENABLE
#ifdef CYGSEM_HAL_ROM_MONITOR
## Do not touch the DER register if OCD support is wanted.
## DER will be set with the OCD debugger in this case.
## Leave it untouched if co-existence with a ROM monitor
## is wanted as well.
## If we want to make a ROM monitor, we have to specify events
## that assert the FREEZE signal
## Single steps are implemented using hardware interrupts,
## breakpoints use program exceptions
lwi r3, 0x2082000f
 
#else
## Disable special MPC5xx "development support" for non
## debug loads.
lwi r3, 0x00000000
#endif
mtder r3
#endif
#endif
 
#ifdef CYGSEM_HAL_POWERPC_IEEE_FLOATING_POINT
mtfsb0 FULL_IEEE_FLOATING_POINT_SUPPORT
#else
mtfsb1 FULL_IEEE_FLOATING_POINT_SUPPORT
#endif
 
# Set up IMMR
lwi r3, 0x00000000
#ifdef CYGHWR_HAL_POWERPC_MPC5XX_IFLASH_ENABLE
lwi r4, CYGARC_REG_IMM_IMMR_FLEN
#else
lwi r4, 0x00000000
#endif
## We load the internal memory space to address zero
## Board specific initialization can then relocate this
## afterwards
or r3, r3, r4
mtspr CYGARC_REG_IMMR, r3
 
## Disable bursts. Again, board initialization can enable this
## afterwards.
li r0, 0
mtspr 560, r0
 
.endm
##-----------------------------------------------------------------------------
## MPC5xx exception state handling
.macro hal_variant_save regs
.endm
 
.macro hal_variant_load regs
.endm
##-----------------------------------------------------------------------------
## MPC5xx monitor initialization
 
#ifndef CYGPKG_HAL_PPC_MON_DEFINED
 
#if defined(CYG_HAL_STARTUP_ROM) || \
( defined(CYG_HAL_STARTUP_RAM) && \
!defined(CYGSEM_HAL_USE_ROM_MONITOR))
 
.macro hal_mon_init
#ifdef CYGSEM_HAL_POWERPC_COPY_VECTORS
# If we are starting up from ROM and want vectors in RAM
# or we are starting in RAM and NOT using a ROM monitor,
# copy exception handler code to 0.
lwi r3,rom_vectors # r3 = rom start
lwi r4,0 # r4 = ram start
lwi r5,rom_vectors_end # r5 = rom end
cmplw r3,r5 # skip if no vectors
beq 2f
 
subi r3,r3,4
subi r4,r4,4
subi r5,r5,4
1:
lwzu r0,4(r3) # get word from ROM
stwu r0,4(r4) # store in RAM
cmplw r3,r5 # compare
blt 1b # loop if not yet done
2:
#endif
 
# Next initialize the VSR table. This happens whether the
# vectors were copied to RAM or not.
 
# First fill with exception handlers
lwi r3,cyg_hal_default_exception_vsr
lwi r4,hal_vsr_table
subi r4,r4,4
li r5,CYGNUM_HAL_VSR_COUNT
1: stwu r3,4(r4)
subi r5,r5,1
cmpwi r5,0
bne 1b
 
# Then fill in the special vectors
lwi r3,cyg_hal_default_interrupt_vsr
lwi r4,hal_vsr_table
stw r3,CYGNUM_HAL_VECTOR_INTERRUPT*4(r4)
stw r3,CYGNUM_HAL_VECTOR_DECREMENTER*4(r4)
.endm
 
#elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR)
 
# Initialize the VSR table entries
# We only take control of the interrupt vectors,
# the rest are left to the ROM for now...
 
.macro hal_mon_init
lwi r3,cyg_hal_default_interrupt_vsr
lwi r4,hal_vsr_table
stw r3,CYGNUM_HAL_VECTOR_INTERRUPT*4(r4)
stw r3,CYGNUM_HAL_VECTOR_DECREMENTER*4(r4)
.endm
 
 
#else
 
.macro hal_mon_init
 
.endm
 
#endif
 
 
#define CYGPKG_HAL_PPC_MON_DEFINED
 
#endif // CYGPKG_HAL_PPC_MON_DEFINED
 
 
 
 
##-----------------------------------------------------------------------------
## Indicate that the ISR tables are defined in variant.S
#define CYG_HAL_PPC_ISR_TABLES_DEFINED
 
##-----------------------------------------------------------------------------
## MPC5xx interrupt handling.
 
#ifndef CYGPKG_HAL_POWERPC_INTC_DEFINED
 
## First level decoding of MPC5xx SIU interrupt controller.
 
# decode the interrupt
.macro hal_intc_decode dreg,state
lwz \dreg,CYGARC_PPCREG_VECTOR(\state) # retrieve vector number,
rlwinm. \dreg,\dreg,22,31,31 # isolate bit 21
beq 0f # done if decrementer (vec 0)
lwi \dreg,CYGARC_REG_IMM_SIVEC # if external, get SIU
lbz \dreg,0(\dreg) # vector.
srwi \dreg,\dreg,2
addi \dreg,\dreg,1 # Skip decrementer vector
0: stw \dreg,CYGARC_PPCREG_VECTOR(\state) # update vector in state frame.
slwi \dreg,\dreg,2 # convert to byte offset.
.endm
 
 
#define CYGPKG_HAL_POWERPC_INTC_DEFINED
#endif // CYGPKG_HAL_POWERPC_INTC_DEFINED
 
#------------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_VARIANT_INC
# end of variant.inc
/include/var_regs.h
0,0 → 1,958
#ifndef CYGONCE_HAL_VAR_REGS_H
#define CYGONCE_HAL_VAR_REGS_H
 
//==========================================================================
//
// var_regs.h
//
// PowerPC 5xx variant CPU definitions
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Bob Koninckx
// Contributors: Bob Koninckx
// Date: 2001-09-12
// Purpose: Provide MPC5xx register definitions
// Description: Provide MPC5xx register definitions
// The short difinitions (sans CYGARC_REG_) are exported only
// if CYGARC_HAL_COMMON_EXPORT_CPU_MACROS is defined.
// Usage: Included via the acrhitecture register header:
// #include <cyg/hal/ppc_regs.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
//--------------------------------------------------------------------------
// Special purpose registers
//
#define CYGARC_REG_XER 1
#define CYGARC_REG_LR 8
#define CYGARC_REG_CTR 9
#define CYGARC_REG_EIE 80
#define CYGARC_REG_EID 81
#define CYGARC_REG_NRI 82
#define CYGARC_REG_CMPA 144
#define CYGARC_REG_CMPB 145
#define CYGARC_REG_CMPC 146
#define CYGARC_REG_CMPD 147
#define CYGARC_REG_ECR 148
#define CYGARC_REG_DER 149
#define CYGARC_REG_COUNTA 150
#define CYGARC_REG_COUNTB 151
#define CYGARC_REG_CMPE 152
#define CYGARC_REG_CMPF 153
#define CYGARC_REG_CMPG 154
#define CYGARC_REG_CMPH 155
#define CYGARC_REG_LCTRL1 156
#define CYGARC_REG_LCTRL2 157
#define CYGARC_REG_ICTRL 158
#define CYGARC_REG_BAR 159
#define CYGARC_REG_MI_GRA 528
#define CYGARC_REG_L2U_GRA 536
#define CYGARC_REG_BBCMCR 560
#define CYGARC_REG_L2U_MCR 568
#define CYGARC_REG_DPDR 630
#define CYGARC_REG_IMMR 638
#define CYGARC_REG_MI_RBA0 784
#define CYGARC_REG_MI_RBA1 785
#define CYGARC_REG_MI_RBA2 786
#define CYGARC_REG_MI_RBA3 787
#define CYGARC_REG_L2U_RBA0 792
#define CYGARC_REG_L2U_RBA1 793
#define CYGARC_REG_L2U_RBA2 794
#define CYGARC_REG_L2U_RBA3 795
#define CYGARC_REG_MI_RA0 816
#define CYGARC_REG_MI_RA1 817
#define CYGARC_REG_MI_RA2 818
#define CYGARC_REG_MI_RA3 819
#define CYGARC_REG_L2U_RA0 824
#define CYGARC_REG_L2U_RA1 825
#define CYGARC_REG_L2U_RA2 826
#define CYGARC_REG_L2U_RA3 827
#define CYGARC_REG_FPECR 1022
 
#ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
//# define XER CYGARC_REG_XER // Leave these out, they conflict with GDB stubs
//# define LR CYGARC_REG_LR // are not used anyway
# define CTR CYGARC_REG_CTR
# define EIE CYGARC_REG_EIE
# define EID CYGARC_REG_EID
# define NRI CYGARC_REG_NRI
# define CMPA CYGARC_REG_CMPA
# define CMPB CYGARC_REG_CMPB
# define CMPC CYGARC_REG_CMPC
# define CMPD CYGARC_REG_CMPD
# define ECR CYGARC_REG_ECR
# define DER CYGARC_REG_DER
# define COUNTA CYGARC_REG_COUNTA
# define COUNTB CYGARC_REG_COUNTB
# define CMPE CYGARC_REG_CMPE
# define CMPF CYGARC_REG_CMPF
# define CMPG CYGARC_REG_CMPG
# define CMPH CYGARC_REG_CMPH
# define LCTRL1 CYGARC_REG_LCTRL1
# define LCTRL2 CYGARC_REG_LCTRL2
# define ICTRL CYGARC_REG_ICTRL
# define BAR CYGARC_REG_BAR
# define MI_GRA CYGARC_REG_MI_GRA
# define L2U_GRA CYGARC_REG_L2U_GRA
# define BBCMCR CYGARC_REG_BBCMCR
# define L2U_MCR CYGARC_REG_L2U_MCR
# define DPDR CYGARC_REG_DPDR
# define IMMR CYGARC_REG_IMMR
# define MI_RBA0 CYGARC_REG_MI_RBA0
# define MI_RBA1 CYGARC_REG_MI_RBA1
# define MI_RBA2 CYGARC_REG_MI_RBA2
# define MI_RBA3 CYGARC_REG_MI_RBA3
# define L2U_RBA0 CYGARC_REG_L2U_RBA0
# define L2U_RBA1 CYGARC_REG_L2U_RBA1
# define L2U_RBA2 CYGARC_REG_L2U_RBA2
# define L2U_RBA3 CYGARC_REG_L2U_RBA3
# define MI_RA0 CYGARC_REG_MI_RA0
# define MI_RA1 CYGARC_REG_MI_RA1
# define MI_RA2 CYGARC_REG_MI_RA2
# define MI_RA3 CYGARC_REG_MI_RA3
# define L2U_RA0 CYGARC_REG_L2U_RA0
# define L2U_RA1 CYGARC_REG_L2U_RA1
# define L2U_RA2 CYGARC_REG_L2U_RA2
# define L2U_RA3 CYGARC_REG_L2U_RA3
# define FPECR CYGARC_REG_FPECR
#endif //#ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
 
//-----------------------------------------------------------------------------
// Development Support.
#define CYGARC_REG_DER 149
 
#define CYGARC_REG_ICTRL 158 // instruction support control reg
#define CYGARC_REG_ICTRL_SERSHOW 0x00000000 // serialized, show cycles
#define CYGARC_REG_ICTRL_NOSERSHOW 0x00000007 //non-serialized&no show cycles
 
#ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
#define DER CYGARC_REG_DER
 
#define ICTRL CYGARC_REG_ICTRL
#define ICTRL_SERSHOW CYGARC_REG_ICTRL_SERSHOW
#define ICTRL_NOSERSHOW CYGARC_REG_ICTRL_NOSERSHOW
#endif // ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
 
//-----------------------------------------------------------------------------
// Bit definitions
//-----------------------------------------------------------------------------
// The internal memory map register (IMMR)
#define CYGARC_REG_IMM_IMMR_PARTNUM 0xff000000 // part number mask (ro)
#define CYGARC_REG_IMM_IMMR_MASKNUM 0x00ff0000 // mask number mask (ro)
#define CYGARC_REG_IMM_IMMR_ISB 0x0000000e // internal space base
#define CYGARC_REG_IMM_IMMR_CLES 0x00000100 // core little endian swap
#define CYGARC_REG_IMM_IMMR_FLEN 0x00000800 // flash enable
 
//-----------------------------------------------------------------------------
// System protection control (SYPCR)
#define CYGARC_REG_IMM_SYPR_SWTC_MASK 0xffff0000
#define CYGARC_REG_IMM_SYPR_BMT_MASK 0x0000ff00
#define CYGARC_REG_IMM_SYPR_BME 0x00000080
#define CYGARC_REG_IMM_SYPR_SWF 0x00000008
#define CYGARC_REG_IMM_SYPR_SWE 0x00000004
#define CYGARC_REG_IMM_SYPR_SWRI 0x00000002
#define CYGARC_REG_IMM_SYPR_SWP 0x00000001
 
//-----------------------------------------------------------------------------
// Interrupt pend register (SIPEND)
#define CYGARC_REG_IMM_SIPEND_IRQ0 0x80000000 // External interrupt priority 0
#define CYGARC_REG_IMM_SIPEND_LVL0 0x40000000 // Internal interrupt level 0
#define CYGARC_REG_IMM_SIPEND_IRQ1 0x20000000 // External interrupt priority 1
#define CYGARC_REG_IMM_SIPEND_LVL1 0x10000000 // Internal interrupt level 1
#define CYGARC_REG_IMM_SIPEND_IRQ2 0x08000000 // External interrupt priority 2
#define CYGARC_REG_IMM_SIPEND_LVL2 0x04000000 // Internal interrupt level 2
#define CYGARC_REG_IMM_SIPEND_IRQ3 0x02000000 // External interrupt priority 3
#define CYGARC_REG_IMM_SIPEND_LVL3 0x01000000 // Internal interrupt level 3
#define CYGARC_REG_IMM_SIPEND_IRQ4 0x00800000 // External interrupt prioeity 4
#define CYGARC_REG_IMM_SIPEND_LVL4 0x00400000 // Internal interrupt level 4
#define CYGARC_REG_IMM_SIPEND_IRQ5 0x00200000 // External interrupt priority 5
#define CYGARC_REG_IMM_SIPEND_LVL5 0x00100000 // Internal interrupt level 5
#define CYGARC_REG_IMM_SIPEND_IRQ6 0x00080000 // External interrupt priority 6
#define CYGARC_REG_IMM_SIPEND_LVL6 0x00040000 // Internal interrupt level 6
#define CYGARC_REG_IMM_SIPEND_IRQ7 0x00020000 // External interrupt priority 7
#define CYGARC_REG_IMM_SIPEND_LVL7 0x00010000 // Internal interrupt level 7
 
//-----------------------------------------------------------------------------
// Interrupt mask register (SIMASK)
#define CYGARC_REG_IMM_SIMASK_IRM0 0x80000000 // External interrupt priority 0
#define CYGARC_REG_IMM_SIMASK_LVM0 0x40000000 // Internal interrupt level 0
#define CYGARC_REG_IMM_SIMASK_IRM1 0x20000000 // External interrupt priority 1
#define CYGARC_REG_IMM_SIMASK_LVM1 0x10000000 // Internal interrupt level 1
#define CYGARC_REG_IMM_SIMASK_IRM2 0x08000000 // External interrupt priority 2
#define CYGARC_REG_IMM_SIMASK_LVM2 0x04000000 // Internal interrupt level 2
#define CYGARC_REG_IMM_SIMASK_IRM3 0x02000000 // External interrupt priority 3
#define CYGARC_REG_IMM_SIMASK_LVM3 0x01000000 // Internal interrupt level 3
#define CYGARC_REG_IMM_SIMASK_IRM4 0x00800000 // External interrupt priority 4
#define CYGARC_REG_IMM_SIMASK_LVM4 0x00400000 // Internal interrupt level 4
#define CYGARC_REG_IMM_SIMASK_IRM5 0x00200000 // External interrupt priority 5
#define CYGARC_REG_IMM_SIMASK_LVM5 0x00100000 // Internal interrupt level 5
#define CYGARC_REG_IMM_SIMASK_IRM6 0x00080000 // External interrupt priority 6
#define CYGARC_REG_IMM_SIMASK_LVM6 0x00040000 // Internal interrupt level 6
#define CYGARC_REG_IMM_SIMASK_IRM7 0x00020000 // External interrupt priority 7
#define CYGARC_REG_IMM_SIMASK_LVM7 0x00010000 // Internal interrupt level 7
 
//-----------------------------------------------------------------------------
// Interrupt edge level register (CIEL)
#define CYGARC_REG_IMM_SIEL_ED0 0x80000000 // Falling edge external interrupt priority 0
#define CYGARC_REG_IMM_SIEL_WM0 0x40000000 // Wake-up mask external interrupt priority 0
#define CYGARC_REG_IMM_SIEL_ED1 0x20000000 // Falling edge external interrupt priority 1
#define CYGARC_REG_IMM_SIEL_WM1 0x10000000 // Wake-up mask external interrupt priority 1
#define CYGARC_REG_IMM_SIEL_ED2 0x08000000 // Falling edge external interrupt priority 2
#define CYGARC_REG_IMM_SIEL_WM2 0x04000000 // Wake-up mask external interrupt priority 2
#define CYGARC_REG_IMM_SIEL_ED3 0x02000000 // Falling edge external interrupt priority 3
#define CYGARC_REG_IMM_SIEL_WM3 0x01000000 // Wake-up mask external interrupt priority 3
#define CYGARC_REG_IMM_SIEL_ED4 0x00800000 // Falling edge external interrupt prioriry 4
#define CYGARC_REG_IMM_SIEL_WM4 0x00400000 // Wake-up mask external interrupt priority 4
#define CYGARC_REG_IMM_SIEL_ED5 0x00200000 // Falling edge external interrupt priority 5
#define CYGARC_REG_IMM_SIEL_WM5 0x00100000 // Wake-up mask external interrupt priority 5
#define CYGARC_REG_IMM_SIEL_ED6 0x00080000 // Falling edge external interrupt priority 6
#define CYGARC_REG_IMM_SIEL_WM6 0x00040000 // Wake-up mask external interrupt priority 6
#define CYGARC_REG_IMM_SIEL_ED7 0x00020000 // Falling edge external interrupt priority 7
#define CYGARC_REG_IMM_SIEL_WM7 0x00010000 // Wake-up mask external interrupt priority 7
 
//-----------------------------------------------------------------------------
// Memory controller
#define CYGARC_REG_IMM_BR_BA_MASK 0xffff8000 // base address
#define CYGARC_REG_IMM_BR_AT_MASK 0x00007000 // address type
#define CYGARC_REG_IMM_BR_PS_8 0x00000400 // port size 8 bits
#define CYGARC_REG_IMM_BR_PS_16 0x00000800 // port size 16 bits
#define CYGARC_REG_IMM_BR_PS_32 0x00000000 // port size 32 bits
#define CYGARC_REG_IMM_BR_WP 0x00000100 // write protect
#define CYGARC_REG_IMM_BR_WEBS 0x00000020 // write enable byte select
#define CYGARC_REG_IMM_BR_TBDIP 0x00000010 // toggle burst data in progress
#define CYGARC_REG_IMM_BR_LBDIP 0x00000008 // late burst data in progress
#define CYGARC_REG_IMM_BR_SETA 0x00000004 // externam transfer acknowledge
#define CYGARC_REG_IMM_BR_BI 0x00000002 // burst inhibit
#define CYGARC_REG_IMM_BR_V 0x00000001 // valid bit
 
#define CYGARC_REG_IMM_OR_AM 0xffff8000 // address mask
#define CYGARC_REG_IMM_OR_ATM 0x00007000 // address type mask
#define CYGARC_REG_IMM_OR_CSNT 0x00000800 // GPCM : chip select negatoion time
#define CYGARC_REG_IMM_OR_ACS_0 0x00000000 // GPCM : CS output immediately
#define CYGARC_REG_IMM_OR_ACS_4 0x00000400 // GPCM : CS output 1/4 clock cycle later
#define CYGARC_REG_IMM_OR_ACS_2 0x00000600 // GPCM : CS output 1/2 clock cycle later
#define CYGARC_REG_IMM_OR_SCY_MASK 0x000000f0 // cycle length in clocks
#define CYGARC_REG_IMM_OR_BSCY 0x0000000E // burst cycle length in clocks
#define CYGARC_REG_IMM_OR_TRLX 0x00000001 // timing relaxed
#define CYGARC_REG_IMM_OR_EHTR 0x00000100 // extended hold time on read
#define CYGARC_REG_IMM_OR_SCY_SHIFT 4
 
//-----------------------------------------------------------------------------
// Time base status and control (TBSCR)
#define CYGARC_REG_IMM_TBSCR_REFA 0x0080 // reference interrupt status A
#define CYGARC_REG_IMM_TBSCR_REFB 0x0040 // reference interrupt status B
#define CYGARC_REG_IMM_TBSCR_REFAE 0x0008 // reference interrupt enable A
#define CYGARC_REG_IMM_TBSCR_REFBE 0x0004 // reference interrupt enable B
#define CYGARC_REG_IMM_TBSCR_TBF 0x0002 // timebase freeze
#define CYGARC_REG_IMM_TBSCR_TBE 0x0001 // timebase enable
#define CYGARC_REG_IMM_TBSCR_IRQ0 0x8000 // highest interrupt level
#define CYGARC_REG_IMM_TBSCR_IRQMASK 0xff00 // irq priority mask
 
//-----------------------------------------------------------------------------
// Real time clock
#define CYGARC_REG_IMM_RTCSC_SEC 0x0080 // once per second interrupt
#define CYGARC_REG_IMM_RTCSC_ALR 0x0040 // alarm interrupt
#define CYGARC_REG_IMM_RTCSC_4M 0x0010 // source select
#define CYGARC_REG_IMM_RTCSC_SIE 0x0008 // second interrupt enable
#define CYGARC_REG_IMM_RTCSC_ALE 0x0004 // alarm interrupt enable
#define CYGARC_REG_IMM_RTCSC_RTF 0x0002 // real time clock freeze
#define CYGARC_REG_IMM_RTCSC_RTE 0x0001 // real time clock enable
#define CYGARC_REG_IMM_RTCSC_IRQ0 0x8000 // highest interrupt priority
#define CYGARC_REG_IMM_RTCSC_IRQMASK 0xff00 // irq priority mask
 
//-----------------------------------------------------------------------------
// Periodic interrupt status an control
#define CYGARC_REG_IMM_PISCR_PS 0x0080 // periodic interrupt status
#define CYGARC_REG_IMM_PISCR_PIE 0x0004 // periodic interrupt enable
#define CYGARC_REG_IMM_PISCR_PITF 0x0002 // periodic interrupt timer freeze
#define CYGARC_REG_IMM_PISCR_PTE 0x0001 // periodic timer enable
#define CYGARC_REG_IMM_PISCR_IRQ0 0x8000 // highest intetrupt priority
#define CYGARC_REG_IMM_PISCR_IRQMASK 0xff00 // irq priority mask
 
//-----------------------------------------------------------------------------
// Queued analog to digital convertor
#define CYGARC_REG_IMM_QUACR1_CIE1 0x8000
#define CYGARC_REG_IMM_QUACR1_PIE1 0x4000
#define CYGARC_REG_IMM_QUACR1_SSE1 0x2000
#define CYGARC_REG_IMM_QUACR1_MO1 0x1f00
#define CYGARC_REG_IMM_QUACR2_CIE2 0x8000
#define CYGARC_REG_IMM_QUACR2_PIE2 0x4000
#define CYGARC_REG_IMM_QUACR2_SSE2 0x2000
#define CYGARC_REG_IMM_QUACR2_MO2 0x1f00
#define CYGARC_REG_IMM_QUACR2_RESUME 0x0080
#define CYGARC_REG_IMM_QUACR2_BQ2 0x007f
#define CYGARC_REG_IMM_QUASR0_CF1 0x8000
#define CYGARC_REG_IMM_QUASR0_PF1 0x4000
#define CYGARC_REG_IMM_QUASR0_CF2 0x2000
#define CYGARC_REG_IMM_QUASR0_PF2 0x1000
#define CYGARC_REG_IMM_QUASR0_TOR1 0x0800
#define CYGARC_REG_IMM_QUASR0_TOR2 0x0400
#define CYGARC_REG_IMM_QUASR0_QS 0x03c0
#define CYGARC_REG_IMM_QUASR0_CWP 0x003f
#define CYGARC_REG_IMM_QUADC64INT_IRL1 0xf800
#define CYGARC_REG_IMM_QUADC64INT_IRL2 0x07c0
#define CYGARC_REG_IMM_QUADC64INT_IRL1_SHIFT 11
#define CYGARC_REG_IMM_QUADC64INT_IRL2_SHIFT 6
 
//-----------------------------------------------------------------------------
// PLL Change of lock
#define CYGARC_REG_IMM_COLIR_IRQ0 0x8000 // the highest interrupt priority
#define CYGARC_REG_IMM_COLIR_COLIRQ 0xff00 // interrupt priority mask
#define CYGARC_REG_IMM_COLIR_COLIS 0x0080 // change of lock detected
#define CYGARC_REG_IMM_COLIR_COLIE 0x0040 // change of lock interrupt enable
 
//-----------------------------------------------------------------------------
// SCI SPI registers
#define CYGARC_REG_IMM_SCCxR1_LOOPS 0x4000
#define CYGARC_REG_IMM_SCCxR1_WOMS 0x2000
#define CYGARC_REG_IMM_SCCxR1_ILT 0x1000
#define CYGARC_REG_IMM_SCCxR1_PT 0x0800
#define CYGARC_REG_IMM_SCCxR1_PE 0x0400
#define CYGARC_REG_IMM_SCCxR1_M 0x0200
#define CYGARC_REG_IMM_SCCxR1_WAKE 0x0100
#define CYGARC_REG_IMM_SCCxR1_TIE 0x0080
#define CYGARC_REG_IMM_SCCxR1_TCIE 0x0040
#define CYGARC_REG_IMM_SCCxR1_RIE 0x0020
#define CYGARC_REG_IMM_SCCxR1_ILIE 0x0010
#define CYGARC_REG_IMM_SCCxR1_TE 0x0008
#define CYGARC_REG_IMM_SCCxR1_RE 0x0004
#define CYGARC_REG_IMM_SCCxR1_RWU 0x0002
#define CYGARC_REG_IMM_SCCxR1_SBK 0x0001
#define CYGARC_REG_IMM_QSCI1CR_QTPNT 0xf000
#define CYGARC_REG_IMM_QSCI1CR_QTHFI 0x0800
#define CYGARC_REG_IMM_QSCI1CR_QBHFI 0x0400
#define CYGARC_REG_IMM_QSCI1CR_QTHEI 0x0200
#define CYGARC_REG_IMM_QSCI1CR_QBHEI 0x0100
#define CYGARC_REG_IMM_QSCI1CR_QTE 0x0040
#define CYGARC_REG_IMM_QSCI1CR_QRE 0x0020
#define CYGARC_REG_IMM_QSCI1CR_QTWE 0x0010
#define CYGARC_REG_IMM_QSCI1CR_QTSZ 0x000f
#define CYGARC_REG_IMM_SPCR1_SPE 0x8000
#define CYGARC_REG_IMM_SPCR1_DSCLK 0x7f00
#define CYGARC_REG_IMM_SPCR1_DTL 0x00ff
#define CYGARC_REG_IMM_SPCR2_SPIFIE 0x8000
#define CYGARC_REG_IMM_SPCR2_WREN 0x4000
#define CYGARC_REG_IMM_SPCR2_WRT0 0x2000
#define CYGARC_REG_IMM_SPCR2_ENDQP 0x1f00
#define CYGARC_REG_IMM_SPCR2_NEWQP 0x001f
#define CYGARC_REG_IMM_SPCR3_LOOPQ 0x0400
#define CYGARC_REG_IMM_SPCR3_HMIE 0x0200
#define CYGARC_REG_IMM_SPCR3_HALT 0x0100
#define CYGARC_REG_IMM_SPCR3_SPSR 0x00ff
#define CYGARC_REG_IMM_SCxSR_TDRE 0x0100
#define CYGARC_REG_IMM_SCxSR_TC 0x0080
#define CYGARC_REG_IMM_SCxSR_RDRF 0x0040
#define CYGARC_REG_IMM_SCxSR_RAF 0x0020
#define CYGARC_REG_IMM_SCxSR_IDLE 0x0010
#define CYGARC_REG_IMM_SCxSR_OR 0x0008
#define CYGARC_REG_IMM_SCxSR_NF 0x0004
#define CYGARC_REG_IMM_SCxSR_FE 0x0002
#define CYGARC_REG_IMM_SCxSR_PF 0x0001
#define CYGARC_REG_IMM_QSCI1SR_QOR 0x1000
#define CYGARC_REG_IMM_QSCI1SR_QTHF 0x0800
#define CYGARC_REG_IMM_QSCI1SR_QBHF 0x0400
#define CYGARC_REG_IMM_QSCI1SR_QTHE 0x0200
#define CYGARC_REG_IMM_QSCI1SR_QBHE 0x0100
#define CYGARC_REG_IMM_QSCI1SR_QRPNT 0x00f0
#define CYGARC_REG_IMM_QSCI1SR_QRPEND 0x000f
#define CYGARC_REG_IMM_SPSR_SPCR3 0xff00
#define CYGARC_REG_IMM_SPSR_SPIF 0x0080
#define CYGARC_REG_IMM_SPSR_MODF 0x0040
#define CYGARC_REG_IMM_SPSR_HALTA 0x0020
#define CYGARC_REG_IMM_SPSR_CPTQ 0x001f
#define CYGARC_REG_IMM_QDSCI_IL_ILDSCI 0x1f00
#define CYGARC_REG_IMM_QDSCI_IL_ILDSCI_SHIFT 8
#define CYGARC_REG_IMM_QSPI_IL_ILQSPI 0x001f
#define CYGARC_REG_IMM_QSPI_IL_ILQSPI_SHIFT 0
 
//-----------------------------------------------------------------------------
// TPU register settings
#define CYGARC_REG_IMM_TICR_CIRL 0x0700
#define CYGARC_REG_IMM_TICR_CIRL_SHIFT 8
#define CYGARC_REG_IMM_TICR_ILBS 0x00c0
#define CYGARC_REG_IMM_TICR_ILBS_SHIFT 6
 
//-----------------------------------------------------------------------------
// TOUCAN registers
#define CYGARC_REG_IMM_CANCTRL0_BOFFMSK 0x8000
#define CYGARC_REG_IMM_CANCTRL0_ERRMSK 0x4000
#define CYGARC_REG_IMM_CANCTRL0_RXMOD 0x0c00
#define CYGARC_REG_IMM_CANCTRL0_TXMOD 0x0300
#define CYGARC_REG_IMM_CANCTRL0_CANCTLL1 0x00ff
#define CYGARC_REG_IMM_TCNMCR_STOP 0x8000
#define CYGARC_REG_IMM_TCNMCR_FRZ 0x4000
#define CYGARC_REG_IMM_TCNMCR_HALT 0x1000
#define CYGARC_REG_IMM_TCNMCR_NOTRDY 0x0800
#define CYGARC_REG_IMM_TCNMCR_WAKEMSK 0x0400
#define CYGARC_REG_IMM_TCNMCR_SOFTRST 0x0200
#define CYGARC_REG_IMM_TCNMCR_FRZACK 0x0100
#define CYGARC_REG_IMM_TCNMCR_SUPV 0x0080
#define CYGARC_REG_IMM_TCNMCR_SELFWAKE 0x0040
#define CYGARC_REG_IMM_TCNMCR_APS 0x0020
#define CYGARC_REG_IMM_TCNMCR_STOPACK 0x0010
#define CYGARC_REG_IMM_ESTAT_BOFFINT 0x0004
#define CYGARC_REG_IMM_ESTAT_ERRINT 0x0002
#define CYGARC_REG_IMM_ESTAT_WAKEINT 0x0001
#define CYGARC_REG_IMM_CANICR_IRL 0x0700
#define CYGARC_REG_IMM_CANICR_IRL_SHIFT 8
#define CYGARC_REG_IMM_CANICR_ILBS 0x00c0
#define CYGARC_REG_IMM_CANICR_ILBS_SHIFT 6
 
//-----------------------------------------------------------------------------
// MIOS registers
#define CYGARC_REG_IMM_MIOS1ER0_EN15 0x8000
#define CYGARC_REG_IMM_MIOS1ER0_EN14 0x4000
#define CYGARC_REG_IMM_MIOS1ER0_EN13 0x2000
#define CYGARC_REG_IMM_MIOS1ER0_EN12 0x1000
#define CYGARC_REG_IMM_MIOS1ER0_EN11 0x0800
#define CYGARC_REG_IMM_MIOS1ER0_EN6 0x0040
#define CYGARC_REG_IMM_MIOS1ER0_EN3 0x0008
#define CYGARC_REG_IMM_MIOS1ER0_EN2 0x0004
#define CYGARC_REG_IMM_MIOS1ER0_EN1 0x0002
#define CYGARC_REG_IMM_MIOS1ER0_EN0 0x0001
#define CYGARC_REG_IMM_MIOS1ER1_EN31 0x8000
#define CYGARC_REG_IMM_MIOS1ER1_EN30 0x4000
#define CYGARC_REG_IMM_MIOS1ER1_EN29 0x2000
#define CYGARC_REG_IMM_MIOS1ER1_EN28 0x1000
#define CYGARC_REG_IMM_MIOS1ER1_EN27 0x0800
#define CYGARC_REG_IMM_MIOS1ER1_EN22 0x0040
#define CYGARC_REG_IMM_MIOS1ER1_EN19 0x0008
#define CYGARC_REG_IMM_MIOS1ER1_EN18 0x0004
#define CYGARC_REG_IMM_MIOS1ER1_EN17 0x0002
#define CYGARC_REG_IMM_MIOS1ER1_EN16 0x0001
#define CYGARC_REG_IMM_MIOS1SR0_FL15 0x8000
#define CYGARC_REG_IMM_MIOS1SR0_FL14 0x4000
#define CYGARC_REG_IMM_MIOS1SR0_FL13 0x2000
#define CYGARC_REG_IMM_MIOS1SR0_FL12 0x1000
#define CYGARC_REG_IMM_MIOS1SR0_FL11 0x0800
#define CYGARC_REG_IMM_MIOS1SR0_FL6 0x0040
#define CYGARC_REG_IMM_MIOS1SR0_FL3 0x0008
#define CYGARC_REG_IMM_MIOS1SR0_FL2 0x0004
#define CYGARC_REG_IMM_MIOS1SR0_FL1 0x0002
#define CYGARC_REG_IMM_MIOS1SR0_FL0 0x0001
#define CYGARC_REG_IMM_MIOS1SR1_FL31 0x8000
#define CYGARC_REG_IMM_MIOS1SR1_FL30 0x4000
#define CYGARC_REG_IMM_MIOS1SR1_FL29 0x2000
#define CYGARC_REG_IMM_MIOS1SR1_FL28 0x1000
#define CYGARC_REG_IMM_MIOS1SR1_FL27 0x0800
#define CYGARC_REG_IMM_MIOS1SR1_FL22 0x0040
#define CYGARC_REG_IMM_MIOS1SR1_FL19 0x0008
#define CYGARC_REG_IMM_MIOS1SR1_FL18 0x0004
#define CYGARC_REG_IMM_MIOS1SR1_FL17 0x0002
#define CYGARC_REG_IMM_MIOS1SR1_FL16 0x0001
#define CYGARC_REG_IMM_MIOS1LVL_LVL 0x0700
#define CYGARC_REG_IMM_MIOS1LVL_LVL_SHIFT 8
#define CYGARC_REG_IMM_MIOS1LVL_TM 0x00c0
#define CYGARC_REG_IMM_MIOS1LVL_TM_SHIFT 6
 
//-----------------------------------------------------------------------------
// Periodic interrupt timer count
#define CYGARC_REG_IMM_PITC_COUNT_SHIFT 16 // count is stored in bits 0-15
 
//-----------------------------------------------------------------------------
// System clock control
#define CYGARC_REG_IMM_SCCR_TBS 0x02000000 // Time base source
#define CYGARC_REG_IMM_SCCR_RTDIV 0x01000000 // rtc clock divide
#define CYGARC_REG_IMM_SCCR_RTSEL 0x00100000 // rtc clock select
 
//-------------------------------------
// TouCAN (CAN 2.0B Controller)
#define CYGARC_REG_IMM_CANICR_IRL 0x0700
#define CYGARC_REG_IMM_CANICR_IRL_SHIFT 8
#define CYGARC_REG_IMM_CANICR_ILBS 0x00c0
#define CYGARC_REG_IMM_CANICR_ILBS_SHIFT 6
 
#define CYGARC_REG_IMM_TCNMCR_STOP 0x8000
#define CYGARC_REG_IMM_TCNMCR_FRZ 0x4000
#define CYGARC_REG_IMM_TCNMCR_HALT 0x1000
#define CYGARC_REG_IMM_TCNMCR_NOTRDY 0x0800
#define CYGARC_REG_IMM_TCNMCR_WAKEMSK 0x0400
#define CYGARC_REG_IMM_TCNMCR_SOFTRST 0x0200
#define CYGARC_REG_IMM_TCNMCR_FRZACK 0x0100
#define CYGARC_REG_IMM_TCNMCR_SUPV 0x0080
#define CYGRAC_REG_IMM_TCNMCR_SELFWAKE 0x0040
#define CYGARC_REG_IMM_TCNMCR_APS 0x0020
#define CYGARC_REG_IMM_TCNMCR_STOPACK 0x0010
 
#define CYGARC_REG_IMM_CANCTRL0_CANCTRL1_BOFFMSK 0x8000
#define CYGARC_REG_IMM_CANCTRL0_CANCTRL1_ERRMSK 0x4000
#define CYGARC_REG_IMM_CANCTRL0_CANCTRL1_RXMOD 0x0c00
#define CYGARC_REG_IMM_CANCTRL0_CANCTRL1_TXMOD 0x0300
#define CYGARC_REG_IMM_CANCTRL0_CANCTRL1_RXMOD_SHIFT 10
#define CYGARC_REG_IMM_CANCTRL0_CANCTRL1_TXMOD_SHIFT 8
 
#define CYGARC_REG_IMM_ESTAT_BITERR 0xc000
#define CYGARC_REG_IMM_ESTAT_ACKERR 0x2000
#define CYGARC_REG_IMM_ESTAT_CRCERR 0x1000
#define CYGARC_REG_IMM_ESTAT_FORMERR 0x0800
#define CYGARC_REG_IMM_ESTAT_STUFFERR 0x0400
#define CYGARC_REG_IMM_ESTAT_TXWARN 0x0200
#define CYGARC_REG_IMM_ESTAT_RXWARN 0x0100
#define CYGARC_REG_IMM_ESTAT_IDLE 0x0080
#define CYGARC_REG_IMM_ESTAT_TX_RX 0x0040
#define CYGARC_REG_IMM_ESTAT_FCS 0x0030
#define CYGARC_REG_IMM_ESTAT_BOFFINT 0x0004
#define CYGARC_REG_IMM_ESTAT_ERRINT 0x0002
#define CYGARC_REG_IMM_ESTAT_WAKEINT 0x0001
#define CYGARC_REG_IMM_ESTAT_BITERR_SHIFT 14
#define CYGARC_REG_IMM_ESTAT_FCS_SHIFT 4
//-----------------------------------------------------------------------------
// All registers in the internal memory map
#define CYGARC_REG_IMM_BASE 0x002fc000
 
// General register definitions
#define CYGARC_REG_IMM_SIUMCR (CYGARC_REG_IMM_BASE+0x0000)
#define CYGARC_REG_IMM_SYPCR (CYGARC_REG_IMM_BASE+0x0004)
#define CYGARC_REG_IMM_SWSR (CYGARC_REG_IMM_BASE+0x000e)
#define CYGARC_REG_IMM_SIPEND (CYGARC_REG_IMM_BASE+0x0010)
#define CYGARC_REG_IMM_SIMASK (CYGARC_REG_IMM_BASE+0x0014)
#define CYGARC_REG_IMM_SIEL (CYGARC_REG_IMM_BASE+0x0018)
#define CYGARC_REG_IMM_SIVEC (CYGARC_REG_IMM_BASE+0x001c)
#define CYGARC_REG_IMM_TESR (CYGARC_REG_IMM_BASE+0x0020)
#define CYGARC_REG_IMM_SGPIODT1 (CYGARC_REG_IMM_BASE+0x0024)
#define CYGARC_REG_IMM_SGPIODT2 (CYGARC_REG_IMM_BASE+0x0028)
#define CYGARC_REG_IMM_SGPIOCR (CYGARC_REG_IMM_BASE+0x002c)
#define CYGARC_REG_IMM_EMCR (CYGARC_REG_IMM_BASE+0x0030)
#define CYGARC_REG_IMM_PDMCR (CYGARC_REG_IMM_BASE+0x003c)
 
// Memory controller registers
#define CYGARC_REG_IMM_BR0 (CYGARC_REG_IMM_BASE+0x0100)
#define CYGARC_REG_IMM_OR0 (CYGARC_REG_IMM_BASE+0x0104)
#define CYGARC_REG_IMM_BR1 (CYGARC_REG_IMM_BASE+0x0108)
#define CYGARC_REG_IMM_OR1 (CYGARC_REG_IMM_BASE+0x010c)
#define CYGARC_REG_IMM_BR2 (CYGARC_REG_IMM_BASE+0x0110)
#define CYGARC_REG_IMM_OR2 (CYGARC_REG_IMM_BASE+0x0114)
#define CYGARC_REG_IMM_BR3 (CYGARC_REG_IMM_BASE+0x0118)
#define CYGARC_REG_IMM_OR3 (CYGARC_REG_IMM_BASE+0x011c)
#define CYGARC_REG_IMM_DMBR (CYGARC_REG_IMM_BASE+0x0140)
#define CYGARC_REG_IMM_DMOR (CYGARC_REG_IMM_BASE+0x0144)
#define CYGARC_REG_IMM_MSTAT (CYGARC_REG_IMM_BASE+0x0178)
 
// System integration timers
#define CYGARC_REG_IMM_TBSCR (CYGARC_REG_IMM_BASE+0x0200)
#define CYGARC_REG_IMM_TBREF0 (CYGARC_REG_IMM_BASE+0x0204)
#define CYGARC_REG_IMM_TBREF1 (CYGARC_REG_IMM_BASE+0x0208)
#define CYGARC_REG_IMM_RTCSC (CYGARC_REG_IMM_BASE+0x0220)
#define CYGARC_REG_IMM_RTC (CYGARC_REG_IMM_BASE+0x0224)
#define CYGARC_REG_IMM_RTSEC (CYGARC_REG_IMM_BASE+0x0228)
#define CYGARC_REG_IMM_RTCAL (CYGARC_REG_IMM_BASE+0x022c)
#define CYGARC_REG_IMM_PISCR (CYGARC_REG_IMM_BASE+0x0240)
#define CYGARC_REG_IMM_PITC (CYGARC_REG_IMM_BASE+0x0244)
#define CYGARC_REG_IMM_PITR (CYGARC_REG_IMM_BASE+0x0248)
 
// Clocks and resets
#define CYGARC_REG_IMM_SCCR (CYGARC_REG_IMM_BASE+0x0280)
#define CYGARC_REG_IMM_PLPRCR (CYGARC_REG_IMM_BASE+0x0284)
#define CYGARC_REG_IMM_RSR (CYGARC_REG_IMM_BASE+0x0288)
#define CYGARC_REG_IMM_COLIR (CYGARC_REG_IMM_BASE+0x028c)
#define CYGARC_REG_IMM_VSRMCR (CYGARC_REG_IMM_BASE+0x0290)
 
// System IntegrationTimer Keys
#define CYGARC_REG_IMM_TBSCRK (CYGARC_REG_IMM_BASE+0x0300)
#define CYGARC_REG_IMM_TBREF0K (CYGARC_REG_IMM_BASE+0x0304)
#define CYGARC_REG_IMM_TBREF1K (CYGARC_REG_IMM_BASE+0x0308)
#define CYGARC_REG_IMM_TBK (CYGARC_REG_IMM_BASE+0x030c)
#define CYGARC_REG_IMM_RTCSCK (CYGARC_REG_IMM_BASE+0x0320)
#define CYGARC_REG_IMM_RTCK (CYGARC_REG_IMM_BASE+0x0324)
#define CYGARC_REG_IMM_RTSECK (CYGARC_REG_IMM_BASE+0x0328)
#define CYGARC_REG_IMM_RTCALK (CYGARC_REG_IMM_BASE+0x032c)
#define CYGARC_REG_IMM_PISCRK (CYGARC_REG_IMM_BASE+0x0340)
#define CYGARC_REG_IMM_PITCK (CYGARC_REG_IMM_BASE+0x0344)
 
// Clocks and reset keys
#define CYGARC_REG_IMM_SCCRK (CYGARC_REG_IMM_BASE+0x0380)
#define CYGARC_REG_IMM_PLPRCRK (CYGARC_REG_IMM_BASE+0x0384)
#define CYGARC_REG_IMM_RSRK (CYGARC_REG_IMM_BASE+0x0388)
 
//-------------------------------------
// CMF (CDR Mone T FLASH EEPROM)
//-------------------------------------
// CMF_A
#define CYGARC_REG_IMM_CMFMCR_A (CYGARC_REG_IMM_BASE+0x0800)
#define CYGARC_REG_IMM_CMFTST_A (CYGARC_REG_IMM_BASE+0x0804)
#define CYGARC_REG_IMM_CMFCTL_A (CYGARC_REG_IMM_BASE+0x0808)
// CMF_B
#define CYGARC_REG_IMM_CMFMCR_B (CYGARC_REG_IMM_BASE+0x0840)
#define CYGARC_REG_IMM_CMFTST_B (CYGARC_REG_IMM_BASE+0x0844)
#define CYGARC_REG_IMM_CMFCTL_B (CYGARC_REG_IMM_BASE+0x0848)
 
//-------------------------------------
// DPTRAM (Dual-Port TPU RAM)
//-------------------------------------
#define CYGARC_REG_IMM_DPTMCR (CYGARC_REG_IMM_BASE+0x4000)
#define CYGARC_REG_IMM_RAMTST (CYGARC_REG_IMM_BASE+0x4002)
#define CYGARC_REG_IMM_RAMBAR (CYGARC_REG_IMM_BASE+0x4004)
#define CYGARC_REG_IMM_MISRH (CYGARC_REG_IMM_BASE+0x4006)
#define CYGARC_REG_IMM_MISRL (CYGARC_REG_IMM_BASE+0x4008)
#define CYGARC_REG_IMM_MISCNT (CYGARC_REG_IMM_BASE+0x400a)
 
//-------------------------------------
// TPU3 (Time processing unit)
//-------------------------------------
// TPU-A
#define CYGARC_REG_IMM_TPUMCR_A (CYGARC_REG_IMM_BASE+0x8000)
#define CYGARC_REG_IMM_TCR_A (CYGARC_REG_IMM_BASE+0x8002)
#define CYGARC_REG_IMM_DSCR_A (CYGARC_REG_IMM_BASE+0x8004)
#define CYGARC_REG_IMM_DSSR_A (CYGARC_REG_IMM_BASE+0x8006)
#define CYGARC_REG_IMM_TICR_A (CYGARC_REG_IMM_BASE+0x8008)
#define CYGARC_REG_IMM_CIER_A (CYGARC_REG_IMM_BASE+0x800a)
#define CYGARC_REG_IMM_CFSR0_A (CYGARC_REG_IMM_BASE+0x800c)
#define CYGARC_REG_IMM_CFSR1_A (CYGARC_REG_IMM_BASE+0x800e)
#define CYGARC_REG_IMM_CFSR2_A (CYGARC_REG_IMM_BASE+0x8010)
#define CYGARC_REG_IMM_CFSR3_A (CYGARC_REG_IMM_BASE+0x8012)
#define CYGARC_REG_IMM_HSQR0_A (CYGARC_REG_IMM_BASE+0x8014)
#define CYGARC_REG_IMM_HSQR1_A (CYGARC_REG_IMM_BASE+0x8016)
#define CYGARC_REG_IMM_HSRR0_A (CYGARC_REG_IMM_BASE+0x8018)
#define CYGARC_REG_IMM_HSRR1_A (CYGARC_REG_IMM_BASE+0x801a)
#define CYGARC_REG_IMM_CPR0_A (CYGARC_REG_IMM_BASE+0x801c)
#define CYGARC_REG_IMM_CPR1_A (CYGARC_REG_IMM_BASE+0x801e)
#define CYGARC_REG_IMM_CISR_A (CYGARC_REG_IMM_BASE+0x8020)
#define CYGARC_REG_IMM_LR_A (CYGARC_REG_IMM_BASE+0x8022)
#define CYGARC_REG_IMM_SGLR_A (CYGARC_REG_IMM_BASE+0x8024)
#define CYGARC_REG_IMM_DCNR_A (CYGARC_REG_IMM_BASE+0x8026)
#define CYGARC_REG_IMM_TPUMCR2_A (CYGARC_REG_IMM_BASE+0x8028)
#define CYGARC_REG_IMM_TPUMCR3_A (CYGARC_REG_IMM_BASE+0x802a)
#define CYGARC_REG_IMM_ISDR_A (CYGARC_REG_IMM_BASE+0x802c)
#define CYGARC_REG_IMM_ISCR_A (CYGARC_REG_IMM_BASE+0x802e)
 
// TPU-B
#define CYGARC_REG_IMM_TPUMCR_B (CYGARC_REG_IMM_BASE+0x8400)
#define CYGARC_REG_IMM_TCR_B (CYGARC_REG_IMM_BASE+0x8402)
#define CYGARC_REG_IMM_DSCR_B (CYGARC_REG_IMM_BASE+0x8404)
#define CYGARC_REG_IMM_DSSR_B (CYGARC_REG_IMM_BASE+0x8406)
#define CYGARC_REG_IMM_TICR_B (CYGARC_REG_IMM_BASE+0x8408)
#define CYGARC_REG_IMM_CIER_B (CYGARC_REG_IMM_BASE+0x840a)
#define CYGARC_REG_IMM_CFSR0_B (CYGARC_REG_IMM_BASE+0x840c)
#define CYGARC_REG_IMM_CFSR1_B (CYGARC_REG_IMM_BASE+0x840e)
#define CYGARC_REG_IMM_CFSR2_B (CYGARC_REG_IMM_BASE+0x8410)
#define CYGARC_REG_IMM_CFSR3_B (CYGARC_REG_IMM_BASE+0x8412)
#define CYGARC_REG_IMM_HSQR0_B (CYGARC_REG_IMM_BASE+0x8414)
#define CYGARC_REG_IMM_HSQR1_B (CYGARC_REG_IMM_BASE+0x8416)
#define CYGARC_REG_IMM_HSRR0_B (CYGARC_REG_IMM_BASE+0x8418)
#define CYGARC_REG_IMM_HSRR1_B (CYGARC_REG_IMM_BASE+0x841a)
#define CYGARC_REG_IMM_CPR0_B (CYGARC_REG_IMM_BASE+0x841c)
#define CYGARC_REG_IMM_CPR1_B (CYGARC_REG_IMM_BASE+0x841e)
#define CYGARC_REG_IMM_CISR_B (CYGARC_REG_IMM_BASE+0x8420)
#define CYGARC_REG_IMM_LR_B (CYGARC_REG_IMM_BASE+0x8422)
#define CYGARC_REG_IMM_SGLR_B (CYGARC_REG_IMM_BASE+0x8424)
#define CYGARC_REG_IMM_DCNR_B (CYGARC_REG_IMM_BASE+0x8426)
#define CYGARC_REG_IMM_TPUMCR2_B (CYGARC_REG_IMM_BASE+0x8428)
#define CYGARC_REG_IMM_TPUMCR3_B (CYGARC_REG_IMM_BASE+0x842a)
#define CYGARC_REG_IMM_ISDR_B (CYGARC_REG_IMM_BASE+0x842c)
#define CYGARC_REG_IMM_ISCR_B (CYGARC_REG_IMM_BASE+0x842e)
 
 
//-------------------------------------
// QADC64 (Queued Analog-to-digital Converter)
//-------------------------------------
// QUADC-A
#define CYGARC_REG_IMM_QUADC64MCR_A (CYGARC_REG_IMM_BASE+0x8800)
#define CYGARC_REG_IMM_QUADC64TEST_A (CYGARC_REG_IMM_BASE+0x8802)
#define CYGARC_REG_IMM_QUADC64INT_A (CYGARC_REG_IMM_BASE+0x8804)
#define CYGARC_REG_IMM_PORTQA_A_PORTQB_A (CYGARC_REG_IMM_BASE+0x8806)
#define CYGARC_REG_IMM_DDRQA_A_DDRQB_A (CYGARC_REG_IMM_BASE+0x8808)
#define CYGARC_REG_IMM_QUACR0_A (CYGARC_REG_IMM_BASE+0x880a)
#define CYGARC_REG_IMM_QUACR1_A (CYGARC_REG_IMM_BASE+0x880c)
#define CYGARC_REG_IMM_QUACR2_A (CYGARC_REG_IMM_BASE+0x880e)
#define CYGARC_REG_IMM_QUASR0_A (CYGARC_REG_IMM_BASE+0x8810)
#define CYGARC_REG_IMM_QUASR1_A (CYGARC_REG_IMM_BASE+0x8812)
#define CYGARC_REG_IMM_CCW_A (CYGARC_REG_IMM_BASE+0x8a00)
#define CYGARC_REG_IMM_RJURR_A (CYGARC_REG_IMM_BASE+0x8a80)
#define CYGARC_REG_IMM_LJSRR_A (CYGARC_REG_IMM_BASE+0x8b00)
#define CYGARC_REG_IMM_LJURR_A (CYGARC_REG_IMM_BASE+0x8b80)
 
// QUADC-B
#define CYGARC_REG_IMM_QUADC64MCR_B (CYGARC_REG_IMM_BASE+0x8c00)
#define CYGARC_REG_IMM_QUADC64TEST_B (CYGARC_REG_IMM_BASE+0x8c02)
#define CYGARC_REG_IMM_QUADC64INT_B (CYGARC_REG_IMM_BASE+0x8c04)
#define CYGARC_REG_IMM_PORTQA_B_PORTQB_B (CYGARC_REG_IMM_BASE+0x8c06)
#define CYGARC_REG_IMM_DDRQA_B_DDRQB_B (CYGARC_REG_IMM_BASE+0x8c08)
#define CYGARC_REG_IMM_QUACR0_B (CYGARC_REG_IMM_BASE+0x8c0a)
#define CYGARC_REG_IMM_QUACR1_B (CYGARC_REG_IMM_BASE+0x8c0c)
#define CYGARC_REG_IMM_QUACR2_B (CYGARC_REG_IMM_BASE+0x8c0e)
#define CYGARC_REG_IMM_QUASR0_B (CYGARC_REG_IMM_BASE+0x8c10)
#define CYGARC_REG_IMM_QUASR1_B (CYGARC_REG_IMM_BASE+0x8c12)
#define CYGARC_REG_IMM_CCW_B (CYGARC_REG_IMM_BASE+0x8e00)
#define CYGARC_REG_IMM_RJURR_B (CYGARC_REG_IMM_BASE+0x8e80)
#define CYGARC_REG_IMM_LJSRR_B (CYGARC_REG_IMM_BASE+0x8f00)
#define CYGARC_REG_IMM_LJURR_B (CYGARC_REG_IMM_BASE+0x8f80)
 
//-------------------------------------
// QSMCM (Queued Serial Multi-Channel Module)
//-------------------------------------
#define CYGARC_REG_IMM_QSMCMMCR (CYGARC_REG_IMM_BASE+0x9000)
#define CYGARC_REG_IMM_QTEST (CYGARC_REG_IMM_BASE+0x9002)
#define CYGARC_REG_IMM_QDSCI_IL (CYGARC_REG_IMM_BASE+0x9004)
#define CYGARC_REG_IMM_QSPI_IL (CYGARC_REG_IMM_BASE+0x9006)
#define CYGARC_REG_IMM_SCC1R0 (CYGARC_REG_IMM_BASE+0x9008)
#define CYGARC_REG_IMM_SCC1R1 (CYGARC_REG_IMM_BASE+0x900a)
#define CYGARC_REG_IMM_SC1SR (CYGARC_REG_IMM_BASE+0x900c)
#define CYGARC_REG_IMM_SC1DR (CYGARC_REG_IMM_BASE+0x900e)
#define CYGARC_REG_IMM_PORTQS (CYGARC_REG_IMM_BASE+0x9014)
#define CYGARC_REG_IMM_PQSPAR_DDRQST (CYGARC_REG_IMM_BASE+0x9016)
#define CYGARC_REG_IMM_SPCR0 (CYGARC_REG_IMM_BASE+0x9018)
#define CYGARC_REG_IMM_SPCR1 (CYGARC_REG_IMM_BASE+0x901a)
#define CYGARC_REG_IMM_SPCR2 (CYGARC_REG_IMM_BASE+0x901c)
#define CYGARC_REG_IMM_SPCR3 (CYGARC_REG_IMM_BASE+0x901e)
#define CYGARC_REG_IMM_SPSR (CYGARC_REG_IMM_BASE+0x901f)
#define CYGARC_REG_IMM_SCC2R0 (CYGARC_REG_IMM_BASE+0x9020)
#define CYGARC_REG_IMM_SCC2R1 (CYGARC_REG_IMM_BASE+0x9022)
#define CYGARC_REG_IMM_SC2SR (CYGARC_REG_IMM_BASE+0x9024)
#define CYGARC_REG_IMM_SC2DR (CYGARC_REG_IMM_BASE+0x9026)
#define CYGARC_REG_IMM_QSCI1CR (CYGARC_REG_IMM_BASE+0x9028)
#define CYGARC_REG_IMM_QSCI1SR (CYGARC_REG_IMM_BASE+0x902a)
#define CYGARC_REG_IMM_SCTQ (CYGARC_REG_IMM_BASE+0x902c)
#define CYGARC_REG_IMM_SCRQ (CYGARC_REG_IMM_BASE+0x904c)
#define CYGARC_REG_IMM_RECRAM (CYGARC_REG_IMM_BASE+0x9140)
#define CYGARC_REG_IMM_TRAN_RAM (CYGARC_REG_IMM_BASE+0x9180)
#define CYGARC_REG_IMM_COMD_RAM (CYGARC_REG_IMM_BASE+0x91c0)
 
//-------------------------------------
// MIOS1 (Modular Input/Output Subsystem)
//-------------------------------------
// MPIOS Pulse width modulation submodule 0
#define CYGARC_REG_IMM_MPWMSMPERR_0 (CYGARC_REG_IMM_BASE+0xa000)
#define CYGARC_REG_IMM_MPWMSMPULR_0 (CYGARC_REG_IMM_BASE+0xa002)
#define CYGARC_REG_IMM_MPWMSMCNTR_0 (CYGARC_REG_IMM_BASE+0xa004)
#define CYGARC_REG_IMM_MPWMSMSCR_0 (CYGARC_REG_IMM_BASE+0xa006)
// MPIOS Pulse width modulation submodule 1
#define CYGARC_REG_IMM_MPWMSMPERR_1 (CYGARC_REG_IMM_BASE+0xa008)
#define CYGARC_REG_IMM_MPWMSMPULR_1 (CYGARC_REG_IMM_BASE+0xa00a)
#define CYGARC_REG_IMM_MPWMSMCNTR_1 (CYGARC_REG_IMM_BASE+0xa00c)
#define CYGARC_REG_IMM_MPWMSMSCR_1 (CYGARC_REG_IMM_BASE+0xa00e)
 
// MPIOS Pulse width modulation submodule 2
#define CYGARC_REG_IMM_MPWMSMPERR_2 (CYGARC_REG_IMM_BASE+0xa010)
#define CYGARC_REG_IMM_MPWMSMPULR_2 (CYGARC_REG_IMM_BASE+0xa012)
#define CYGARC_REG_IMM_MPWMSMCNTR_2 (CYGARC_REG_IMM_BASE+0xa014)
#define CYGARC_REG_IMM_MPWMSMSCR_2 (CYGARC_REG_IMM_BASE+0xa016)
 
// MPIOS Pulse width modulation submodule 3
#define CYGARC_REG_IMM_MPWMSMPERR_3 (CYGARC_REG_IMM_BASE+0xa018)
#define CYGARC_REG_IMM_MPWMSMPULR_3 (CYGARC_REG_IMM_BASE+0xa01a)
#define CYGARC_REG_IMM_MPWMSMCNTR_3 (CYGARC_REG_IMM_BASE+0xa01c)
#define CYGARC_REG_IMM_MPWMSMSCR_3 (CYGARC_REG_IMM_BASE+0xa01e)
 
// MIOS Modulus counter submodule 6
#define CYGARC_REG_IMM_MMCSMCNT_6 (CYGARC_REG_IMM_BASE+0xa030)
#define CYGARC_REG_IMM_MMCSMML_6 (CYGARC_REG_IMM_BASE+0xa032)
#define CYGARC_REG_IMM_MMCSMSCRD_6 (CYGARC_REG_IMM_BASE+0xa034)
#define CYGARC_REG_IMM_MMCSMSCR_6 (CYGARC_REG_IMM_BASE+0xa036)
 
// MIOS Double Action submodule 11
#define CYGARC_REG_IMM_MDASMAR_11 (CYGARC_REG_IMM_BASE+0xa058)
#define CYGARC_REG_IMM_MDASMBR_11 (CYGARC_REG_IMM_BASE+0xa05a)
#define CYGARC_REG_IMM_MDASMSCRD_11 (CYGARC_REG_IMM_BASE+0xa05c)
#define CYGARC_REG_IMM_MDASMSCR_11 (CYGARC_REG_IMM_BASE+0xa05e)
 
// MIOS Double Action submodule 12
#define CYGARC_REG_IMM_MDASMAR_12 (CYGARC_REG_IMM_BASE+0xa060)
#define CYGARC_REG_IMM_MDASMBR_12 (CYGARC_REG_IMM_BASE+0xa062)
#define CYGARC_REG_IMM_MDASMSCRD_12 (CYGARC_REG_IMM_BASE+0xa064)
#define CYGARC_REG_IMM_MDASMSCR_12 (CYGARC_REG_IMM_BASE+0xa066)
 
// MIOS Double Action submodule 13
#define CYGARC_REG_IMM_MDASMAR_13 (CYGARC_REG_IMM_BASE+0xa068)
#define CYGARC_REG_IMM_MDASMBR_13 (CYGARC_REG_IMM_BASE+0xa06a)
#define CYGARC_REG_IMM_MDASMSCRD_13 (CYGARC_REG_IMM_BASE+0xa06c)
#define CYGARC_REG_IMM_MDASMSCR_13 (CYGARC_REG_IMM_BASE+0xa06e)
 
// MIOS Double Action submodule 14
#define CYGARC_REG_IMM_MDASMAR_14 (CYGARC_REG_IMM_BASE+0xa070)
#define CYGARC_REG_IMM_MDASMBR_14 (CYGARC_REG_IMM_BASE+0xa072)
#define CYGARC_REG_IMM_MDASMSCRD_14 (CYGARC_REG_IMM_BASE+0xa074)
#define CYGARC_REG_IMM_MDASMSCR_14 (CYGARC_REG_IMM_BASE+0xa076)
 
// MIOS Double Action submodule 15
#define CYGARC_REG_IMM_MDASMAR_15 (CYGARC_REG_IMM_BASE+0xa078)
#define CYGARC_REG_IMM_MDASMBR_15 (CYGARC_REG_IMM_BASE+0xa07a)
#define CYGARC_REG_IMM_MDASMSCRD_15 (CYGARC_REG_IMM_BASE+0xa07c)
#define CYGARC_REG_IMM_MDASMSCR_15 (CYGARC_REG_IMM_BASE+0xa07e)
 
// MPIOS Pulse width modulation submodule 16
#define CYGARC_REG_IMM_MPWMSMPERR_16 (CYGARC_REG_IMM_BASE+0xa080)
#define CYGARC_REG_IMM_MPWMSMPULR_16 (CYGARC_REG_IMM_BASE+0xa082)
#define CYGARC_REG_IMM_MPWMSMCNTR_16 (CYGARC_REG_IMM_BASE+0xa084)
#define CYGARC_REG_IMM_MPWMSMSCR_16 (CYGARC_REG_IMM_BASE+0xa086)
 
// MPIOS Pulse width modulation submodule 17
#define CYGARC_REG_IMM_MPWMSMPERR_17 (CYGARC_REG_IMM_BASE+0xa088)
#define CYGARC_REG_IMM_MPWMSMPULR_17 (CYGARC_REG_IMM_BASE+0xa08a)
#define CYGARC_REG_IMM_MPWMSMCNTR_17 (CYGARC_REG_IMM_BASE+0xa08c)
#define CYGARC_REG_IMM_MPWMSMSCR_17 (CYGARC_REG_IMM_BASE+0xa08e)
 
// MPIOS Pulse width modulation submodule 18
#define CYGARC_REG_IMM_MPWMSMPERR_18 (CYGARC_REG_IMM_BASE+0xa090)
#define CYGARC_REG_IMM_MPWMSMPULR_18 (CYGARC_REG_IMM_BASE+0xa092)
#define CYGARC_REG_IMM_MPWMSMCNTR_18 (CYGARC_REG_IMM_BASE+0xa094)
#define CYGARC_REG_IMM_MPWMSMSCR_18 (CYGARC_REG_IMM_BASE+0xa096)
 
// MPIOS Pulse width modulation submodule 19
#define CYGARC_REG_IMM_MPWMSMPERR_19 (CYGARC_REG_IMM_BASE+0xa098)
#define CYGARC_REG_IMM_MPWMSMPULR_19 (CYGARC_REG_IMM_BASE+0xa09a)
#define CYGARC_REG_IMM_MPWMSMCNTR_19 (CYGARC_REG_IMM_BASE+0xa09c)
#define CYGARC_REG_IMM_MPWMSMSCR_19 (CYGARC_REG_IMM_BASE+0xa09e)
 
// MIOS Modulus counter submodule 22
#define CYGARC_REG_IMM_MMCSMCNT_22 (CYGARC_REG_IMM_BASE+0xa0b0)
#define CYGARC_REG_IMM_MMCSMML_22 (CYGARC_REG_IMM_BASE+0xa0b2)
#define CYGARC_REG_IMM_MMCSMSCRD_22 (CYGARC_REG_IMM_BASE+0xa0b4)
#define CYGARC_REG_IMM_MMCSMSCR_22 (CYGARC_REG_IMM_BASE+0xa0b6)
 
// MIOS Double action submodule 27
#define CYGARC_REG_IMM_MDASMAR_27 (CYGARC_REG_IMM_BASE+0xa0d8)
#define CYGARC_REG_IMM_MDASMBR_27 (CYGARC_REG_IMM_BASE+0xa0da)
#define CYGARC_REG_IMM_MDASMSCRD_27 (CYGARC_REG_IMM_BASE+0xa0dc)
#define CYGARC_REG_IMM_MDASMSCR_27 (CYGARC_REG_IMM_BASE+0xa0de)
 
// MIOS Double action submodule 28
#define CYGARC_REG_IMM_MDASMAR_28 (CYGARC_REG_IMM_BASE+0xa0e0)
#define CYGARC_REG_IMM_MDASMBR_28 (CYGARC_REG_IMM_BASE+0xa0e2)
#define CYGARC_REG_IMM_MDASMSCRD_28 (CYGARC_REG_IMM_BASE+0xa0e4)
#define CYGARC_REG_IMM_MDASMSCR_28 (CYGARC_REG_IMM_BASE+0xa0e6)
 
// MIOS Double action submodule 29
#define CYGARC_REG_IMM_MDASMAR_29 (CYGARC_REG_IMM_BASE+0xa0e8)
#define CYGARC_REG_IMM_MDASMBR_29 (CYGARC_REG_IMM_BASE+0xa0ea)
#define CYGARC_REG_IMM_MDASMSCRD_29 (CYGARC_REG_IMM_BASE+0xa0ec)
#define CYGARC_REG_IMM_MDASMSCR_29 (CYGARC_REG_IMM_BASE+0xa0ee)
 
// MIOS Double action submodule 30
#define CYGARC_REG_IMM_MDASMAR_30 (CYGARC_REG_IMM_BASE+0xa0f0)
#define CYGARC_REG_IMM_MDASMBR_30 (CYGARC_REG_IMM_BASE+0xa0f2)
#define CYGARC_REG_IMM_MDASMSCRD_30 (CYGARC_REG_IMM_BASE+0xa0f4)
#define CYGARC_REG_IMM_MDASMSCR_30 (CYGARC_REG_IMM_BASE+0xa0f6)
 
// MIOS Double action submodule 31
#define CYGARC_REG_IMM_MDASMAR_31 (CYGARC_REG_IMM_BASE+0x0af8)
#define CYGARC_REG_IMM_MDASMBR_31 (CYGARC_REG_IMM_BASE+0xa0fa)
#define CYGARC_REG_IMM_MDASMSCRD_31 (CYGARC_REG_IMM_BASE+0xa0fc)
#define CYGARC_REG_IMM_MDASMSCR_31 (CYGARC_REG_IMM_BASE+0xa0fe)
 
// MIOS Paralell port I/O submodule
#define CYGARC_REG_IMM_MPIOSMDR (CYGARC_REG_IMM_BASE+0xa100)
#define CYGARC_REG_IMM_MPIOSMDDR (CYGARC_REG_IMM_BASE+0xa102)
 
// MIOS Bus interface Submodule
#define CYGARC_REG_IMM_MIOS1TPCR (CYGARC_REG_IMM_BASE+0xa800)
#define CYGARC_REG_IMM_MIOS1VNR (CYGARC_REG_IMM_BASE+0xa802)
#define CYGARC_REG_IMM_MIOS1MCR (CYGARC_REG_IMM_BASE+0xa806)
 
// MIOS Counter / Prescaler submodule
#define CYGARC_REG_IMM_MCPSMSCR (CYGARC_REG_IMM_BASE+0xa816)
 
// MIOS Interrupt request submodule 0
#define CYGARC_REG_IMM_MIOS1SR0 (CYGARC_REG_IMM_BASE+0xac00)
#define CYGARC_REG_IMM_MIOS1ER0 (CYGARC_REG_IMM_BASE+0xac04)
#define CYGARC_REG_IMM_MIOS1RPR0 (CYGARC_REG_IMM_BASE+0xac06)
#define CYGARC_REG_IMM_MIOS1LVL0 (CYGARC_REG_IMM_BASE+0xac30)
 
// Mios Interrupt request submodule 1
#define CYGARC_REG_IMM_MIOS1SR1 (CYGARC_REG_IMM_BASE+0xac40)
#define CYGARC_REG_IMM_MIOS1ER1 (CYGARC_REG_IMM_BASE+0xac44)
#define CYGARC_REG_IMM_MIOS1RPR1 (CYGARC_REG_IMM_BASE+0xac46)
#define CYGARC_REG_IMM_MIOS1LVL1 (CYGARC_REG_IMM_BASE+0xac70)
 
//-------------------------------------
// TouCAN (CAN 2.0B Controller)
//-------------------------------------
// TouCAN_A
#define CYGARC_REG_IMM_TCNMCR_A (CYGARC_REG_IMM_BASE+0xb080)
#define CYGARC_REG_IMM_TTR_A (CYGARC_REG_IMM_BASE+0xb082)
#define CYGARC_REG_IMM_CANICR_A (CYGARC_REG_IMM_BASE+0xb084)
#define CYGARC_REG_IMM_CANCTRL0_A_CANCTRL1_A (CYGARC_REG_IMM_BASE+0xb086)
#define CYGARC_REG_IMM_PRESDIV_A_CTRL2_A (CYGARC_REG_IMM_BASE+0xb088)
#define CYGARC_REG_IMM_TIMER_A (CYGARC_REG_IMM_BASE+0xb08a)
#define CYGARC_REG_IMM_RXGMASKHI_A (CYGARC_REG_IMM_BASE+0xb090)
#define CYGARC_REG_IMM_RXGMASKLO_A (CYGARC_REG_IMM_BASE+0xb092)
#define CYGARC_REG_IMM_RX14MASKHI_A (CYGARC_REG_IMM_BASE+0xb094)
#define CYGARC_REG_IMM_RX14MASKLO_A (CYGARC_REG_IMM_BASE+0xb096)
#define CYGARC_REG_IMM_RX15MASKHI_A (CYGARC_REG_IMM_BASE+0xb098)
#define CYGARC_REG_IMM_RX15MASKLO_A (CYGARC_REG_IMM_BASE+0xb09a)
#define CYGARC_REG_IMM_ESTAT_A (CYGARC_REG_IMM_BASE+0xb0a0)
#define CYGARC_REG_IMM_IMASK_A (CYGARC_REG_IMM_BASE+0xb0a2)
#define CYGARC_REG_IMM_IFLAG_A (CYGARC_REG_IMM_BASE+0xb0a4)
#define CYGARC_REG_IMM_RXECTR_A_TXECTR_A (CYGARC_REG_IMM_BASE+0xb0a6)
 
// TouCAN_B
#define CYGARC_REG_IMM_TCNMCR_B (CYGARC_REG_IMM_BASE+0xb480)
#define CYGARC_REG_IMM_TTR_B (CYGARC_REG_IMM_BASE+0xb482)
#define CYGARC_REG_IMM_CANICR_B (CYGARC_REG_IMM_BASE+0xb484)
#define CYGARC_REG_IMM_CANCTRL0_B_CANCTRL1_B (CYGARC_REG_IMM_BASE+0xb486)
#define CYGARC_REG_IMM_PRESDIV_B_CTRL2_B (CYGARC_REG_IMM_BASE+0xb488)
#define CYGARC_REG_IMM_TIMER_B (CYGARC_REG_IMM_BASE+0xb48a)
#define CYGARC_REG_IMM_RXGMASKHI_B (CYGARC_REG_IMM_BASE+0xb490)
#define CYGARC_REG_IMM_RXGMASKLO_B (CYGARC_REG_IMM_BASE+0xb492)
#define CYGARC_REG_IMM_RX14MASKHI_B (CYGARC_REG_IMM_BASE+0xb494)
#define CYGARC_REG_IMM_RX14MASKLO_B (CYGARC_REG_IMM_BASE+0xb496)
#define CYGARC_REG_IMM_RX15MASKHI_B (CYGARC_REG_IMM_BASE+0xb498)
#define CYGARC_REG_IMM_RX15MASKLO_B (CYGARC_REG_IMM_BASE+0xb49a)
#define CYGARC_REG_IMM_ESTAT_B (CYGARC_REG_IMM_BASE+0xb4a0)
#define CYGARC_REG_IMM_IMASK_B (CYGARC_REG_IMM_BASE+0xb4a2)
#define CYGARC_REG_IMM_IFLAG_B (CYGARC_REG_IMM_BASE+0xb4a4)
#define CYGARC_REG_IMM_RXECTR_A_TXECTR_B (CYGARC_REG_IMM_BASE+0xb4a6)
 
//-------------------------------------
// UIMB (U-Bus to IMB3 Bus Interface)
//-------------------------------------
#define CYGARC_REG_IMM_UMCR (CYGARC_REG_IMM_BASE+0xbf80)
#define CYGARC_REG_IMM_UTSTCREG (CYGARC_REG_IMM_BASE+0xbf90)
#define CYGARC_REG_IMM_UIPEND (CYGARC_REG_IMM_BASE+0xbfa0)
 
//-------------------------------------
// SRAM (Static RAM Access memory)
//-------------------------------------
#define CYGARC_REG_IMM_SRAMMCR_A (CYGARC_REG_IMM_BASE+0x84000)
#define CYGARC_REG_IMM_SRAMTST_A (CYGARC_REG_IMM_BASE+0x84004)
#define CYGARC_REG_IMM_SRAMMCR_B (CYGARC_REG_IMM_BASE+0x84008)
#define CYGARC_REG_IMM_SRAMTST_B (CYGARC_REG_IMM_BASE+0x8400c)
 
#ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
// definitions without CYGARC_REG_ can come here. If there is a need for it ....
#endif
 
//-----------------------------------------------------------------------------
#endif // ifdef CYGONCE_HAL_VAR_REGS_H
// End of var_regs.h
/ChangeLog
0,0 → 1,39
2002-04-25 Bob Koninckx <bob.koninckx@mech.kuleuven.ac.be>
2002-04-25 Jonathan Larmour <jlarmour@redhat.com>
 
* New package.
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
/src/mpc5xxrev.c
0,0 → 1,74
//==========================================================================
//
// mpc5xxrev.c
//
// MPC5xx Revision Identification
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Bob Koninckx
// Contributors: Bob Koninckx
// Date: 2001-12-11
// Description: Print MPC5xx revision numbers
//####DESCRIPTIONEND####
 
#include <cyg/infra/testcase.h>
#include <stdio.h>
#include <cyg/hal/ppc_regs.h>
#include <cyg/hal/hal_io.h>
#include <cyg/infra/diag.h>
 
int
main( void )
{
cyg_uint32 pvr, part_mask;
 
CYG_TEST_INIT();
 
asm volatile ("mfspr %0, 287;": "=r" (pvr));
diag_printf("Processor PVR: 0x%08x\n", pvr);
 
asm volatile ("mfspr %0, 638;": "=r" (part_mask));
part_mask = (part_mask >> 16);
diag_printf("Processor IMMR[00:15]: 0x%04x\n", (part_mask & 0xffff));
 
diag_printf("\nSee http://www.motorola.com/SPS/RISC/netcomm/ for erratas.\n");
diag_printf("Look for MPC5xx Versions and Masks in the Publications Library\n");
 
CYG_TEST_PASS_FINISH("mpc5xx revision dump");
}
// EOF mpc5xxrev.c
/src/var_misc.c
0,0 → 1,105
//==========================================================================
//
// var_misc.c
//
// HAL implementation miscellaneous functions
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Bob Koninckx
// Contributors: Bob Koninckx
// Date: 2001-12-10
// Purpose: HAL miscellaneous functions
// Description: This file contains miscellaneous functions provided by the
// HAL.
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
 
#define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
#include <cyg/hal/ppc_regs.h>
#include <cyg/infra/cyg_type.h> // types
#include <cyg/infra/diag.h> // diag_printf
 
#include <cyg/hal/hal_mem.h> // some of the functions defined here
 
//--------------------------------------------------------------------------
void
hal_variant_init(void)
{
// Disable serialization
{
cyg_uint32 ictrl;
CYGARC_MFSPR (ICTRL, ictrl);
ictrl |= ICTRL_NOSERSHOW;
CYGARC_MTSPR (ICTRL, ictrl);
}
}
 
//--------------------------------------------------------------------------
// Variant specific idle thread action.
bool
hal_variant_idle_thread_action( cyg_uint32 count )
{
// Let architecture idle thread action run
return true;
}
 
//---------------------------------------------------------------------------
// Use MMU resources to map memory regions.
// Takes and returns an int used to ID the MMU resource to use. This ID
// is increased as resources are used and should be used for subsequent
// invocations.
//
// The MPC5xx CPUs do not have cache. Leave these functions empty
int
cyg_hal_map_memory (int id,CYG_ADDRESS virt, CYG_ADDRESS phys,
cyg_int32 size, cyg_uint8 flags)
{
return 0;
}
 
void
cyg_hal_clear_MMU (void)
{
}
 
//--------------------------------------------------------------------------
// End of var_misc.c
/src/var_intr.c
0,0 → 1,285
//==========================================================================
//
// var_intr.c
//
// PowerPC variant interrupt handlers
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Bob Koninckx
// Contributors: Bob Koninckx
// Date: 2001-12-16
// Purpose: PowerPC variant interrupt handlers
// Description: This file contains code to handle interrupt related issues
// on the PowerPC variant.
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
#include <cyg/hal/ppc_regs.h>
#include <cyg/hal/hal_arbiter.h>
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Since the interrupt sources do not have fixed vectors on the 5XX
// SIU, some arbitration is required.
 
// More than one interrupt source can be programmed to use the same
// vector, so all sources on the same vector have to be queried to
// find the one raising the interrupt. This functionality has not been
// implemented, but the arbiter functions for each of the SIU
// interrupt sources can be called in sequence without change.
 
 
 
// Timebase interrupt can be caused by match on either reference A
// or B.
// Note: If only one interrupt source is assigned per vector, and only
// reference interrupt A or B is used, this ISR is not
// necessary. Attach the timerbase reference A or B ISR directly to
// the LVLx vector instead.
externC cyg_uint32
hal_arbitration_isr_tb (CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
cyg_uint32 isr_ret;
cyg_uint16 tbscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
if (tbscr & CYGARC_REG_IMM_TBSCR_REFA) {
isr_ret = hal_call_isr (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
if (isr_ret & CYG_ISR_HANDLED)
#endif
return isr_ret;
}
 
if (tbscr & CYGARC_REG_IMM_TBSCR_REFB) {
isr_ret = hal_call_isr (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
if (isr_ret & CYG_ISR_HANDLED)
#endif
return isr_ret;
}
 
return 0;
}
 
// Periodic interrupt.
// Note: If only one interrupt source is assigned per vector, this ISR
// is not necessary. Attach the periodic interrupt ISR directly to the
// LVLx vector instead.
externC cyg_uint32
hal_arbitration_isr_pit (CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
cyg_uint32 isr_ret;
cyg_uint16 piscr;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
if (piscr & CYGARC_REG_IMM_PISCR_PS) {
isr_ret = hal_call_isr (CYGNUM_HAL_INTERRUPT_SIU_PIT);
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
if (isr_ret & CYG_ISR_HANDLED)
#endif
return isr_ret;
}
 
return 0;
}
 
// Real time clock interrupts can be caused by the alarm or
// once-per-second.
// Note: If only one interrupt source is assigned per vector, and only
// the alarm or once-per-second interrupt is used, this ISR is not
// necessary. Attach the alarm or once-per-second ISR directly to the
// LVLx vector instead.
externC cyg_uint32
hal_arbitration_isr_rtc (CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
cyg_uint32 isr_ret;
cyg_uint16 rtcsc;
 
HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
if (rtcsc & CYGARC_REG_IMM_RTCSC_SEC) {
isr_ret = hal_call_isr (CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC);
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
if (isr_ret & CYG_ISR_HANDLED)
#endif
return isr_ret;
}
 
if (rtcsc & CYGARC_REG_IMM_RTCSC_ALR) {
isr_ret = hal_call_isr (CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR);
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
if (isr_ret & CYG_ISR_HANDLED)
#endif
return isr_ret;
}
 
return 0;
}
 
// -------------------------------------------------------------------------
// IMB3 interrupt decoding
//
// All interrupt priorities higher than 7 are mapped to SIU level 7. As much
// as 15 interrupting devices can be behind this. If more than one IMB3
// device is to be used with priorites in the range 7-31, a special kind of
// arbitration isr needs to be set up on SIU level 7. As this is not allways
// necessary, it is provided as a configuration option.
#ifdef CYGSEM_HAL_POWERPC_MPC5XX_IMB3_ARBITER
static hal_mpc5xx_arbitration_data * imb3_data_head = 0;
 
static cyg_uint32
hal_arbitration_imb3(CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
hal_mpc5xx_arbitration_data * p =
*(hal_mpc5xx_arbitration_data **)data;
 
// Try them all, highest priorities come first. An ISR should return
// CYG_ISR_HANDLED or CYG_ISR_CALL_DSR. An arbitration ISR will
// strip the CYG_DSR_HANDLED from the ISR result, or returns 0 if
// no ISR could be called. This means that CYG_ISR_HANDLED implies
// that an ISR was called, 0 means that nothing was called.
// Notice that our approach tries to be efficient. We return as soon
// as the first interrupting source is found. This prevents from scanning
// the complete table for every interrupt. If more than one module
// requested at the same time, we will re-enter this procedure immediately
// anyway.
while(p)
{
if((p->arbiter(CYGNUM_HAL_INTERRUPT_SIU_LVL7, p->data))&CYG_ISR_HANDLED)
break;
else
p = (hal_mpc5xx_arbitration_data *)(p->reserved);
}
 
return 0;
}
 
static hal_mpc5xx_arbitration_data *
mpc5xx_insert(hal_mpc5xx_arbitration_data * list,
hal_mpc5xx_arbitration_data * data)
{
hal_mpc5xx_arbitration_data tmp;
hal_mpc5xx_arbitration_data * ptmp = &tmp;
tmp.reserved = list;
 
while(ptmp->reserved)
{
if(((hal_mpc5xx_arbitration_data *)(ptmp->reserved))->priority > data->priority)
break;
ptmp = (hal_mpc5xx_arbitration_data *)(ptmp->reserved);
}
 
data->reserved = ptmp->reserved;
ptmp->reserved = data;
return (hal_mpc5xx_arbitration_data *)(tmp.reserved);
}
 
static hal_mpc5xx_arbitration_data *
mpc5xx_remove(hal_mpc5xx_arbitration_data * list,
hal_mpc5xx_arbitration_data * data)
{
hal_mpc5xx_arbitration_data tmp;
hal_mpc5xx_arbitration_data * ptmp = &tmp;
tmp.reserved = list;
 
while(ptmp->reserved)
{
if(ptmp->reserved == data)
break;
ptmp = (hal_mpc5xx_arbitration_data *)(ptmp->reserved);
}
 
if(ptmp->reserved)
ptmp->reserved = ((hal_mpc5xx_arbitration_data *)(ptmp->reserved))->reserved;
 
return (hal_mpc5xx_arbitration_data *)(tmp.reserved);
}
#endif
 
externC void
hal_mpc5xx_install_arbitration_isr(hal_mpc5xx_arbitration_data * adata)
{
CYG_ADDRWORD vector = 2*(1 + adata->priority);
if(vector < CYGNUM_HAL_INTERRUPT_SIU_LVL7)
{
HAL_INTERRUPT_ATTACH(vector, adata->arbiter, adata->data, 0);
HAL_INTERRUPT_UNMASK(vector);
}
else
{
#ifdef CYGSEM_HAL_POWERPC_MPC5XX_IMB3_ARBITER
// Prevent anything from coming through while manipulating
// the list
HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_SIU_LVL7);
imb3_data_head = mpc5xx_insert(imb3_data_head, adata);
HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_SIU_LVL7);
#else
HAL_INTERRUPT_ATTACH(CYGNUM_HAL_INTERRUPT_SIU_LVL7, adata->arbiter, adata->data, 0);
HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_SIU_LVL7);
#endif
}
}
 
externC void
hal_mpc5xx_remove_arbitration_isr(hal_mpc5xx_arbitration_data * adata)
{
#ifdef CYGSEM_HAL_POWERPC_MPC5XX_IMB3_ARBITER
// Prevent anything from coming through while manipulating the list
HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_SIU_LVL7);
imb3_data_head = mpc5xx_remove(imb3_data_head, adata);
HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_SIU_LVL7);
#endif
}
 
// -------------------------------------------------------------------------
// Variant specific interrupt setup
externC void
hal_variant_IRQ_init(void)
{
#ifdef CYGSEM_HAL_POWERPC_MPC5XX_IMB3_ARBITER
HAL_INTERRUPT_ATTACH(CYGNUM_HAL_INTERRUPT_SIU_LVL7, hal_arbitration_imb3, &imb3_data_head, 0);
HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_SIU_LVL7);
#endif
}
 
// -------------------------------------------------------------------------
// EOF var_intr.c
/src/variant.S
0,0 → 1,85
##=============================================================================
##
## variant.S
##
## POWERPC MPC8xx variant code
##
##=============================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, 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.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
##=============================================================================
#######DESCRIPTIONBEGIN####
##
## Author(s): jskov
## Contributors:jskov
## Date: 2000-02-04
## Purpose: PowerPC MPC8xx variant code
## Description: Variant specific code for PowerPC MPC8xx CPUs.
##
######DESCRIPTIONEND####
##
##=============================================================================
 
#include <cyg/hal/arch.inc>
#---------------------------------------------------------------------------
# Interrupt vector tables.
# These tables contain the isr, data and object pointers used to deliver
# interrupts to user code.
 
.data
 
.extern hal_default_decrementer_isr
.extern hal_default_isr
 
.globl hal_interrupt_handlers
hal_interrupt_handlers:
.long hal_default_decrementer_isr
.rept CYGNUM_HAL_ISR_COUNT-1
.long hal_default_isr
.endr
 
.globl hal_interrupt_data
hal_interrupt_data:
.rept CYGNUM_HAL_ISR_COUNT
.long 0
.endr
 
.globl hal_interrupt_objects
hal_interrupt_objects:
.rept CYGNUM_HAL_ISR_COUNT
.long 0
.endr
 
##-----------------------------------------------------------------------------
## end of variant.S

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.