swi_core.c
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 912 行 · 第 1/3 页
C
912 行
<a href="hrdi_Inc.FIND-FUNC">hrdi_Inc</a>(&sfti_Environ_g.Global);<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* permit global software interrupts */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_GlobalPermit">sfti_GlobalPermit</a></font></b>( <i>crtx_Void_t</i>){</font><font color="#6920ac">/********************* * LOCAL VARIABLES * *********************/</font> <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> <font color="#6920ac">/* * Let's simulate CPU interrupt system (do same sort of things as * any respectable CPU does. Use of task scheduler * slightly extends our virtual CPU functionalities and makes a * link with the rest of system. */</font> <b>if</b> (sfti_Environ_g.Global > 1) { <font color="#6920ac">/* global isnterrupt system is disabled */</font> <a href="hrdi_Dec.FIND-FUNC">hrdi_Dec</a>(&sfti_Environ_g.Global); <b>return</b>; } <font color="#6920ac">/* about to enable global interrupt flag, but not quite yet. This * will be done by sfti_CheckPending() after all pending interrupts * are served. */</font> <b>do</b> { <font color="#6920ac">/* service pending software interrupts */</font> <a href="#sfti_ServicePending">sfti_ServicePending</a>(); <font color="#6920ac">/* Reschedule tasks. Note that schd_Reschedule only shall * be called when all software interrupts are disabled */</font> <a href="thrd_Scheduler.FIND-FUNC">thrd_Scheduler</a>(); } <b>while</b>(<a href="#sfti_CheckPending">sfti_CheckPending</a>()); <b>return</b>;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* disable specified interrupt sources */</font><font size="+1"><i>crtx_Mask_t</i> <b><font color="azure1"><a name="sfti_Disable">sfti_Disable</a></font></b>( <i>crtx_Mask_t</i> Mask_a){</font><font color="#6920ac">/********************* * LOCAL VARIABLES * *********************/</font> <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>crtx_Mask_t</i> Mask; <font color="#6920ac">/* mask of interrupts which have be * re-enabled to restore original * interrupt status */</font> <a href="CRTX_REG_2.FIND-DEF">CRTX_REG_2</a> <i>hrdi_FastIntrCookie_t</i> Cookie;<font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> Cookie = <a href="hrdi_FastIntrDisable.FIND-FUNC">hrdi_FastIntrDisable</a>(); <font color="#6920ac">/* make mask of interrupts to be disabled */</font> Mask = (Mask_a & sfti_Environ_g.Enabled); <font color="#6920ac">/* clear bits of interrupt sources to be disabled */</font> sfti_Environ_g.Enabled &= ~Mask; <a href="hrdi_FastIntrEnable.FIND-FUNC">hrdi_FastIntrEnable</a>(Cookie); <b>return</b> Mask;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* enable specified interrupt sources */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_Enable">sfti_Enable</a></font></b>( <i>crtx_Mask_t</i> Mask_a){</font><font color="#6920ac">/********************* * LOCAL VARIABLES * *********************/</font> <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> <font color="#6920ac">/* disable global software interrupts flag */</font> <a href="#sfti_GlobalForbid">sfti_GlobalForbid</a>(); <font color="#6920ac">/* set bits of interrupts sources to be enabled */</font> <a href="SFTI_ENABLE.FIND-DEF">SFTI_ENABLE</a>(Mask_a); <font color="#6920ac">/* enable global interrupts flag */</font> <a href="#sfti_GlobalPermit">sfti_GlobalPermit</a>(); <b>return</b>;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* trigger software interrupt */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_Trigger">sfti_Trigger</a></font></b>( <i>sfti_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="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>) <font color="#6920ac">/* simply set pending interrupt flag */</font> <a href="hrdi_Or.FIND-FUNC">hrdi_Or</a>(&sfti_Environ_g.Pending,(0x1<<Vector_a)); <b>return</b>;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR handler */</font><font size="+1"><i>sfti_Handler_t</i> <b><font color="azure1"><a name="sfti_GetHandler">sfti_GetHandler</a></font></b>( <i>sfti_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="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>) <b>return</b> <a href="sfti_Handler.FIND-FUNC">sfti_Handler</a>(Vector_a);<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR context */</font><font size="+1"><i>sfti_Context_t</i> <b><font color="azure1"><a name="sfti_GetContext">sfti_GetContext</a></font></b>( <i>sfti_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="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>) <b>return</b> <a href="sfti_Context.FIND-FUNC">sfti_Context</a>(Vector_a);<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR flags */</font><font size="+1"><i>crtx_Int_t</i> <b><font color="azure1"><a name="sfti_GetFlags">sfti_GetFlags</a></font></b>( <i>sfti_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="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>) <b>return</b> <a href="sfti_Flags.FIND-FUNC">sfti_Flags</a>(Vector_a);<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR attributes */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_GetAttr">sfti_GetAttr</a></font></b>( <i>sfti_Vector_t</i> Vector_a, <i>sfti_Attr_t</i> *pAttr_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="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>) <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pAttr_a) *pAttr_a = <a href="sfti_Attr.FIND-FUNC">sfti_Attr</a>(Vector_a); <b>return</b>;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* is HISR created? */</font><font size="+1"><i>crtx_Boolean_t</i> <b><font color="azure1"><a name="sfti_IsCreated">sfti_IsCreated</a></font></b>( <i>sfti_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="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>) <b>return</b> <a href="sfti_IS_CREATED.FIND-FUNC">sfti_IS_CREATED</a>(Vector_a);<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?