tms320c3.c

来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 1,346 行 · 第 1/4 页

C
1,346
字号
{</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <i>thrd_StackFrameRegs_t</i>   ThreadRegs;    <i>crtx_Bool_t</i>             Result;    <i>crtx_Uint_t</i>             i;    <i>crtx_Uint32_t</i>           *pPtr;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    Result = <a href="#thrd_GetStackFrameRegs">thrd_GetStackFrameRegs</a>(ThreadID_a, &amp;ThreadRegs);    <b>if</b> (Result)    {        <b>for</b> (i = 0, pPtr = (<i>crtx_Uint32_t</i>*)pRegs_a;              i &lt; <i>sizeof</i>(<i>gdbm_Registers_t</i>)/<i>sizeof</i>(<i>crtx_Uint32_t</i>); i++)            *pPtr++ = 0;        pRegs_a-&gt;<a href="AR3.FIND-DEF">AR3</a> = ThreadRegs.<a href="AR3.FIND-DEF">AR3</a>;        pRegs_a-&gt;<a href="AR4.FIND-DEF">AR4</a> = ThreadRegs.<a href="AR4.FIND-DEF">AR4</a>;        pRegs_a-&gt;<a href="AR5.FIND-DEF">AR5</a> = ThreadRegs.<a href="AR5.FIND-DEF">AR5</a>;        pRegs_a-&gt;<a href="AR6.FIND-DEF">AR6</a> = ThreadRegs.<a href="AR6.FIND-DEF">AR6</a>;        pRegs_a-&gt;<a href="AR7.FIND-DEF">AR7</a> = ThreadRegs.<a href="AR7.FIND-DEF">AR7</a>;        pRegs_a-&gt;<a href="R4.FIND-DEF">R4</a>  = ThreadRegs.<a href="R4.FIND-DEF">R4</a>;        pRegs_a-&gt;<a href="R4F.FIND-DEF">R4F</a> = ThreadRegs.<a href="R4F.FIND-DEF">R4F</a>;        pRegs_a-&gt;<a href="R5.FIND-DEF">R5</a>  = ThreadRegs.<a href="R5.FIND-DEF">R5</a>;        pRegs_a-&gt;<a href="R5F.FIND-DEF">R5F</a> = ThreadRegs.<a href="R5F.FIND-DEF">R5F</a>;        pRegs_a-&gt;<a href="R6.FIND-DEF">R6</a>  = ThreadRegs.<a href="R6.FIND-DEF">R6</a>;        pRegs_a-&gt;<a href="R6F.FIND-DEF">R6F</a> = ThreadRegs.<a href="R6F.FIND-DEF">R6F</a>;        pRegs_a-&gt;<a href="R7.FIND-DEF">R7</a>  = ThreadRegs.<a href="R7.FIND-DEF">R7</a>;        pRegs_a-&gt;<a href="R7F.FIND-DEF">R7F</a> = ThreadRegs.<a href="R7F.FIND-DEF">R7F</a>;        pRegs_a-&gt;<a href="SP.FIND-DEF">SP</a>  = ThreadRegs.<a href="SP.FIND-DEF">SP</a>;        pRegs_a-&gt;<a href="PC.FIND-DEF">PC</a>  = ThreadRegs.<a href="PC.FIND-DEF">PC</a>;    }    <b>return</b> Result;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* Timer's Low-level Interrupt Service Routine */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="tick_LISR">tick_LISR</a></font></b>(    <i>hrdi_Vector_t</i>   Vector_a,     <i>hrdi_Context_t</i>  Context_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <font color="#6920ac">/* acknowledge system timer interrupt */</font>    <a href="TICK_SYSTEM_TIMER_INTR_ACK.FIND-DEF">TICK_SYSTEM_TIMER_INTR_ACK</a>;    <font color="#6920ac">/* increment LISR counters */</font>    <a href="TICK_INC_LISR_COUNTER.FIND-DEF">TICK_INC_LISR_COUNTER</a>();    <font color="#6920ac">/* adjust system time */</font>    <a href="TICK_ADJUST_SYSTEM_TIME.FIND-DEF">TICK_ADJUST_SYSTEM_TIME</a>();    <font color="#6920ac">/* activate application specific tick LISR handler */</font>    <a href="ENVI_TICK_APP_LISR_HANDLER.FIND-DEF">ENVI_TICK_APP_LISR_HANDLER</a>();    <font color="#6920ac">/* trigger software ISR */</font>    <a href="sfti_Trigger.FIND-FUNC">sfti_Trigger</a>((<i>sfti_Vector_t</i>)Context_a);    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* default routine to setup system timer */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="tick_SetupSystemTimer">tick_SetupSystemTimer</a></font></b>(    <i>crtx_Void_t</i> *pContext_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <i>tick_TimerSetupBlock_t</i>  *pParams;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <b>if</b> (pContext_a == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>)    {<b><font color='DarkGreen'>#if</font></b><font color="maroon"> defined(ENVI_TC3X_CYCLES_PER_CLOCK)</font>        <i>tick_TimerSetupBlock_t</i>  Params;        Params.CyclesPerClock = <a href="ENVI_TC3X_CYCLES_PER_CLOCK.FIND-DEF">ENVI_TC3X_CYCLES_PER_CLOCK</a>;        pParams = &amp;Params;<b><font color='DarkGreen'>#else</font></b><font color="maroon"></font>        <b>return</b>;     <font color="#6920ac">/* don't startup timer */</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"></font>    }    <b>else</b>    {        pParams = (<i>tick_TimerSetupBlock_t</i>*)pContext_a;    }    <font color="#6920ac">/* initiate cpu registers */</font>    <a href="TC3X_TIMER0.FIND-DEF">TC3X_TIMER0</a>-&gt;Period  = pParams-&gt;CyclesPerClock;    <a href="TC3X_TIMER0.FIND-DEF">TC3X_TIMER0</a>-&gt;GlbControl = <a href="TC3X_TIMER_HLDNOT.FIND-DEF">TC3X_TIMER_HLDNOT</a> |                              <a href="TC3X_TIMER_GO.FIND-DEF">TC3X_TIMER_GO</a>     |                              <a href="TC3X_TIMER_CLKSRC.FIND-DEF">TC3X_TIMER_CLKSRC</a> |                              <a href="TC3X_TIMER_FUNC.FIND-DEF">TC3X_TIMER_FUNC</a>;    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* returns number timer's clocks expired since last timer reset */</font><font size="+1"><i>crtx_Uint32_t</i> <b><font color="azure1"><a name="tick_ClocksSinceReset">tick_ClocksSinceReset</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>    <b>return</b> <a href="TC3X_TIMER0.FIND-DEF">TC3X_TIMER0</a>-&gt;Counter;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* TMS port initialisation routine */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="port_Init">port_Init</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>    <b>return</b>;         <font color="#6920ac">/* do nothing */</font><font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="port_Fatal">port_Fatal</a></font></b>(<i>crtx_Void_t</i>){</font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> ENVI_INIT_SERIAL_DISABLED</font>    <a href="ENVI_INIT_SERIAL_DISABLED.FIND-DEF">ENVI_INIT_SERIAL_DISABLED</a>();<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_INIT_SERIAL_DISABLED */</font></font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> ENVI_PUT_CHAR_DISABLED</font>    {        <i>crtx_Uint_t</i> i;        <b>for</b> (i=0; i&lt;<a href="strlen.FIND-FUNC">strlen</a>(syst_FatalBuffer); i++)            <a href="ENVI_PUT_CHAR_DISABLED.FIND-DEF">ENVI_PUT_CHAR_DISABLED</a>(syst_FatalBuffer[i]);    }<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_PUT_CHAR_DISABLED */</font></font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> ENVI_SYST_FATAL      <font color="#6920ac">/* FIX ME: undo sys_core on parent */</font></font>    <a href="ENVI_SYST_FATAL.FIND-DEF">ENVI_SYST_FATAL</a>;<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_SYST_FATAL */</font></font>    <b>while</b> (1)        ;}<font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="port_Abort">port_Abort</a></font></b>(<i>crtx_Void_t</i>){</font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> ENVI_INIT_SERIAL_DISABLED</font>    <a href="ENVI_INIT_SERIAL_DISABLED.FIND-DEF">ENVI_INIT_SERIAL_DISABLED</a>();<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_INIT_SERIAL_DISABLED */</font></font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> ENVI_PUT_CHAR_DISABLED</font>    {        <i>crtx_Uint_t</i> i;        <b>for</b> (i=0; i&lt;<a href="strlen.FIND-FUNC">strlen</a>(syst_FatalBuffer); i++)            <a href="ENVI_PUT_CHAR_DISABLED.FIND-DEF">ENVI_PUT_CHAR_DISABLED</a>(syst_FatalBuffer[i]);    }<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_PUT_CHAR_DISABLED */</font></font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> ENVI_SYST_ABORT      <font color="#6920ac">/* FIX ME: undo sys_core on parent */</font></font>    <a href="ENVI_SYST_ABORT.FIND-DEF">ENVI_SYST_ABORT</a>;<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_SYST_ABORT */</font></font>    <b>while</b> (1)        ;}<font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="port_Exit">port_Exit</a></font></b>(<i>crtx_Void_t</i>){</font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> ENVI_SYST_EXIT       <font color="#6920ac">/* FIX ME: undo sys_core on parent */</font></font>    <a href="ENVI_SYST_EXIT.FIND-DEF">ENVI_SYST_EXIT</a>;<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_SYST_EXIT */</font></font>    <b>while</b> (1)        ;}<font color="#6920ac">/* prepare serial port to output some data */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="port_InitSerial">port_InitSerial</a></font></b>(<i>crtx_Void_t</i>){</font>    <b>return</b>;     <font color="#6920ac">/* not supported */</font>}<font color="#6920ac">/* output data byte to serial port when system has been crashed */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="port_Putc">port_Putc</a></font></b>(<i>crtx_Char_t</i> Char_a){</font>    <b>return</b>;     <font color="#6920ac">/* not supported */</font>}<font size="+1"><i>crtx_Void_t</i> *<b><font color="azure1"><a name="malloc">malloc</a></font></b>(size_t Size_a){</font>    <i>crtx_Void_t</i> *Result;    Result = <a href="dmem_Alloc.FIND-FUNC">dmem_Alloc</a>(<a href="DMEM_STD_SEGMENT.FIND-DEF">DMEM_STD_SEGMENT</a>,Size_a + <i>sizeof</i>(<i>dmem_Size_t</i>), 0);    <b>if</b> (Result != <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>)    {        *((<i>dmem_Size_t</i> *)Result) = Size_a;        Result = (<i>crtx_Void_t</i> *)&amp;(((<i>crtx_Char_t</i> *)Result)                                  [<i>sizeof</i>(<i>dmem_Size_t</i>)]);    }    <b>return</b>(Result);}<font size="+1"><i>crtx_Void_t</i> *<b><font color="azure1"><a name="calloc">calloc</a></font></b>(size_t Nelem_a, size_t Size_a){</font>    <i>crtx_Void_t</i> *Result;    Result = <a href="dmem_Calloc.FIND-FUNC">dmem_Calloc</a>(<a href="DMEM_STD_SEGMENT.FIND-DEF">DMEM_STD_SEGMENT</a>,(Nelem_a*Size_a) +                         <i>sizeof</i>(<i>dmem_Size_t</i>), 1, 0);    <b>if</b> (Result != <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>)    {        *((<i>dmem_Size_t</i> *)Result) = Size_a;        Result = (<i>crtx_Void_t</i> *)&amp;(((<i>crtx_Char_t</i> *)Result)[            <i>sizeof</i>(<i>dmem_Size_t</i>)]);    }    <b>return</b>(Result);}<font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="free">free</a></font></b>(<i>crtx_Void_t</i> *Addr_a){</font>    <i>dmem_Size_t</i>     size;        <b>if</b> (!(((<i>dmem_Size_t</i>)Addr_a &amp; (~(-<a href="DMEM_MIN_ALIGN.FIND-DEF">DMEM_MIN_ALIGN</a>))) == 0))    {        <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> ErrWrongAddress_Exc;    }    size = ((<i>dmem_Size_t</i> *)Addr_a)[-1] + <i>sizeof</i>(<i>dmem_Size_t</i>);        <a href="dmem_Free.FIND-FUNC">dmem_Free</a>(<a href="DMEM_STD_SEGMENT.FIND-DEF">DMEM_STD_SEGMENT</a>,              (<i>crtx_Void_t</i> *)&amp;((<i>dmem_Size_t</i> *)Addr_a)[-1],size);    <b>return</b>;<font color="blue">ErrWrongAddress_Exc:</font>    <b>return</b>;}<font size="+1"><i>crtx_Void_t</i> *<b><font color="azure1"><a name="realloc">realloc</a></font></b>(<i>crtx_Void_t</i> *OldAddr_a, size_t Size_a){</font>    <i>crtx_Void_t</i>         *NewAddr;    <i>dmem_Size_t</i>         OldSize;        <b>if</b> (!(((<i>dmem_Size_t</i>)OldAddr_a &amp; (~(-<a href="DMEM_MIN_ALIGN.FIND-DEF">DMEM_MIN_ALIGN</a>))) == 0))    {        <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> ErrWrongAddress_Exc;    }    OldSize = ((<i>dmem_Size_t</i> *)OldAddr_a)[-1] + <i>sizeof</i>(<i>dmem_Size_t</i>);        NewAddr = <a href="dmem_Realloc.FIND-FUNC">dmem_Realloc</a>(<a href="DMEM_STD_SEGMENT.FIND-DEF">DMEM_STD_SEGMENT</a>,                           OldAddr_a,                           OldSize,                           Size_a + <i>sizeof</i>(<i>dmem_Size_t</i>),                           0);    <b>if</b> (NewAddr == <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>)    {        <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> ErrNotNewMemory_Exc;    }        *((<i>dmem_Size_t</i> *)NewAddr) = Size_a;    NewAddr = (<i>crtx_Void_t</i> *)&amp;(((<i>crtx_Char_t</i> *)NewAddr)                               [<i>sizeof</i>(<i>dmem_Size_t</i>)]);        <b>return</b>(NewAddr);    <font color="blue">ErrNotNewMemory_Exc:</font><font color="blue">ErrWrongAddress_Exc:</font>    <b>return</b>(<a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>);}<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* (CRTX_CPU_FAMILY==CRTX_TMS320C3X) */</font></font></pre></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?