[libcpu][C28x] Fix bugs of old c28x interrupt api which can not save and restore int status
In C28x DSP, interrupt status are stored in ST1 register. Both INTM and DBGM is used for masking interrupt, while the latter one is used in real-time debug mode. The origin function rudely enable and disable the interrupt without considering the recent interrupt status, which not only may cause problem in some situation but also is not in conformity with rt-thread design specifications. The new api will fix this bug.
This commit is contained in:
parent
b6207a2008
commit
21d32cdb3a
|
@ -73,7 +73,9 @@ RT_CTX_RESTORE .macro
|
||||||
;
|
;
|
||||||
.asmfunc
|
.asmfunc
|
||||||
_rt_hw_interrupt_disable:
|
_rt_hw_interrupt_disable:
|
||||||
DINT
|
PUSH ST1
|
||||||
|
SETC INTM,DBGM
|
||||||
|
MOV AL, *--SP
|
||||||
LRETR
|
LRETR
|
||||||
.endasmfunc
|
.endasmfunc
|
||||||
|
|
||||||
|
@ -82,7 +84,8 @@ _rt_hw_interrupt_disable:
|
||||||
;
|
;
|
||||||
.asmfunc
|
.asmfunc
|
||||||
_rt_hw_interrupt_enable:
|
_rt_hw_interrupt_enable:
|
||||||
EINT
|
MOV *SP++, AL
|
||||||
|
POP ST1
|
||||||
LRETR
|
LRETR
|
||||||
.endasmfunc
|
.endasmfunc
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue