f51bce3fed
We currently only support building with CCS and SCons is not using. bsp/rm48x50/HALCoGen/HALCoGen.{hcg,dil} is the HALCoGen project file. You may need to regenerate the source file as you like, providing that: 1, IRQ is in Dispatch Mode and the table entry is IRQ_Handler. The channel 5 in enabled and connected to IRQ. 2, RTI driver is enabled and compare3 source is selected to counter1 and the compare3 will generate tick in the period of 10ms. This value is coresponding with RT_TICK_PER_SECOND in rtconfig.h. In CCS, you need to create a new CCS project and create link folders pointing at bsp/rm48x50, libcpu/arm/rm48x50 and src/, include/. Remember to add the include path to the Build Properties.
65 lines
1.7 KiB
C
65 lines
1.7 KiB
C
/*
|
|
* File : stack.c
|
|
* This file is part of RT-Thread RTOS
|
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
|
*
|
|
* The license and distribution terms for this file may be
|
|
* found in the file LICENSE in this distribution or at
|
|
* http://openlab.rt-thread.com/license/LICENSE
|
|
*
|
|
* Change Logs:
|
|
* Date Author Notes
|
|
* 2008-12-11 XuXinming first version
|
|
* 2013-05-24 Grissiom port to RM48x50
|
|
*/
|
|
#include <rtthread.h>
|
|
#include "RM48x50.h"
|
|
/**
|
|
* @addtogroup RM48x50
|
|
*/
|
|
/*@{*/
|
|
|
|
/**
|
|
* 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)
|
|
{
|
|
unsigned long *stk;
|
|
|
|
stk = (unsigned long*)stack_addr;
|
|
*( stk) = (unsigned long) tentry; /* entry point */
|
|
*(--stk) = (unsigned long) texit; /* lr */
|
|
*(--stk) = 0; /* r12 */
|
|
*(--stk) = 0; /* r11 */
|
|
*(--stk) = 0; /* r10 */
|
|
*(--stk) = 0; /* r9 */
|
|
*(--stk) = 0; /* r8 */
|
|
*(--stk) = 0; /* r7 */
|
|
*(--stk) = 0; /* r6 */
|
|
*(--stk) = 0; /* r5 */
|
|
*(--stk) = 0; /* r4 */
|
|
*(--stk) = 0; /* r3 */
|
|
*(--stk) = 0; /* r2 */
|
|
*(--stk) = 0; /* r1 */
|
|
*(--stk) = (unsigned long)parameter; /* r0 : argument */
|
|
|
|
/* cpsr */
|
|
if ((rt_uint32_t)tentry & 0x01)
|
|
*(--stk) = SVCMODE | 0x20; /* thumb mode */
|
|
else
|
|
*(--stk) = SVCMODE; /* arm mode */
|
|
|
|
/* return task's current stack address */
|
|
return (rt_uint8_t *)stk;
|
|
}
|
|
|
|
/*@}*/
|