You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							57 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							57 lines
						
					
					
						
							1.8 KiB
						
					
					
				| /* | |
|  * Copyright (c) 2006-2021, RT-Thread Development Team | |
|  * | |
|  * SPDX-License-Identifier: Apache-2.0 | |
|  * | |
|  * Change Logs: | |
|  * Date           Author       Notes | |
|  * 2006-03-13     Bernard      the first version | |
|  */ | |
| #include <rtthread.h> | |
| #include <sep4020.h> | |
| /** | |
|  * @addtogroup S3C24X0 | |
|  */ | |
| /*@{*/ | |
| 
 | |
| /** | |
|  * This function will initialize thread stack | |
|  * | |
|  * @param tentry the entry of thread | |
|  * @param parameter the parameter of entry | |
|  * @param stack_addr the beginning stack address | |
|  * @param texit the function will be called when thread exit | |
|  * | |
|  * @return stack address | |
|  */ | |
| rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, | |
|                              rt_uint8_t *stack_addr, void *texit) | |
| { | |
|     rt_uint32_t *stk; | |
| 
 | |
|     stack_addr += sizeof(rt_uint32_t); | |
|     stack_addr  = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8); | |
|     stk      = (rt_uint32_t *)stack_addr; | |
|     *(--stk) = (rt_uint32_t)tentry;         /* entry point */ | |
|     *(--stk) = (rt_uint32_t)texit;          /* lr */ | |
|     *(--stk) = 0xdeadbeef;                  /* r12 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r11 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r10 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r9 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r8 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r7 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r6 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r5 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r4 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r3 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r2 */ | |
|     *(--stk) = 0xdeadbeef;                  /* r1 */ | |
|     *(--stk) = (rt_uint32_t)parameter;      /* r0 : argument */ | |
|     *(--stk) = Mode_SVC;                    /* cpsr */ | |
|     *(--stk) = Mode_SVC;                    /* spsr */ | |
| 
 | |
|     /* return task's current stack address */ | |
|     return (rt_uint8_t *)stk; | |
| } | |
| 
 | |
| /*@}*/
 | |
| 
 |