summaryrefslogtreecommitdiff
path: root/libcpu
diff options
context:
space:
mode:
author明德无敌赵晓薇 <[email protected]>2019-06-18 20:59:00 +0800
committerGitHub <[email protected]>2019-06-18 20:59:00 +0800
commit21d32cdb3abe15f495b88cfaa18e1441357137ed (patch)
tree7d38b3e5743d898f8c177e5e43f37273bf3f04a0 /libcpu
parentb6207a20088df8b3c9ecd645fdea273e5c24dcde (diff)
[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.
Diffstat (limited to 'libcpu')
-rw-r--r--libcpu/ti-dsp/c28x/context.s7
1 files changed, 5 insertions, 2 deletions
diff --git a/libcpu/ti-dsp/c28x/context.s b/libcpu/ti-dsp/c28x/context.s
index 2b853a0075..f0555d6d35 100644
--- a/libcpu/ti-dsp/c28x/context.s
+++ b/libcpu/ti-dsp/c28x/context.s
@@ -73,7 +73,9 @@ RT_CTX_RESTORE .macro
;
.asmfunc
_rt_hw_interrupt_disable:
- DINT
+ PUSH ST1
+ SETC INTM,DBGM
+ MOV AL, *--SP
LRETR
.endasmfunc
@@ -82,7 +84,8 @@ _rt_hw_interrupt_disable:
;
.asmfunc
_rt_hw_interrupt_enable:
- EINT
+ MOV *SP++, AL
+ POP ST1
LRETR
.endasmfunc