未验证 提交 9e7d7ae5 编写于 作者: B Bernard Xiong 提交者: GitHub

Merge pull request #5256 from jhbdream/thead-smart

[fix][libcpu][riscv][t-head] fix rt_hw_interrupt_disable/rt_hw_interupt_enable bug
...@@ -45,12 +45,12 @@ rt_hw_context_switch_to: ...@@ -45,12 +45,12 @@ rt_hw_context_switch_to:
/* save a0 to to_thread */ /* save a0 to to_thread */
la t0, rt_interrupt_to_thread la t0, rt_interrupt_to_thread
STORE a0, (t0) STORE a0, (t0)
/* save 0 to from_thread */ /* save 0 to from_thread */
la t0, rt_interrupt_from_thread la t0, rt_interrupt_from_thread
li t1, 0 li t1, 0
STORE t1, (t0) STORE t1, (t0)
/* set rt_thread_switch_interrupt_flag=1 */ /* set rt_thread_switch_interrupt_flag=1 */
la t0, rt_thread_switch_interrupt_flag la t0, rt_thread_switch_interrupt_flag
li t1, 1 li t1, 1
...@@ -97,7 +97,7 @@ rt_hw_context_switch_interrupt: ...@@ -97,7 +97,7 @@ rt_hw_context_switch_interrupt:
beq t1, t2, .reswitch beq t1, t2, .reswitch
/* set rt_thread_switch_interrupt_flag=1 */ /* set rt_thread_switch_interrupt_flag=1 */
STORE t2, (t0) STORE t2, (t0)
/* update from_thread */ /* update from_thread */
la t0, rt_interrupt_from_thread la t0, rt_interrupt_from_thread
STORE a0, (t0) STORE a0, (t0)
...@@ -137,7 +137,7 @@ PendSV_Handler: ...@@ -137,7 +137,7 @@ PendSV_Handler:
la t0, rt_interrupt_from_thread la t0, rt_interrupt_from_thread
lw t1, (t0) lw t1, (t0)
beqz t1, .switch_to_thead beqz t1, .switch_to_thead
/* restore from thread context t0,t1 */ /* restore from thread context t0,t1 */
lw t0, (-4)(sp) lw t0, (-4)(sp)
lw t1, (-8)(sp) lw t1, (-8)(sp)
...@@ -328,6 +328,23 @@ PendSV_Handler: ...@@ -328,6 +328,23 @@ PendSV_Handler:
.pendsv_exit: .pendsv_exit:
mret mret
/*
* rt_base_t rt_hw_interrupt_disable(void);
*/
.globl rt_hw_interrupt_disable
.type rt_hw_interrupt_disable, %function
rt_hw_interrupt_disable:
csrrci a0, mstatus, 8
ret
/*
* void rt_hw_interrupt_enable(rt_base_t level);
*/
.globl rt_hw_interrupt_enable
.type rt_hw_interrupt_enable, %function
rt_hw_interrupt_enable:
csrw mstatus, a0
ret
...@@ -134,34 +134,6 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, ...@@ -134,34 +134,6 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
return stk; return stk;
} }
/**
* This function will disable global interrupt
*
* @param none
*
* @return zero
*/
rt_base_t rt_hw_interrupt_disable(void)
{
__asm volatile("csrrci a0, mstatus, 8");
return;
}
/**
* This function will ennable global interrupt
*
* @param level not used
*
* @return none
*/
/* XXX:rename rt_hw_interrupt_restore? */
void rt_hw_interrupt_enable(rt_base_t level)
{
__asm volatile("csrw mstatus, a0");
}
/** shutdown CPU */ /** shutdown CPU */
RT_WEAK void rt_hw_cpu_shutdown() RT_WEAK void rt_hw_cpu_shutdown()
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册