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 &gt;= 0) &amp;&amp; (Vector_a &lt; <a href="HRDI_INTR_VECTORS.FIND-DEF">HRDI_INTR_VECTORS</a>))    <b>if</b> (<a href="vbit_Get.FIND-FUNC">vbit_Get</a>(&amp;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> &amp;= ~<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&lt;&lt;<a href="HSH3_INTC_PRIO_SHFT_TMU0.FIND-DEF">HSH3_INTC_PRIO_SHFT_TMU0</a>)&amp;<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> &amp;= ~<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&lt;&lt;<a href="HSH3_INTC_PRIO_SHFT_TMU1.FIND-DEF">HSH3_INTC_PRIO_SHFT_TMU1</a>)&amp;<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 + -
显示快捷键?