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, &ThreadRegs); <b>if</b> (Result) { <b>for</b> (i = 0, pPtr = (<i>crtx_Uint32_t</i>*)pRegs_a; i < <i>sizeof</i>(<i>gdbm_Registers_t</i>)/<i>sizeof</i>(<i>crtx_Uint32_t</i>); i++) *pPtr++ = 0; pRegs_a-><a href="AR3.FIND-DEF">AR3</a> = ThreadRegs.<a href="AR3.FIND-DEF">AR3</a>; pRegs_a-><a href="AR4.FIND-DEF">AR4</a> = ThreadRegs.<a href="AR4.FIND-DEF">AR4</a>; pRegs_a-><a href="AR5.FIND-DEF">AR5</a> = ThreadRegs.<a href="AR5.FIND-DEF">AR5</a>; pRegs_a-><a href="AR6.FIND-DEF">AR6</a> = ThreadRegs.<a href="AR6.FIND-DEF">AR6</a>; pRegs_a-><a href="AR7.FIND-DEF">AR7</a> = ThreadRegs.<a href="AR7.FIND-DEF">AR7</a>; pRegs_a-><a href="R4.FIND-DEF">R4</a> = ThreadRegs.<a href="R4.FIND-DEF">R4</a>; pRegs_a-><a href="R4F.FIND-DEF">R4F</a> = ThreadRegs.<a href="R4F.FIND-DEF">R4F</a>; pRegs_a-><a href="R5.FIND-DEF">R5</a> = ThreadRegs.<a href="R5.FIND-DEF">R5</a>; pRegs_a-><a href="R5F.FIND-DEF">R5F</a> = ThreadRegs.<a href="R5F.FIND-DEF">R5F</a>; pRegs_a-><a href="R6.FIND-DEF">R6</a> = ThreadRegs.<a href="R6.FIND-DEF">R6</a>; pRegs_a-><a href="R6F.FIND-DEF">R6F</a> = ThreadRegs.<a href="R6F.FIND-DEF">R6F</a>; pRegs_a-><a href="R7.FIND-DEF">R7</a> = ThreadRegs.<a href="R7.FIND-DEF">R7</a>; pRegs_a-><a href="R7F.FIND-DEF">R7F</a> = ThreadRegs.<a href="R7F.FIND-DEF">R7F</a>; pRegs_a-><a href="SP.FIND-DEF">SP</a> = ThreadRegs.<a href="SP.FIND-DEF">SP</a>; pRegs_a-><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 = &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>->Period = pParams->CyclesPerClock; <a href="TC3X_TIMER0.FIND-DEF">TC3X_TIMER0</a>->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>->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<<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<<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> *)&(((<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> *)&(((<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 & (~(-<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> *)&((<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 & (~(-<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> *)&(((<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 + -
显示快捷键?