mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
割り込みライブラリ追加。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@88 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
63c169ea3c
commit
450a4db341
@ -29,6 +29,8 @@ SRCDIR = . ../common
|
|||||||
|
|
||||||
SRCS = \
|
SRCS = \
|
||||||
os_timer.c \
|
os_timer.c \
|
||||||
|
os_interrupt.c \
|
||||||
|
os_interrupt_common.c \
|
||||||
|
|
||||||
TARGET_LIB = libos$(BROM_LIBSUFFIX).a
|
TARGET_LIB = libos$(BROM_LIBSUFFIX).a
|
||||||
|
|
||||||
|
|||||||
280
trunk/bootrom/build/libraries/os/ARM11/os_interrupt.c
Normal file
280
trunk/bootrom/build/libraries/os/ARM11/os_interrupt.c
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: CtrBrom - libraries - OS
|
||||||
|
File: os_interrupt.c
|
||||||
|
|
||||||
|
Copyright 2008 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
|
||||||
|
$Date:: $
|
||||||
|
$Rev$
|
||||||
|
$Author$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#include <brom/os.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osInitInterrupt
|
||||||
|
|
||||||
|
Description: Initialize Interrupts
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void osInitInterrupt( void )
|
||||||
|
{
|
||||||
|
static BOOL isInit;
|
||||||
|
|
||||||
|
if ( isInit == FALSE )
|
||||||
|
{
|
||||||
|
isInit = TRUE;
|
||||||
|
|
||||||
|
(void)osDisableIrqAndFiq();
|
||||||
|
|
||||||
|
osInitInterruptTable();
|
||||||
|
|
||||||
|
{
|
||||||
|
u32 num = OS_INTR_ID_NUM;
|
||||||
|
u32 conf = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for ( i=0; i<MATH_ROUNDUP(num, 32)/32; i++ )
|
||||||
|
{
|
||||||
|
reg_OS_IDR_CLR_IE[i] = HW_IDR_WORD_MASK;
|
||||||
|
reg_OS_IDR_CLR_PND[i] = HW_IDR_WORD_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( i=0; i<num; i++ )
|
||||||
|
{
|
||||||
|
reg_OS_IDR_TGT[i] = REG_OS_IDR_TGT0_C0_MASK;
|
||||||
|
reg_OS_IDR_PRIO[i] = OS_IDR_INTR_PRIO_DEFAULT << 4;
|
||||||
|
}
|
||||||
|
for ( i=0; i<32; i+=2 )
|
||||||
|
{
|
||||||
|
conf |= (HW_IDR_INTR_RISE_EDGE | HW_IDR_INTR_1_N_MODEL) << i;
|
||||||
|
}
|
||||||
|
for ( i=0; i<MATH_ROUNDUP(num, 16)/16; i++ )
|
||||||
|
{
|
||||||
|
reg_OS_IDR_CFG[i] = conf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reg_OS_IDR_CNT = REG_OS_IDR_CNT_E_MASK;
|
||||||
|
|
||||||
|
reg_OS_CPUI_PRIO = 15 << REG_OS_CPUI_PRIO_THLD_SHIFT;
|
||||||
|
reg_OS_CPUI_BP = REG_OS_CPUI_BP_DECI_MASK;
|
||||||
|
reg_OS_CPUI_CNT = REG_OS_CPUI_CNT_E_MASK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osEnableInterruptID
|
||||||
|
|
||||||
|
Description: set Interrupt Set Enable Register
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: TRUE if last state is enabled
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osEnableInterruptID( OSIntrID id )
|
||||||
|
{
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_IE[ofs] >> sft);
|
||||||
|
|
||||||
|
reg_OS_IDR_SET_IE[ofs] = 1 << sft;
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osDisableInterruptID
|
||||||
|
|
||||||
|
Description: set Interrupt Clear Enable Register
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: TRUE if last state is enabled
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osDisableInterruptID( OSIntrID id )
|
||||||
|
{
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_IE[ofs] >> sft);
|
||||||
|
|
||||||
|
reg_OS_IDR_CLR_IE[ofs] = 1 << sft;
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osRestoreInterruptID
|
||||||
|
|
||||||
|
Description: set Interrupt Clear Enable Register
|
||||||
|
|
||||||
|
Arguments: id : Interrupt Distributor ID
|
||||||
|
state : state whether interrupt is enabled
|
||||||
|
|
||||||
|
Returns: TRUE if last state is enabled
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osRestoreInterruptID( OSIntrID id, BOOL state )
|
||||||
|
{
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_IE[ofs] >> sft);
|
||||||
|
|
||||||
|
if ( state == TRUE )
|
||||||
|
{
|
||||||
|
reg_OS_IDR_SET_IE[ofs] = 1 << sft;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reg_OS_IDR_CLR_IE[ofs] = 1 << sft;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osSetInterruptPending
|
||||||
|
|
||||||
|
Description: set Interrupt Set Pending Register
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: TRUE if last state is pending
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osSetInterruptPending( OSIntrID id )
|
||||||
|
{
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_PND[ofs] >> sft);
|
||||||
|
|
||||||
|
reg_OS_IDR_SET_PND[ofs] = 1 << sft;
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osClearInterruptPending
|
||||||
|
|
||||||
|
Description: set Interrupt Clear Pending Register
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: TRUE if last state is pending
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osClearInterruptPending( OSIntrID id )
|
||||||
|
{
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_PND[ofs] >> sft);
|
||||||
|
|
||||||
|
reg_OS_IDR_CLR_PND[ofs] = 1 << sft;
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osRestoreInterruptPending
|
||||||
|
|
||||||
|
Description: restore Interrupt Pending
|
||||||
|
|
||||||
|
Arguments: id : Interrupt Distributor ID
|
||||||
|
state : state whether interrupt is enabled
|
||||||
|
|
||||||
|
Returns: TRUE if last state is pending
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osRestoreInterruptPending( OSIntrID id, BOOL state )
|
||||||
|
{
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_PND[ofs] >> sft);
|
||||||
|
|
||||||
|
if ( state == TRUE )
|
||||||
|
{
|
||||||
|
reg_OS_IDR_SET_PND[ofs] = 1 << sft;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reg_OS_IDR_CLR_PND[ofs] = 1 << sft;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osSetEndOfInterruptRegister
|
||||||
|
|
||||||
|
Description: set ID to End of Interrupt Register
|
||||||
|
|
||||||
|
change state to Inactive.
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void osSetEndOfInterruptRegister( OSIntrID id )
|
||||||
|
{
|
||||||
|
reg_OS_CPUI_EOI = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: i_osReadHighestPendingInterruptRegister
|
||||||
|
|
||||||
|
Description: read ID from Highest Pending Interrupt Register
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: Interrupt Distributor ID
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrID i_osReadHighestPendingInterruptRegister( void )
|
||||||
|
{
|
||||||
|
return (OSIntrID)(reg_OS_CPUI_HI_PND & REG_OS_CPUI_HI_PND_ID_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: i_osReadInterruptAcknowledgeRegister
|
||||||
|
|
||||||
|
Description: read ID from Interrupt Acknowledge Register
|
||||||
|
|
||||||
|
get interrupt ID and change state to NotPending and Active.
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: Interrupt Distributor ID
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrID i_osReadInterruptAcknowledgeRegister( void )
|
||||||
|
{
|
||||||
|
return (OSIntrID)(reg_OS_CPUI_ACK & REG_OS_CPUI_ACK_ID_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
@ -15,7 +15,6 @@
|
|||||||
$Author$
|
$Author$
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#include <brom/os.h>
|
#include <brom/os.h>
|
||||||
#include <brom/memorymap.h>
|
|
||||||
|
|
||||||
void timer_handler(void);
|
void timer_handler(void);
|
||||||
|
|
||||||
|
|||||||
@ -31,8 +31,10 @@ BROM_PROC = ARM9
|
|||||||
SRCDIR = . ../common
|
SRCDIR = . ../common
|
||||||
|
|
||||||
SRCS = \
|
SRCS = \
|
||||||
os_tick.c \
|
os_interrupt.c \
|
||||||
os_timer.c \
|
os_timer.c \
|
||||||
|
os_tick.c \
|
||||||
|
os_interrupt_common.c \
|
||||||
|
|
||||||
TARGET_LIB = libos_sp$(BROM_LIBSUFFIX).a
|
TARGET_LIB = libos_sp$(BROM_LIBSUFFIX).a
|
||||||
|
|
||||||
|
|||||||
374
trunk/bootrom/build/libraries/os/ARM9/os_interrupt.c
Normal file
374
trunk/bootrom/build/libraries/os/ARM9/os_interrupt.c
Normal file
@ -0,0 +1,374 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: CtrBrom - libraries - OS
|
||||||
|
File: os_interrupt.c
|
||||||
|
|
||||||
|
Copyright 2008 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
|
||||||
|
$Date:: $
|
||||||
|
$Rev$
|
||||||
|
$Author$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#include <brom/os.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osInitInterrupt
|
||||||
|
|
||||||
|
Description: Initialize Interrupts
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void osInitInterrupt( void )
|
||||||
|
{
|
||||||
|
static BOOL isInit;
|
||||||
|
|
||||||
|
if ( isInit == FALSE )
|
||||||
|
{
|
||||||
|
isInit = TRUE;
|
||||||
|
|
||||||
|
(void)osDisableIrqAndFiq();
|
||||||
|
|
||||||
|
i_osInitInterruptTable();
|
||||||
|
|
||||||
|
reg_OS_IE = 0;
|
||||||
|
|
||||||
|
reg_OS_IF = 0xffffffff;
|
||||||
|
|
||||||
|
(void)osEnableInterrupts();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// InterruptMask
|
||||||
|
//================================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osSetInterruptMask
|
||||||
|
|
||||||
|
Description: set interrupt factor
|
||||||
|
|
||||||
|
Arguments: mask interrupt factor
|
||||||
|
|
||||||
|
Returns: previous factors
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
OSIntrMask osSetInterruptMask( OSIntrMask mask )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IE;
|
||||||
|
reg_OS_IE = mask;
|
||||||
|
#else // MPCORE
|
||||||
|
OSIntrMask prep = reg_OS_IDR_SET_ENABLE_ST;
|
||||||
|
reg_OS_IDR_CLR_ENABLE_WP[0] = HW_IDR_WORD_MASK;
|
||||||
|
reg_OS_IDR_CLR_ENABLE_WP[1] = HW_IDR_WORD_MASK;
|
||||||
|
reg_OS_IDR_CLR_ENABLE_WP[2] = HW_IDR_WORD_MASK;
|
||||||
|
reg_OS_IDR_SET_ENABLE_ST = mask;
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return prep;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osEnableInterruptMask
|
||||||
|
|
||||||
|
Description: set specified interrupt factor
|
||||||
|
|
||||||
|
Arguments: mask interrupt factor
|
||||||
|
|
||||||
|
Returns: previous factors
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrMask osEnableInterruptMask( OSIntrMask mask )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IE;
|
||||||
|
reg_OS_IE = prep | mask;
|
||||||
|
#else // MPCORE
|
||||||
|
OSIntrMask prep = reg_OS_IDR_SET_ENABLE_ST;
|
||||||
|
reg_OS_IDR_SET_ENABLE_ST = mask;
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return prep;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osDisableInterruptMask
|
||||||
|
|
||||||
|
Description: unset specified interrupt factor
|
||||||
|
|
||||||
|
Arguments: mask interrupt factor
|
||||||
|
|
||||||
|
Returns: previous factors
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrMask osDisableInterruptMask( OSIntrMask mask )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IE;
|
||||||
|
reg_OS_IE = prep & ~mask;
|
||||||
|
#else // MPCORE
|
||||||
|
OSIntrMask prep = reg_OS_IDR_CLR_ENABLE_ST;
|
||||||
|
reg_OS_IDR_CLR_ENABLE_ST = mask;
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return prep;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osEnableInterruptID
|
||||||
|
|
||||||
|
Description: set Interrupt Set Enable Register
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: TRUE if last state is enabled
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osEnableInterruptID( OSIntrID id )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IE;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (BOOL)(prep >> id);
|
||||||
|
reg_OS_IE = prep | (1 << id);
|
||||||
|
#else // MPCORE
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_ENABLE_WP[ofs] >> sft);
|
||||||
|
reg_OS_IDR_SET_ENABLE_WP[ofs] = 1 << sft;
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osDisableInterruptID
|
||||||
|
|
||||||
|
Description: set Interrupt Clear Enable Register
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: TRUE if last state is enabled
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osDisableInterruptID( OSIntrID id )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IE;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (BOOL)(prep >> id);
|
||||||
|
reg_OS_IE = prep & ~(1 << id);
|
||||||
|
#else // MPCORE
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_ENABLE_WP[ofs] >> sft);
|
||||||
|
reg_OS_IDR_CLR_ENABLE_WP[ofs] = 1 << sft;
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osRestoreInterruptID
|
||||||
|
|
||||||
|
Description: set Interrupt Clear Enable Register
|
||||||
|
|
||||||
|
Arguments: id : Interrupt Distributor ID
|
||||||
|
state : state whether interrupt is enabled
|
||||||
|
|
||||||
|
Returns: TRUE if last state is enabled
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osRestoreInterruptID( OSIntrID id, BOOL state )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IE;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (BOOL)(prep >> id);
|
||||||
|
if ( state == TRUE )
|
||||||
|
{
|
||||||
|
reg_OS_IE = prep | (state << id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reg_OS_IE = prep & ~(state << id);
|
||||||
|
}
|
||||||
|
#else // MPCORE
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_ENABLE_WP[ofs] >> sft);
|
||||||
|
|
||||||
|
if ( state == TRUE )
|
||||||
|
{
|
||||||
|
reg_OS_IDR_SET_ENABLE_WP[ofs] = 1 << sft;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reg_OS_IDR_CLR_ENABLE_WP[ofs] = 1 << sft;
|
||||||
|
}
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// INTERRUPT PENDING
|
||||||
|
//================================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osClearInterruptPendingMask
|
||||||
|
|
||||||
|
Description: reset IF bit
|
||||||
|
(setting bit causes to clear bit for interrupt)
|
||||||
|
|
||||||
|
Arguments: mask interrupt factor
|
||||||
|
|
||||||
|
Returns: previous factors
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrMask osClearInterruptPendingMask( OSIntrMask mask )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IF;
|
||||||
|
reg_OS_IF = mask;
|
||||||
|
#else // MPCORE
|
||||||
|
OSIntrMask prep = reg_OS_IDR_SET_PENDING_ST;
|
||||||
|
reg_OS_IDR_CLR_PENDING_ST = mask;
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return prep;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osClearInterruptPendingID
|
||||||
|
|
||||||
|
Description: set Interrupt Clear Pending Register
|
||||||
|
|
||||||
|
Arguments: Interrupt Distributor ID
|
||||||
|
|
||||||
|
Returns: TRUE if last state is pending
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
BOOL osClearInterruptPendingID( OSIntrID id )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
OSIntrMask prep = reg_OS_IF;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (BOOL)(prep >> id);
|
||||||
|
reg_OS_IF = (u32)(1 << id);
|
||||||
|
#else // MPCORE
|
||||||
|
u32 ofs = id/32;
|
||||||
|
u32 sft = id%32;
|
||||||
|
BOOL retval;
|
||||||
|
|
||||||
|
retval = TRUE & (reg_OS_IDR_SET_PENDING_WP[ofs] >> sft);
|
||||||
|
reg_OS_IDR_CLR_PENDING_WP[ofs] = 1 << sft;
|
||||||
|
#endif // MPCORE
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// IRQ CHEKE BUFFER
|
||||||
|
//================================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osSetInterruptCheckFlag
|
||||||
|
|
||||||
|
Description: set irq flag to check being called
|
||||||
|
|
||||||
|
Arguments: irq factors to be set
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void osSetInterruptCheckFlag( OSIntrMask mask )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
*(vu32 *)HW_INTR_CHECK_BUF |= (u32)mask;
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osClearInterruptCheckFlag
|
||||||
|
|
||||||
|
Description: clear irq flag stored in HW_INTR_CHECK_BUF
|
||||||
|
|
||||||
|
Arguments: irq factors to be cleared
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void osClearInterruptCheckFlag( OSIntrMask mask )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = osDisableInterrupts();
|
||||||
|
*(vu32 *)HW_INTR_CHECK_BUF &= (u32)~mask;
|
||||||
|
(void)osRestoreInterrupts( enabled );
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// WAIT
|
||||||
|
//============================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osWaitInterrupt
|
||||||
|
|
||||||
|
Description: wait specifiled interrupt.
|
||||||
|
OS_WaitInterrupt doesn't switch thread.
|
||||||
|
OS_WaitInterrupt wait by using OS_Halt().
|
||||||
|
|
||||||
|
Arguments: clear TRUE if want to clear interrupt flag before wait.
|
||||||
|
FALSE if not.
|
||||||
|
irqFlags bit of interrupts to wait for
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void osWaitInterrupt( BOOL clear, OSIntrMask irqFlags )
|
||||||
|
{
|
||||||
|
OSIntrMode cpsrIrq = osDisableInterrupts();
|
||||||
|
|
||||||
|
if (clear)
|
||||||
|
{
|
||||||
|
(void)osClearInterruptCheckFlag( irqFlags );
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!(osGetInterruptCheckFlag() & irqFlags))
|
||||||
|
{
|
||||||
|
i_osHalt();
|
||||||
|
(void)osEnableInterrupts();
|
||||||
|
(void)osDisableInterrupts();
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)osClearInterruptCheckFlag( irqFlags );
|
||||||
|
(void)osRestoreInterrupts( cpsrIrq );
|
||||||
|
}
|
||||||
|
|
||||||
@ -15,7 +15,6 @@
|
|||||||
$Author$
|
$Author$
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#include <brom/os.h>
|
#include <brom/os.h>
|
||||||
#include <brom/memorymap.h>
|
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
@ -72,7 +71,6 @@ void osInitTick(void)
|
|||||||
|
|
||||||
//---- set interrupt callback
|
//---- set interrupt callback
|
||||||
osSetInterruptHandler( OS_INTR_ID_TIMER3, i_osCountUpTick );
|
osSetInterruptHandler( OS_INTR_ID_TIMER3, i_osCountUpTick );
|
||||||
osSetMultiInterruptMask( OS_INTR_ID_TIMER3, (OSIntrMask)0xffffffff ); // ?, osInitTimerの真似
|
|
||||||
|
|
||||||
//---- enable timer interrupt
|
//---- enable timer interrupt
|
||||||
osEnableInterruptID(OSi_TICK_IE_TIMER_ID);
|
osEnableInterruptID(OSi_TICK_IE_TIMER_ID);
|
||||||
|
|||||||
@ -15,7 +15,6 @@
|
|||||||
$Author$
|
$Author$
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#include <brom/os.h>
|
#include <brom/os.h>
|
||||||
#include <brom/memorymap.h>
|
|
||||||
|
|
||||||
void timer_handler(void);
|
void timer_handler(void);
|
||||||
|
|
||||||
@ -58,7 +57,6 @@ void osInitTimer( void )
|
|||||||
OSIntrMask imask = 0xffffffff;
|
OSIntrMask imask = 0xffffffff;
|
||||||
|
|
||||||
osSetInterruptHandler( OS_INTR_ID_TIMER1, timer_handler );
|
osSetInterruptHandler( OS_INTR_ID_TIMER1, timer_handler );
|
||||||
osSetMultiInterruptMask( OS_INTR_ID_TIMER1, imask );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
osEnableInterruptID( OS_INTR_ID_TIMER1 );
|
osEnableInterruptID( OS_INTR_ID_TIMER1 );
|
||||||
|
|||||||
400
trunk/bootrom/build/libraries/os/common/os_interrupt_common.c
Normal file
400
trunk/bootrom/build/libraries/os/common/os_interrupt_common.c
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: CtrBrom - libraries - OS
|
||||||
|
File: os_interrupt_common.c
|
||||||
|
|
||||||
|
Copyright 2008 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
|
||||||
|
$Date:: $
|
||||||
|
$Rev$
|
||||||
|
$Author$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#include <brom/os.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SDK_ARM11
|
||||||
|
OSIntrFunction osIntrTable[OS_INTR_ID_NUM];
|
||||||
|
#else // SDK_ARM9
|
||||||
|
OSIntrFunction osIntrTable[OS_INTR_ID_NUM] ATTRIBUTE_SECTION(.dtcm);
|
||||||
|
#endif // SDK_ARM9
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: i_osInitInterruptTable
|
||||||
|
|
||||||
|
Description: Initialize InterruptTable
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void i_osInitInterruptTable( void )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=0; i<OS_INTR_ID_NUM; i++)
|
||||||
|
{
|
||||||
|
osIntrTable[i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osSetInterruptHandler
|
||||||
|
|
||||||
|
Description: Set interrupt handler
|
||||||
|
|
||||||
|
Arguments: interrupt ID
|
||||||
|
interrupt handler
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void osSetInterruptHandler( OSIntrID id, OSIntrFunction handler )
|
||||||
|
{
|
||||||
|
osIntrTable[id] = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osGetInterruptHandler
|
||||||
|
|
||||||
|
Description: Get interrupt handler
|
||||||
|
|
||||||
|
Arguments: interrupt ID
|
||||||
|
interrupt handler
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrFunction osGetInterruptHandler( OSIntrID id )
|
||||||
|
{
|
||||||
|
return osIntrTable[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osEnableInterrupts
|
||||||
|
|
||||||
|
Description: Set CPSR to enable irq and fiq interrupts
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrMode osEnableInterrupts( void )
|
||||||
|
{
|
||||||
|
return osEnableIrq();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osDisableInterrupts
|
||||||
|
|
||||||
|
Description: Set CPSR to disable irq and fiq interrupts
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrMode osDisableInterrupts( void )
|
||||||
|
{
|
||||||
|
return osDisableIrq();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osRestoreInterrupts
|
||||||
|
|
||||||
|
Description: Restore CPSR irq and fiq interrupts
|
||||||
|
|
||||||
|
Arguments: state of irq interrupt bit
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OSIntrMode osRestoreInterrupts( OSIntrMode state )
|
||||||
|
{
|
||||||
|
return osRestoreIrq( state );
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <brom/code32.h>
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osHaltUntilInterrupt
|
||||||
|
|
||||||
|
Description: Halt CPU Core until Interrupt
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM void osHaltUntilInterrupt( void )
|
||||||
|
{
|
||||||
|
PRESERVE8
|
||||||
|
|
||||||
|
mov r0, #0
|
||||||
|
mcr p15, 0, r0, c7, c0, 4
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SDK_ARM11
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osHaltUntilEvent
|
||||||
|
|
||||||
|
Description: Halt CPU Core until Event
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM void osHaltUntilEvent( void )
|
||||||
|
{
|
||||||
|
wfe
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // SDK_ARM11
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// Control the master of all interrupts
|
||||||
|
//============================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osEnableIrq
|
||||||
|
|
||||||
|
Description: Set CPSR to enable irq interrupt
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osEnableIrq( void )
|
||||||
|
{
|
||||||
|
mrs r0, cpsr
|
||||||
|
|
||||||
|
#ifdef SDK_USE_MPCORE_EXTEND_OP
|
||||||
|
cpsie i
|
||||||
|
#else
|
||||||
|
bic r1, r0, #HW_PSR_IRQ_DISABLE
|
||||||
|
msr cpsr_c, r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
and r0, r0, #HW_PSR_IRQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osDisableIrq
|
||||||
|
|
||||||
|
Description: Set CPSR to disable irq interrupt
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osDisableIrq( void )
|
||||||
|
{
|
||||||
|
mrs r0, cpsr
|
||||||
|
|
||||||
|
#ifdef SDK_USE_MPCORE_EXTEND_OP
|
||||||
|
cpsid i
|
||||||
|
#else
|
||||||
|
orr r1, r0, #HW_PSR_IRQ_DISABLE
|
||||||
|
msr cpsr_c, r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
and r0, r0, #HW_PSR_IRQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osRestoreIrq
|
||||||
|
|
||||||
|
Description: Restore CPSR irq interrupt
|
||||||
|
|
||||||
|
Arguments: state of irq and fiq interrupt bit
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osRestoreIrq( OSIntrMode state )
|
||||||
|
{
|
||||||
|
mrs r1, cpsr
|
||||||
|
bic r2, r1, #HW_PSR_IRQ_DISABLE
|
||||||
|
orr r2, r2, r0
|
||||||
|
msr cpsr_c, r2
|
||||||
|
and r0, r1, #HW_PSR_IRQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osEnableFiq
|
||||||
|
|
||||||
|
Description: Set CPSR to enable fiq interrupt
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osEnableFiq( void )
|
||||||
|
{
|
||||||
|
mrs r0, cpsr
|
||||||
|
|
||||||
|
#ifdef SDK_USE_MPCORE_EXTEND_OP
|
||||||
|
cpsie f
|
||||||
|
#else
|
||||||
|
bic r1, r0, #HW_PSR_FIQ_DISABLE
|
||||||
|
msr cpsr_c, r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
and r0, r0, #HW_PSR_FIQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osDisableFiq
|
||||||
|
|
||||||
|
Description: Set CPSR to disable fiq interrupt
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osDisableFiq( void )
|
||||||
|
{
|
||||||
|
mrs r0, cpsr
|
||||||
|
|
||||||
|
#ifdef SDK_USE_MPCORE_EXTEND_OP
|
||||||
|
cpsid f
|
||||||
|
#else
|
||||||
|
orr r1, r0, #HW_PSR_FIQ_DISABLE
|
||||||
|
msr cpsr_c, r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
and r0, r0, #HW_PSR_FIQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osRestoreFiq
|
||||||
|
|
||||||
|
Description: Restore CPSR fiq interrupt
|
||||||
|
|
||||||
|
Arguments: state of fiq interrupt bit
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osRestoreFiq( OSIntrMode state )
|
||||||
|
{
|
||||||
|
mrs r1, cpsr
|
||||||
|
bic r2, r1, #HW_PSR_FIQ_DISABLE
|
||||||
|
orr r2, r2, r0
|
||||||
|
msr cpsr_c, r2
|
||||||
|
and r0, r1, #HW_PSR_FIQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osEnableIrqAndFiq
|
||||||
|
|
||||||
|
Description: Set CPSR to enable irq and fiq interrupts
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osEnableIrqAndFiq( void )
|
||||||
|
{
|
||||||
|
mrs r0, cpsr
|
||||||
|
|
||||||
|
#ifdef SDK_USE_MPCORE_EXTEND_OP
|
||||||
|
cpsie if
|
||||||
|
#else
|
||||||
|
bic r1, r0, #HW_PSR_IRQ_FIQ_DISABLE
|
||||||
|
msr cpsr_c, r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osDisableIrqAndFiq
|
||||||
|
|
||||||
|
Description: Set CPSR to disable irq and fiq interrupts
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osDisableIrqAndFiq( void )
|
||||||
|
{
|
||||||
|
mrs r0, cpsr
|
||||||
|
|
||||||
|
#ifdef SDK_USE_MPCORE_EXTEND_OP
|
||||||
|
cpsid if
|
||||||
|
#else
|
||||||
|
orr r1, r0, #HW_PSR_IRQ_FIQ_DISABLE
|
||||||
|
msr cpsr_c, r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: osRestoreIrqAndFiq
|
||||||
|
|
||||||
|
Description: Restore CPSR irq and fiq interrupts
|
||||||
|
|
||||||
|
Arguments: state of irq and fiq interrupt bit
|
||||||
|
|
||||||
|
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ASM OSIntrMode osRestoreIrqAndFiq( OSIntrMode state )
|
||||||
|
{
|
||||||
|
mrs r1, cpsr
|
||||||
|
bic r2, r1, #HW_PSR_IRQ_FIQ_DISABLE
|
||||||
|
orr r2, r2, r0
|
||||||
|
msr cpsr_c, r2
|
||||||
|
and r0, r1, #HW_PSR_IRQ_FIQ_DISABLE
|
||||||
|
|
||||||
|
bx lr
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <brom/codereset.h>
|
||||||
|
|
||||||
@ -27,11 +27,11 @@ extern "C" {
|
|||||||
#define OS_IDR_INTR_PRIO_DEFAULT 8 // Interrupt priority default (0-15)
|
#define OS_IDR_INTR_PRIO_DEFAULT 8 // Interrupt priority default (0-15)
|
||||||
|
|
||||||
|
|
||||||
extern OSIntrFunction osIntrDistrTable[OS_INTR_DISTR_ID_LIMIT];
|
extern OSIntrFunction osIntrTable[OS_INTR_ID_NUM];
|
||||||
|
|
||||||
|
|
||||||
OSIntrID osi_ReadHighestPendingInterruptRegister( void );
|
OSIntrID i_osReadHighestPendingInterruptRegister( void );
|
||||||
OSIntrID osi_ReadInterruptAcknowledgeRegister( void );
|
OSIntrID i_osReadInterruptAcknowledgeRegister( void );
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
|
|||||||
@ -24,10 +24,28 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define reg_OS_IDR_SET_IE (( REGType32v *) REG_IDR_SET_IE0_ADDR)
|
||||||
|
#define reg_OS_IDR_CLR_IE (( REGType32v *) REG_IDR_CLR_IE0_ADDR)
|
||||||
|
#define reg_OS_IDR_SET_PND (( REGType32v *) REG_IDR_SET_PND0_ADDR)
|
||||||
|
#define reg_OS_IDR_CLR_PND (( REGType32v *) REG_IDR_CLR_PND0_ADDR)
|
||||||
|
#define reg_OS_IDR_ACT (( REGType32v *) REG_IDR_ACT0_ADDR)
|
||||||
|
#define reg_OS_IDR_TGT (( REGType8v *) REG_IDR_TGT0_ADDR)
|
||||||
|
#define reg_OS_IDR_PRIO (( REGType8v *) REG_IDR_PRIO0_ADDR)
|
||||||
|
#define reg_OS_IDR_CFG (( REGType32v *) REG_IDR_CFG0_ADDR)
|
||||||
|
|
||||||
|
#define HW_IDR_WORD_MASK (~0)
|
||||||
|
|
||||||
|
// Interrupt configuration registers
|
||||||
|
|
||||||
|
#define HW_IDR_INTR_RISE_EDGE 0x2 // The interrupt line is rising edge sensitive
|
||||||
|
#define HW_IDR_INTR_LEVEL_HIGH 0x0 // level high active
|
||||||
|
#define HW_IDR_INTR_1_N_MODEL 0x1 // The interrupt line uses the 1-N software model
|
||||||
|
#define HW_IDR_INTR_N_N_MODEL 0x0 // the N-N software model
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u32 w[3];
|
u32 w[6];
|
||||||
}
|
}
|
||||||
OSIntrMask;
|
OSIntrMask;
|
||||||
|
|
||||||
@ -56,9 +74,9 @@ typedef enum
|
|||||||
OS_INTR_ID_TIMER = REG_OS_IDR_SET_IE0_TM_SHIFT, // 29
|
OS_INTR_ID_TIMER = REG_OS_IDR_SET_IE0_TM_SHIFT, // 29
|
||||||
OS_INTR_ID_WATCHDOG = REG_OS_IDR_SET_IE0_WDOG_SHIFT, // 30
|
OS_INTR_ID_WATCHDOG = REG_OS_IDR_SET_IE0_WDOG_SHIFT, // 30
|
||||||
|
|
||||||
OS_INTR_DISTR_ID_MIN = OS_INTR_ID_IPI_MIN,
|
OS_INTR_ID_MIN = OS_INTR_ID_IPI_MIN,
|
||||||
OS_INTR_DISTR_ID_MAX = (32*5) + REG_OS_IDR_SET_IE5_PMUIRQ7_SHIFT,
|
OS_INTR_ID_MAX = (32*5) + REG_OS_IDR_SET_IE5_PMUIRQ7_SHIFT,
|
||||||
OS_INTR_DISTR_ID_LIMIT
|
OS_INTR_ID_NUM
|
||||||
}
|
}
|
||||||
OSIntrID;
|
OSIntrID;
|
||||||
|
|
||||||
|
|||||||
@ -193,21 +193,6 @@ static inline BOOL osIsInterruptPending( OSIntrID id )
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// MULTI INTERRUPT
|
|
||||||
//================================================================================
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: osSetMultiInterruptMask
|
|
||||||
|
|
||||||
Description: Set interrupt mask for multi interrupt
|
|
||||||
|
|
||||||
Arguments: interrupt ID
|
|
||||||
interrupt mask
|
|
||||||
|
|
||||||
Returns: None
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
void osSetMultiInterruptMask( OSIntrID id, OSIntrMask mask );
|
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
// INTERRUPT HANDLER
|
// INTERRUPT HANDLER
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|||||||
@ -404,7 +404,7 @@
|
|||||||
0x7e01310,,IDR_ACT4,32,r,OS,volatile,DS_WL,31,1,KEY,30,1,PDN,29,1,MIC,28,1,SPI2,27,1,SPI1,26,1,I2C2,25,1,I2C1,24,1,PXI_RX,19,1,PXI_TX,18,1,CPU1,17,1,CPU0,16,1,SCR2,13,1,SCR1,12,1,YUV2RGB,11,1,DSP,10,1,CAM2,9,1,CAM1,8,1,LGC_DET,6,1,LGC_IREQ,5,1,LMC,4,1,SD3_A,3,1,SD3,2,1,SD2_A,1,1,SD2,0,1,,,,,,,,,,,,,,,,,,,,,
|
0x7e01310,,IDR_ACT4,32,r,OS,volatile,DS_WL,31,1,KEY,30,1,PDN,29,1,MIC,28,1,SPI2,27,1,SPI1,26,1,I2C2,25,1,I2C1,24,1,PXI_RX,19,1,PXI_TX,18,1,CPU1,17,1,CPU0,16,1,SCR2,13,1,SCR1,12,1,YUV2RGB,11,1,DSP,10,1,CAM2,9,1,CAM1,8,1,LGC_DET,6,1,LGC_IREQ,5,1,LMC,4,1,SD3_A,3,1,SD3,2,1,SD2_A,1,1,SD2,0,1,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x7e01314,,IDR_ACT5,32,r,OS,volatile,PMUIRQ7,29,1,PMUIRQ6,28,1,PMUIRQ5,27,1,PMUIRQ4,26,1,PMUIRQ1,25,1,PMUIRQ0,24,1,DEPOP,6,1,MCU,5,1,HP,4,1,RTC,1,1,COVER,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x7e01314,,IDR_ACT5,32,r,OS,volatile,PMUIRQ7,29,1,PMUIRQ6,28,1,PMUIRQ5,27,1,PMUIRQ4,26,1,PMUIRQ1,25,1,PMUIRQ0,24,1,DEPOP,6,1,MCU,5,1,HP,4,1,RTC,1,1,COVER,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x7e01400,,IDR_PRIO0,8,rw,OS,volatile,PRIO,4,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x7e01400,,IDR_PRIO0,8,rw,OS,volatile,PRIO,4,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x7e01800,,IDR_TGT0,8,rw,OS,volatile,C3,1,3,C2,1,2,C1,1,1,C0,1,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x7e01800,,IDR_TGT0,8,rw,OS,volatile,C3,3,1,C2,2,1,C1,1,1,C0,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x7e01c00,,IDR_CFG0,32,rw,OS,volatile,IPI15_1N,31,1,IPI15_TRG,30,1,IPI14_1N,29,1,IPI14_TRG,28,1,IPI13_1N,27,1,IPI13_TRG,26,1,IPI12_1N,25,1,IPI12_TRG,24,1,IPI11_1N,23,1,IPI11_TRG,22,1,IPI10_1N,21,1,IPI10_TRG,20,1,IPI9_1N,19,1,IPI9_TRG,18,1,IPI8_1N,17,1,IPI8_TRG,16,1,IPI7_1N,15,1,IPI7_TRG,14,1,IPI6_1N,13,1,IPI6_TRG,12,1,IPI5_1N,11,1,IPI5_TRG,10,1,IPI4_1N,9,1,IPI4_TRG,8,1,IPI3_1N,7,1,IPI3_TRG,6,1,IPI2_1N,5,1,IPI2_TRG,4,1,IPI1_1N,3,1,IPI1_TRG,2,1,IPI0_1N,1,1,IPI0_TRG,0,1
|
0x7e01c00,,IDR_CFG0,32,rw,OS,volatile,IPI15_1N,31,1,IPI15_TRG,30,1,IPI14_1N,29,1,IPI14_TRG,28,1,IPI13_1N,27,1,IPI13_TRG,26,1,IPI12_1N,25,1,IPI12_TRG,24,1,IPI11_1N,23,1,IPI11_TRG,22,1,IPI10_1N,21,1,IPI10_TRG,20,1,IPI9_1N,19,1,IPI9_TRG,18,1,IPI8_1N,17,1,IPI8_TRG,16,1,IPI7_1N,15,1,IPI7_TRG,14,1,IPI6_1N,13,1,IPI6_TRG,12,1,IPI5_1N,11,1,IPI5_TRG,10,1,IPI4_1N,9,1,IPI4_TRG,8,1,IPI3_1N,7,1,IPI3_TRG,6,1,IPI2_1N,5,1,IPI2_TRG,4,1,IPI1_1N,3,1,IPI1_TRG,2,1,IPI0_1N,1,1,IPI0_TRG,0,1
|
||||||
0x7e01c04,,IDR_CFG1,32,rw,OS,volatile,WDOG_1N,29,1,WDOG_TRG,28,1,TM_1N,29,1,TM_TRG,29,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x7e01c04,,IDR_CFG1,32,rw,OS,volatile,WDOG_1N,29,1,WDOG_TRG,28,1,TM_1N,29,1,TM_TRG,29,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x7e01c08,,IDR_CFG2,32,rw,OS,volatile,DBG_SPI_1N,9,1,DBG_SPI_TRG,8,1,J1_TX_1N,7,1,J1_TX_TRG,6,1,J1_RX_1N,5,1,J1_RX_TRG,4,1,J0_TX_1N,3,1,J0_TX_TRG,2,1,J0_RX_1N,1,1,J0_RX_TRG,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x7e01c08,,IDR_CFG2,32,rw,OS,volatile,DBG_SPI_1N,9,1,DBG_SPI_TRG,8,1,J1_TX_1N,7,1,J1_TX_TRG,6,1,J1_RX_1N,5,1,J1_RX_TRG,4,1,J0_TX_1N,3,1,J0_TX_TRG,2,1,J0_RX_1N,1,1,J0_RX_TRG,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
|||||||
|
Can't render this file because it has a wrong number of fields in line 17.
|
@ -277,21 +277,21 @@
|
|||||||
0x149000,,KEYINPUT,16,rw,PAD,volatile,X,11,1,Y,10,1,L,9,1,R,8,1,DOWN,7,1,UP,6,1,LEFT,5,1,RIGHT,4,1,START,3,1,SEL,2,1,B,1,1,A,0,1,,,,,,
|
0x149000,,KEYINPUT,16,rw,PAD,volatile,X,11,1,Y,10,1,L,9,1,R,8,1,DOWN,7,1,UP,6,1,LEFT,5,1,RIGHT,4,1,START,3,1,SEL,2,1,B,1,1,A,0,1,,,,,,
|
||||||
0x149002,,KEYCNT,16,rw,PAD,volatile,LOGIC,15,1,INTR,14,1,X,11,1,Y,10,1,L,9,1,R,8,1,DOWN,7,1,UP,6,1,LEFT,5,1,RIGHT,4,1,START,3,1,SEL,2,1,B,1,1,A,0,1
|
0x149002,,KEYCNT,16,rw,PAD,volatile,LOGIC,15,1,INTR,14,1,X,11,1,Y,10,1,L,9,1,R,8,1,DOWN,7,1,UP,6,1,LEFT,5,1,RIGHT,4,1,START,3,1,SEL,2,1,B,1,1,A,0,1
|
||||||
#SPI,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
#SPI,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x142000,,SPI1CNT,16,rw,SPI,volatile,E,15,1,I,14,1,SEL,12,2,MODE,11,1,CLKMODE,10,1,BUSY,7,1,BAUDRATE,0,3,,,,,,,,,,,,,,,,,,,,,
|
0x142000,,SPI1CNT,16,rw,SIO,volatile,E,15,1,I,14,1,SEL,12,2,MODE,11,1,CLKMODE,10,1,BUSY,7,1,BAUDRATE,0,3,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x142002,,SPI1D,8,rw,SPI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x142002,,SPI1D,8,rw,SIO,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x143000,,SPI2CNT,16,rw,SPI,volatile,E,15,1,I,14,1,SEL,12,2,MODE,11,1,CLKMODE,10,1,BUSY,7,1,BAUDRATE,0,3,,,,,,,,,,,,,,,,,,,,,
|
0x143000,,SPI2CNT,16,rw,SIO,volatile,E,15,1,I,14,1,SEL,12,2,MODE,11,1,CLKMODE,10,1,BUSY,7,1,BAUDRATE,0,3,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x143002,,SPI2D,8,rw,SPI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x143002,,SPI2D,8,rw,SIO,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x14b000,,SPI3CNT,16,rw,SPI,volatile,E,15,1,I,14,1,MODE,11,1,CLKMODE,10,1,BUSY,7,1,BAUDRATE,0,3,,,,,,,,,,,,,,,,,,,,,,,,
|
0x14b000,,SPI3CNT,16,rw,SIO,volatile,E,15,1,I,14,1,MODE,11,1,CLKMODE,10,1,BUSY,7,1,BAUDRATE,0,3,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x14b002,,SPI3D,8,rw,SPI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x14b002,,SPI3D,8,rw,SIO,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
#I2C,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
#I2C,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x144000,,I2C1_DAT,8,rw,OS,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x144000,,I2C1_DAT,8,rw,SIO,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x144001,,I2C1_CNT,8,rw,OS,volatile,E,7,1,I,6,1,RW,5,1,ACK,4,1,CNT,3,3,NT,2,1,START,1,1,STOP,0,1,,,,,,,,,,,,,,,,,,
|
0x144001,,I2C1_CNT,8,rw,SIO,volatile,E,7,1,I,6,1,RW,5,1,ACK,4,1,CNT,3,3,NT,2,1,START,1,1,STOP,0,1,,,,,,,,,,,,,,,,,,
|
||||||
0x144002,,I2C1_CNT_EX,16,rw,OS,volatile,LGCY,15,1,WT,1,1,SCL,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x144002,,I2C1_CNT_EX,16,rw,SIO,volatile,LGCY,15,1,WT,1,1,SCL,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x144004,,I2C1_SCL,16,rw,OS,volatile,HI_PRD,8,5,LO_PRD,0,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x144004,,I2C1_SCL,16,rw,SIO,volatile,HI_PRD,8,5,LO_PRD,0,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x145000,,I2C2_DAT,8,rw,OS,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x145000,,I2C2_DAT,8,rw,SIO,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x145001,,I2C2_CNT,8,rw,OS,volatile,E,7,1,I,6,1,RW,5,1,ACK,4,1,CNT,3,3,NT,2,1,START,1,1,STOP,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x145001,,I2C2_CNT,8,rw,SIO,volatile,E,7,1,I,6,1,RW,5,1,ACK,4,1,CNT,3,3,NT,2,1,START,1,1,STOP,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x145002,,I2C2_CNT_EX,16,rw,OS,volatile,LGCY,15,1,WT,1,1,SCL,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x145002,,I2C2_CNT_EX,16,rw,SIO,volatile,LGCY,15,1,WT,1,1,SCL,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x145004,,I2C2_SCL,16,rw,OS,volatile,HI_PRD,8,5,LO_PRD,0,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x145004,,I2C2_SCL,16,rw,SIO,volatile,HI_PRD,8,5,LO_PRD,0,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
#GPIO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
#GPIO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x14a000,,RCNT0_L,16,rw,EXI,volatile,RE1,15,1,RE0,14,1,I,8,1,DIR_SO,7,1,DIR_SI,6,1,DIR_SD,5,1,DIR_SC,4,1,DATA_SO,3,1,DATA_SI,2,1,DATA_SD,1,1,DATA_SC,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x14a000,,RCNT0_L,16,rw,EXI,volatile,RE1,15,1,RE0,14,1,I,8,1,DIR_SO,7,1,DIR_SI,6,1,DIR_SD,5,1,DIR_SC,4,1,DATA_SO,3,1,DATA_SI,2,1,DATA_SD,1,1,DATA_SC,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
0x14a002,,RCNT0_H,16,rw,EXI,volatile,DATA_R7,7,1,DATA_R6,6,1,DATA_R5,5,1,DATA_R4,4,1,DATA_R3,3,1,DATA_R2,2,1,DATA_R1,1,1,DATA_R0,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
0x14a002,,RCNT0_H,16,rw,EXI,volatile,DATA_R7,7,1,DATA_R6,6,1,DATA_R5,5,1,DATA_R4,4,1,DATA_R3,3,1,DATA_R2,2,1,DATA_R1,1,1,DATA_R0,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
|||||||
|
Can't render this file because it has a wrong number of fields in line 33.
|
Loading…
Reference in New Issue
Block a user