Merge pull request #5256 from jhbdream/thead-smart
[fix][libcpu][riscv][t-head] fix rt_hw_interrupt_disable/rt_hw_interupt_enable bug
This commit is contained in:
commit
9e7d7ae525
|
@ -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:
|
||||||
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:
|
||||||
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:
|
||||||
|
|
||||||
.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,
|
||||||
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()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue