1 /* 2 * Copyright (c) 2006-2021, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2013-7-14 Peng Fan sep6200 implementation 9 */ 10 11 #include <rtthread.h> 12 #include <sep6200.h> 13 14 /** 15 * @addtogroup sep6200 16 */ 17 /*@{*/ 18 19 /** 20 * This function will initialize thread stack 21 * 22 * @param tentry the entry of thread 23 * @param parameter the parameter of entry 24 * @param stack_addr the beginning stack address 25 * @param texit the function will be called when thread exit 26 * 27 * @return stack address 28 */ 29 rt_hw_stack_init(void * tentry,void * parameter,rt_uint8_t * stack_addr,void * texit)30rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, 31 rt_uint8_t *stack_addr, void *texit) 32 { 33 rt_uint32_t *stk; 34 35 stk = (rt_uint32_t*)stack_addr; 36 *(stk) = (rt_uint32_t)tentry; /* entry point */ 37 *(--stk) = (rt_uint32_t)texit; /* lr */ 38 *(--stk) = 0; /* r28 */ 39 *(--stk) = 0; /* r27 */ 40 *(--stk) = 0; /* r26 */ 41 *(--stk) = 0; /* r25 */ 42 *(--stk) = 0; /* r24 */ 43 *(--stk) = 0; /* r23 */ 44 *(--stk) = 0; /* r22 */ 45 *(--stk) = 0; /* r21 */ 46 *(--stk) = 0; /* r20 */ 47 *(--stk) = 0; /* r19 */ 48 *(--stk) = 0; /* r18 */ 49 *(--stk) = 0; /* r17 */ 50 *(--stk) = 0; /* r16 */ 51 *(--stk) = 0; /* r15 */ 52 *(--stk) = 0; /* r14 */ 53 *(--stk) = 0; /* r13 */ 54 *(--stk) = 0; /* r12 */ 55 *(--stk) = 0; /* r11 */ 56 *(--stk) = 0; /* r10 */ 57 *(--stk) = 0; /* r9 */ 58 *(--stk) = 0; /* r8 */ 59 *(--stk) = 0; /* r7 */ 60 *(--stk) = 0; /* r6 */ 61 *(--stk) = 0; /* r5 */ 62 *(--stk) = 0; /* r4 */ 63 *(--stk) = 0; /* r3 */ 64 *(--stk) = 0; /* r2 */ 65 *(--stk) = 0; /* r1 */ 66 *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ 67 *(--stk) = Mode_PRIV; /* asr */ 68 *(--stk) = Mode_PRIV; /* bsr */ /*why both PRIV do not need switch?*/ 69 70 /* return task's current stack address */ 71 return (rt_uint8_t *)stk; 72 } 73 74 /*@}*/ 75