hsh3.c
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 1,173 行 · 第 1/5 页
C
1,173 行
<HTML><HEAD><TITLE>/home/asysweb/public_html/cortex/ports/hsh3/src/hsh3.c</TITLE></HEAD><BODY><pre><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/* */</font><font color="#6920ac">/* Copyright (c) 1997-1999 Australian Real Time Embedded Systems */</font><font color="#6920ac">/* */</font><font color="#6920ac">/* PROPRIETARY RIGHTS of Australian Real Time Embedded Systems */</font><font color="#6920ac">/* are involved in the subject matter of this material. All reproduction,*/</font><font color="#6920ac">/* manufacturing, use, and sales rights pertaining to this subject matter*/</font><font color="#6920ac">/* are governed by the license agreement. The recipient of this software */</font><font color="#6920ac">/* implicitly accepts the terms of the license. */</font><font color="#6920ac">/* */</font><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/************************************************************************* * * FILE NAME * * hsh3.c * * SYSTEM COMPONENT * * Hitachi SuperH-3 RISC Engines Family * * DESCRIPTION * * This file contains services specific for Hitachi SuperH-3 RISC * Family * * SCCS HISTORY * * @(#)hsh3.c 1.2, 03/06/00, 19:33:08 * * SERVICES * * Services for hardware interrupt manager * --------------------------------------- * hrdi_IsIntrMaskBitAllocated * hrdi_EnableVector * hrdi_DisableVector * hrdi_Mask * hrdi_Disable * hrdi_Enable * hrdi_SetPrioLevel * hrdi_IsNested * hrdi_MakeLisrStackFrame * hrdi_PrepareStack * hrdi_CheckStack * hrdi_RegisterDISR * hrdi_UnregisterDISR * hrdi_RegisterDispatcher * hrdi_UnregisterDispatcher * hrdi_MaxPriority * * Services for software interrupt manager * --------------------------------------- * sfti_MakeHisrStackFrame * sfti_CheckStack * sfti_PrepareStack * * Services for thread control component * ------------------------------------- * thrd_MakeThreadStackFrame * thrd_CheckStack * thrd_MaxSP * thrd_AdjustMaxSP * thrd_StackUsage * thrd_GetStackFrames * thrd_Idlethread * thrd_GetStackFrameRegs * * GDB monitor support * ------------------- * gdbm_GetRegisters * * Services for System Timer * ------------------------- * tick_LISR * tick_SetupSystemTimer * tick_ClocksSinceReset * * Others * ------ * port_Init * port_Fatal * port_Abort * port_Exit * port_InitSerial * port_Putc * * AUTHOR * * Vadim N. Azarovsky * * CREATED * * 23-Jul-1999 by Vadim N. Azarovsky * * REVISION HISTORY * * NAME DATE REMARKS * **************************************************************************/</font><b><font color='DarkGreen'>#include</font></b> <a href="env_defs.h.FIND-INC"><font color="blue">"env_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="crt_defs.h.FIND-INC"><font color="blue">"crt_defs.h"</font></a><b><font color='DarkGreen'>#if</font></b><font color="maroon"> (CRTX_CPU_FAMILY==CRTX_HSH3)</font><b><font color='DarkGreen'>#include</font></b> <a href="ass_defs.h.FIND-INC"><font color="blue">"ass_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="hwi_priv.h.FIND-INC"><font color="blue">"hwi_priv.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="swi_priv.h.FIND-INC"><font color="blue">"swi_priv.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="thr_priv.h.FIND-INC"><font color="blue">"thr_priv.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="tck_priv.h.FIND-INC"><font color="blue">"tck_priv.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="sys_priv.h.FIND-INC"><font color="blue">"sys_priv.h"</font></a><font size="+1"><i>hrdi_Priority_t</i> <a href="hrdi_PrioLevelUp.FIND-FUNC">hrdi_PrioLevelUp</a>(<i>hrdi_Priority_t</i> Level_a);</font><font size="+1"><i>hrdi_Priority_t</i> <a href="hrdi_PrioLevelDown.FIND-FUNC">hrdi_PrioLevelDown</a>(<i>hrdi_Priority_t</i> Level_a);</font><font color="#6920ac">/* The following table is used to convert CPU Priority Level (CPL) to * an appropriate Interrupt Priority Mask (IPM) which specifies * what interrupt sources are enabled for this priotiy level. */</font><i>static</i> <i>crtx_Uint16_t</i> hsh3_CPL_To_IPM[16] = { 0x7FFF, <font color="#6920ac">/* mask of allowed interrupts for priority 0 */</font> 0x7FFE, <font color="#6920ac">/* mask of allowed interrupts for priority 1 */</font> 0x7FFC, <font color="#6920ac">/* mask of allowed interrupts for priority 2 */</font> 0x7FF8, <font color="#6920ac">/* mask of allowed interrupts for priority 3 */</font> 0x7FF0, <font color="#6920ac">/* mask of allowed interrupts for priority 4 */</font> 0x7FE0, <font color="#6920ac">/* mask of allowed interrupts for priority 5 */</font> 0x7FC0, <font color="#6920ac">/* mask of allowed interrupts for priority 6 */</font> 0x7f80, <font color="#6920ac">/* mask of allowed interrupts for priority 7 */</font> 0x7F00, <font color="#6920ac">/* mask of allowed interrupts for priority 8 */</font> 0x7E00, <font color="#6920ac">/* mask of allowed interrupts for priority 9 */</font> 0x7C00, <font color="#6920ac">/* mask of allowed interrupts for priority 10 */</font> 0x7800, <font color="#6920ac">/* mask of allowed interrupts for priority 11 */</font> 0x7000, <font color="#6920ac">/* mask of allowed interrupts for priority 12 */</font> 0x6000, <font color="#6920ac">/* mask of allowed interrupts for priority 13 */</font> 0x4000, <font color="#6920ac">/* mask of allowed interrupts for priority 14 */</font> 0x0000 <font color="#6920ac">/* mask of allowed interrupts for priority 15 */</font>};<font color="#6920ac">/* The following table is used to convert Interrupt Priority level (IPL) to * Interrupt Priority Mask (IPM) */</font><i>static</i> <i>crtx_Uint16_t</i> hsh3_IPL_To_IPM[16] = { 0x0000, <font color="#6920ac">/* interrupt mask for priority 0 */</font> 0x0001, <font color="#6920ac">/* interrupt mask for priority 1 */</font> 0x0002, <font color="#6920ac">/* interrupt mask for priority 2 */</font> 0x0004, <font color="#6920ac">/* interrupt mask for priority 3 */</font> 0x0008, <font color="#6920ac">/* interrupt mask for priority 4 */</font> 0x0010, <font color="#6920ac">/* interrupt mask for priority 5 */</font> 0x0020, <font color="#6920ac">/* interrupt mask for priority 6 */</font> 0x0040, <font color="#6920ac">/* interrupt mask for priority 7 */</font> 0x0080, <font color="#6920ac">/* interrupt mask for priority 8 */</font> 0x0100, <font color="#6920ac">/* interrupt mask for priority 9 */</font> 0x0200, <font color="#6920ac">/* interrupt mask for priority 10 */</font> 0x0400, <font color="#6920ac">/* interrupt mask for priority 11 */</font> 0x0800, <font color="#6920ac">/* interrupt mask for priority 12 */</font> 0x1000, <font color="#6920ac">/* interrupt mask for priority 13 */</font> 0x2000, <font color="#6920ac">/* interrupt mask for priority 14 */</font> 0x4000, <font color="#6920ac">/* interrupt mask for priority 15 */</font>};<font color="#6920ac">/* LowestPrioLevel is nothing more but a lookup table. The * table is indexed by values ranging from 0 to 127 representing interrupt * priority mask (IPM). The value at that position in the table indicates * the priority level which shall be selected to enable all specified * interrupt sources. */</font><i>static</i> <i>crtx_Byte_t</i> hsh8_LowestPrioLevel[128] = { 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 };<font color="#6920ac">/* Returns true if interrupt mask bit for specified source is * allocated. Implementation is platform specific. This service is very * useful when several interrupt sources mapped into single intrrupt * mask bit. */</font><font size="+1"><i>crtx_Bool_t</i> <b><font color="azure1"><a name="hrdi_IsIntrMaskBitAllocated">hrdi_IsIntrMaskBitAllocated</a></font></b>( <i>hrdi_Vector_t</i> Vector_a){</font><font color="#6920ac">/********************* * LOCAL VARIABLES * *********************/</font> <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>((Vector_a >= 0) && (Vector_a < <a href="HRDI_INTR_VECTORS.FIND-DEF">HRDI_INTR_VECTORS</a>)) <b>if</b> (<a href="vbit_Get.FIND-FUNC">vbit_Get</a>(&hrdi_Environ_g.RegVectors, Vector_a)) <b>return</b> <a href="CRTX_TRUE.FIND-DEF">CRTX_TRUE</a>; <b>else</b> <b>return</b> <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<b><font color='DarkGreen'>#if</font></b><font color="maroon"> (CRTX_CPU_TYPE==CRTX_HSH7707) || \</font> (<a href="CRTX_CPU_TYPE.FIND-DEF">CRTX_CPU_TYPE</a>==<a href="CRTX_HSH7708R.FIND-DEF">CRTX_HSH7708R</a>) || (<a href="CRTX_CPU_TYPE.FIND-DEF">CRTX_CPU_TYPE</a>==<a href="CRTX_HSH7708S.FIND-DEF">CRTX_HSH7708S</a>) || \ (<a href="CRTX_CPU_TYPE.FIND-DEF">CRTX_CPU_TYPE</a>==<a href="CRTX_HSH7708.FIND-DEF">CRTX_HSH7708</a>) || \ (<a href="CRTX_CPU_TYPE.FIND-DEF">CRTX_CPU_TYPE</a>==<a href="CRTX_HSH7709.FIND-DEF">CRTX_HSH7709</a>)<font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="hrdi_RegTMU">hrdi_RegTMU</a></font></b>(<i>hrdi_Vector_t</i> Vector, <i>hrdi_Priority_t</i> Level){</font> <b>switch</b>(Vector) { <b>case</b> <a href="HSH3_VECTOR_TMU_TUNI0.FIND-DEF">HSH3_VECTOR_TMU_TUNI0</a>: <a href="HSH3_INTC_IPRA.FIND-DEF">HSH3_INTC_IPRA</a> &= ~<a href="HSH3_INTC_PRIO_MASK_TMU0.FIND-DEF">HSH3_INTC_PRIO_MASK_TMU0</a>; <a href="HSH3_INTC_IPRA.FIND-DEF">HSH3_INTC_IPRA</a> |= ((Level<<<a href="HSH3_INTC_PRIO_SHFT_TMU0.FIND-DEF">HSH3_INTC_PRIO_SHFT_TMU0</a>)&<a href="HSH3_INTC_PRIO_MASK_TMU0.FIND-DEF">HSH3_INTC_PRIO_MASK_TMU0</a>); <a href="HSH3_TMU_TCR0.FIND-DEF">HSH3_TMU_TCR0</a> |= <a href="HSH3_TMU_TCR_UNIE.FIND-DEF">HSH3_TMU_TCR_UNIE</a>; <b>break</b>; <b>case</b> <a href="HSH3_VECTOR_TMU_TUNI1.FIND-DEF">HSH3_VECTOR_TMU_TUNI1</a>: <a href="HSH3_INTC_IPRA.FIND-DEF">HSH3_INTC_IPRA</a> &= ~<a href="HSH3_INTC_PRIO_MASK_TMU1.FIND-DEF">HSH3_INTC_PRIO_MASK_TMU1</a>; <a href="HSH3_INTC_IPRA.FIND-DEF">HSH3_INTC_IPRA</a> |= ((Level<<<a href="HSH3_INTC_PRIO_SHFT_TMU1.FIND-DEF">HSH3_INTC_PRIO_SHFT_TMU1</a>)&<a href="HSH3_INTC_PRIO_MASK_TMU1.FIND-DEF">HSH3_INTC_PRIO_MASK_TMU1</a>); <a href="HSH3_TMU_TCR1.FIND-DEF">HSH3_TMU_TCR1</a> |= <a href="HSH3_TMU_TCR_UNIE.FIND-DEF">HSH3_TMU_TCR_UNIE</a>;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?