From 55a2684e5647f8f5c3454ae73c114f5068488a6d Mon Sep 17 00:00:00 2001 From: dzzxzz Date: Fri, 2 Sep 2011 06:56:22 +0000 Subject: [PATCH] improve the renesas M16C porting it can be worked in NORMAL or SIMPLE calling convention and in all the optimize level(none, low, medium, high) git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1691 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- libcpu/m16c/m16c62p/context_iar.asm | 18 ------------------ libcpu/m16c/m16c62p/cpuport.c | 19 ++++++++++++++++++- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/libcpu/m16c/m16c62p/context_iar.asm b/libcpu/m16c/m16c62p/context_iar.asm index f326817ffb..bd75341f4b 100644 --- a/libcpu/m16c/m16c62p/context_iar.asm +++ b/libcpu/m16c/m16c62p/context_iar.asm @@ -23,15 +23,12 @@ RSEG CODE(1) - EXTERN rt_thread_switch_interrput_flag EXTERN rt_interrupt_from_thread EXTERN rt_interrupt_to_thread PUBLIC rt_hw_interrupt_disable PUBLIC rt_hw_interrupt_enable PUBLIC rt_hw_context_switch_to - PUBLIC rt_hw_context_switch - PUBLIC rt_hw_context_switch_interrupt PUBLIC os_context_switch rt_hw_interrupt_disable: @@ -66,19 +63,4 @@ rt_hw_context_switch_to: POPM R0,R1,R2,R3,A0,A1,SB,FB REIT -rt_hw_context_switch: - MOV.W R0, rt_interrupt_from_thread - MOV.W R1, rt_interrupt_to_thread - INT #0 ;software interrupt 0 - RTS - -rt_hw_context_switch_interrupt: - CMP.W #1, rt_thread_switch_interrput_flag - JEQ jump - MOV.W #1, rt_thread_switch_interrput_flag - MOV.W R0, rt_interrupt_from_thread -jump - MOV.W R1, rt_interrupt_to_thread - RTS - END diff --git a/libcpu/m16c/m16c62p/cpuport.c b/libcpu/m16c/m16c62p/cpuport.c index bab2ab5a22..58c1400a25 100644 --- a/libcpu/m16c/m16c62p/cpuport.c +++ b/libcpu/m16c/m16c62p/cpuport.c @@ -19,7 +19,7 @@ extern volatile rt_uint8_t rt_interrupt_nest; /* switch flag on interrupt and thread pointer to save switch record */ rt_uint32_t rt_interrupt_from_thread; rt_uint32_t rt_interrupt_to_thread; -rt_uint32_t rt_thread_switch_interrput_flag; +rt_uint8_t rt_thread_switch_interrput_flag; /** * This function will initialize hardware interrupt @@ -71,3 +71,20 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *stack_ad /* return task's current stack address */ return (rt_uint8_t *)pstk16; } + +void rt_hw_context_switch(rt_uint32_t from, rt_uint32_t to) +{ + rt_interrupt_from_thread = from; + rt_interrupt_to_thread = to; + asm("INT #0"); +} + +void rt_hw_context_switch_interrupt(rt_uint32_t from, rt_uint32_t to) +{ + if (rt_thread_switch_interrput_flag != 1) + { + rt_thread_switch_interrput_flag = 1; + rt_interrupt_from_thread = from; + } + rt_interrupt_to_thread = to; +} \ No newline at end of file