修改格式
This commit is contained in:
parent
8ab19db7fa
commit
2b13e2fa57
@ -20,13 +20,13 @@
|
|||||||
*/
|
*/
|
||||||
void rt_hw_board_init(void)
|
void rt_hw_board_init(void)
|
||||||
{
|
{
|
||||||
// initial CPU core
|
// initial CPU core
|
||||||
KeyStone_common_CPU_init();
|
KeyStone_common_CPU_init();
|
||||||
|
|
||||||
// initial interrupt controller
|
// initial interrupt controller
|
||||||
rt_hw_interrupt_init();
|
rt_hw_interrupt_init();
|
||||||
|
|
||||||
// initial system timer
|
// initial system timer
|
||||||
rt_hw_system_timer_init();
|
rt_hw_system_timer_init();
|
||||||
|
|
||||||
/* initialize memory system */
|
/* initialize memory system */
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
void rt_init_thread_entry(void *parameter)
|
void rt_init_thread_entry(void *parameter)
|
||||||
{
|
{
|
||||||
rt_kprintf("hello rt-thread\n");
|
rt_kprintf("hello rt-thread\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rt_application_init(void)
|
int rt_application_init(void)
|
||||||
@ -39,42 +39,42 @@ int rt_application_init(void)
|
|||||||
*/
|
*/
|
||||||
void rtthread_startup(void)
|
void rtthread_startup(void)
|
||||||
{
|
{
|
||||||
/* disable interrupt first */
|
/* disable interrupt first */
|
||||||
rt_hw_interrupt_disable();
|
rt_hw_interrupt_disable();
|
||||||
|
|
||||||
|
/* init board */
|
||||||
|
rt_hw_board_init();
|
||||||
|
|
||||||
/* init board */
|
/* show version */
|
||||||
rt_hw_board_init();
|
rt_show_version();
|
||||||
|
|
||||||
/* show version */
|
/* init timer system */
|
||||||
rt_show_version();
|
rt_system_timer_init();
|
||||||
|
|
||||||
/* init timer system */
|
/* init scheduler system */
|
||||||
rt_system_timer_init();
|
rt_system_scheduler_init();
|
||||||
|
|
||||||
/* init scheduler system */
|
/* init application */
|
||||||
rt_system_scheduler_init();
|
rt_application_init();
|
||||||
|
|
||||||
/* init application */
|
/* init timer thread */
|
||||||
rt_application_init();
|
rt_system_timer_thread_init();
|
||||||
|
|
||||||
/* init timer thread */
|
/* init idle thread */
|
||||||
rt_system_timer_thread_init();
|
rt_thread_idle_init();
|
||||||
|
|
||||||
/* init idle thread */
|
/* start scheduler */
|
||||||
rt_thread_idle_init();
|
rt_system_scheduler_start();
|
||||||
|
|
||||||
/* start scheduler */
|
/* never reach here */
|
||||||
rt_system_scheduler_start();
|
return ;
|
||||||
|
|
||||||
/* never reach here */
|
|
||||||
return ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
/* startup RT-Thread RTOS */
|
/* startup RT-Thread RTOS */
|
||||||
rtthread_startup();
|
rtthread_startup();
|
||||||
|
|
||||||
for ( ; ; );
|
for ( ; ; );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,13 +20,13 @@
|
|||||||
*/
|
*/
|
||||||
void rt_hw_systick_isr(void)
|
void rt_hw_systick_isr(void)
|
||||||
{
|
{
|
||||||
/* enter interrupt */
|
/* enter interrupt */
|
||||||
rt_interrupt_enter();
|
rt_interrupt_enter();
|
||||||
|
|
||||||
rt_tick_increase();
|
rt_tick_increase();
|
||||||
|
|
||||||
/* leave interrupt */
|
/* leave interrupt */
|
||||||
rt_interrupt_leave();
|
rt_interrupt_leave();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,7 +34,7 @@ void rt_hw_systick_isr(void)
|
|||||||
*/
|
*/
|
||||||
void rt_hw_system_timer_init(void)
|
void rt_hw_system_timer_init(void)
|
||||||
{
|
{
|
||||||
// initial system timer interrupt, map local timer interrupt to INT14
|
// initial system timer interrupt, map local timer interrupt to INT14
|
||||||
gpCGEM_regs->INTMUX3 = (CSL_GEM_TINTLN<<CSL_CGEM_INTMUX3_INTSEL14_SHIFT);
|
gpCGEM_regs->INTMUX3 = (CSL_GEM_TINTLN<<CSL_CGEM_INTMUX3_INTSEL14_SHIFT);
|
||||||
// enable CPU INT14
|
// enable CPU INT14
|
||||||
CPU_interrupt_enable(1<<14);
|
CPU_interrupt_enable(1<<14);
|
||||||
|
@ -21,60 +21,60 @@
|
|||||||
|
|
||||||
struct rt_hw_register
|
struct rt_hw_register
|
||||||
{
|
{
|
||||||
RT_REG_PAIR(b17, b16);
|
RT_REG_PAIR(b17, b16);
|
||||||
RT_REG_PAIR(b19, b18);
|
RT_REG_PAIR(b19, b18);
|
||||||
RT_REG_PAIR(b21, b20);
|
RT_REG_PAIR(b21, b20);
|
||||||
RT_REG_PAIR(b23, b22);
|
RT_REG_PAIR(b23, b22);
|
||||||
RT_REG_PAIR(b25, b24);
|
RT_REG_PAIR(b25, b24);
|
||||||
RT_REG_PAIR(b27, b26);
|
RT_REG_PAIR(b27, b26);
|
||||||
RT_REG_PAIR(b29, b28);
|
RT_REG_PAIR(b29, b28);
|
||||||
RT_REG_PAIR(b31, b30);
|
RT_REG_PAIR(b31, b30);
|
||||||
|
|
||||||
RT_REG_PAIR(b1, b0);
|
RT_REG_PAIR(b1, b0);
|
||||||
RT_REG_PAIR(b3, b2);
|
RT_REG_PAIR(b3, b2);
|
||||||
RT_REG_PAIR(b5, b4);
|
RT_REG_PAIR(b5, b4);
|
||||||
RT_REG_PAIR(b7, b6);
|
RT_REG_PAIR(b7, b6);
|
||||||
RT_REG_PAIR(b9, b8);
|
RT_REG_PAIR(b9, b8);
|
||||||
RT_REG_PAIR(b11, b10);
|
RT_REG_PAIR(b11, b10);
|
||||||
RT_REG_PAIR(b13, b12);
|
RT_REG_PAIR(b13, b12);
|
||||||
|
|
||||||
|
RT_REG_PAIR(a17, a16);
|
||||||
|
RT_REG_PAIR(a19, a18);
|
||||||
|
RT_REG_PAIR(a21, a20);
|
||||||
|
RT_REG_PAIR(a23, a22);
|
||||||
|
RT_REG_PAIR(a25, a24);
|
||||||
|
RT_REG_PAIR(a27, a26);
|
||||||
|
RT_REG_PAIR(a29, a28);
|
||||||
|
RT_REG_PAIR(a31, a30);
|
||||||
|
|
||||||
RT_REG_PAIR(a17, a16);
|
RT_REG_PAIR(a1, a0);
|
||||||
RT_REG_PAIR(a19, a18);
|
RT_REG_PAIR(a3, a2);
|
||||||
RT_REG_PAIR(a21, a20);
|
RT_REG_PAIR(a5, a4);
|
||||||
RT_REG_PAIR(a23, a22);
|
RT_REG_PAIR(a7, a6);
|
||||||
RT_REG_PAIR(a25, a24);
|
RT_REG_PAIR(a9, a8);
|
||||||
RT_REG_PAIR(a27, a26);
|
RT_REG_PAIR(a11, a10);
|
||||||
RT_REG_PAIR(a29, a28);
|
RT_REG_PAIR(a13, a12);
|
||||||
RT_REG_PAIR(a31, a30);
|
|
||||||
|
|
||||||
RT_REG_PAIR(a1, a0);
|
RT_REG_PAIR(a15, a14);
|
||||||
RT_REG_PAIR(a3, a2);
|
RT_REG_PAIR(sp, dp);
|
||||||
RT_REG_PAIR(a5, a4);
|
|
||||||
RT_REG_PAIR(a7, a6);
|
|
||||||
RT_REG_PAIR(a9, a8);
|
|
||||||
RT_REG_PAIR(a11, a10);
|
|
||||||
RT_REG_PAIR(a13, a12);
|
|
||||||
|
|
||||||
RT_REG_PAIR(a15, a14);
|
|
||||||
RT_REG_PAIR(sp, dp);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rt_hw_exp_stack_register
|
struct rt_hw_exp_stack_register
|
||||||
{
|
{
|
||||||
RT_REG_PAIR(tsr, orig_a4);
|
RT_REG_PAIR(tsr, orig_a4);
|
||||||
RT_REG_PAIR(rilc, ilc);
|
RT_REG_PAIR(rilc, ilc);
|
||||||
RT_REG_PAIR(pc, csr);
|
RT_REG_PAIR(pc, csr);
|
||||||
struct rt_hw_register hw_register;
|
struct rt_hw_register hw_register;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define __dint() asm(" DINT")
|
#define __dint() asm(" DINT")
|
||||||
#define __rint() asm(" RINT")
|
#define __rint() asm(" RINT")
|
||||||
#define __system_call() asm(" SWE")
|
#define __system_call() asm(" SWE")
|
||||||
#define __enter_idle() asm(" IDLE")
|
#define __enter_idle() asm(" IDLE")
|
||||||
#define __nop() asm(" NOP")
|
#define __nop() asm(" NOP")
|
||||||
#define __mfence() asm(" MFENCE")
|
#define __mfence() asm(" MFENCE")
|
||||||
|
|
||||||
#define __SYSREG(ADDR, TYPE) (*(volatile TYPE*)(ADDR))
|
#define __SYSREG(ADDR, TYPE) (*(volatile TYPE*)(ADDR))
|
||||||
#define __SYSREGA(ADDR, TYPE) ((volatile TYPE*)(ADDR))
|
#define __SYSREGA(ADDR, TYPE) ((volatile TYPE*)(ADDR))
|
||||||
|
|
||||||
#endif /* __C66XX_H__ */
|
#endif /* __C66XX_H__ */
|
||||||
|
@ -9,18 +9,18 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; context switch for C6000 DSP
|
; context switch for C6000 DSP
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
|
|
||||||
.include "contextinc.asm"
|
.include "contextinc.asm"
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; macro definition
|
; macro definition
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
DP .set B14
|
DP .set B14
|
||||||
SP .set B15
|
SP .set B15
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; extern variable
|
; extern variable
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
.ref rt_system_stack_top
|
.ref rt_system_stack_top
|
||||||
;
|
;
|
||||||
@ -28,7 +28,7 @@ SP .set B15
|
|||||||
;
|
;
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; global variable
|
; global variable
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
.global rt_interrupt_from_thread
|
.global rt_interrupt_from_thread
|
||||||
.global rt_interrupt_to_thread
|
.global rt_interrupt_to_thread
|
||||||
@ -47,7 +47,7 @@ rt_hw_enable_exception:
|
|||||||
MVC .S2 B3,NRP
|
MVC .S2 B3,NRP
|
||||||
MVK .L2 0xC,B1
|
MVK .L2 0xC,B1
|
||||||
OR .D2 B0,B1,B0
|
OR .D2 B0,B1,B0
|
||||||
MVC .S2 B0,TSR ; Set GEE and XEN in TSR
|
MVC .S2 B0,TSR ; Set GEE and XEN in TSR
|
||||||
B .S2 NRP
|
B .S2 NRP
|
||||||
NOP 5
|
NOP 5
|
||||||
|
|
||||||
@ -93,27 +93,27 @@ rt_hw_context_switch:
|
|||||||
; {
|
; {
|
||||||
SUBAW .D2 SP,2,SP
|
SUBAW .D2 SP,2,SP
|
||||||
ADD .D1X SP,-8,A15
|
ADD .D1X SP,-8,A15
|
||||||
|| STDW .D2T1 A15:A14,*SP--[3] ; Store A15:A14
|
|| STDW .D2T1 A15:A14,*SP--[3] ; Store A15:A14
|
||||||
|
|
||||||
STDW .D2T2 B13:B12,*SP--[1] ; Store B13:B12
|
STDW .D2T2 B13:B12,*SP--[1] ; Store B13:B12
|
||||||
|| STDW .D1T1 A13:A12,*A15--[1] ; Store A13:A12
|
|| STDW .D1T1 A13:A12,*A15--[1] ; Store A13:A12
|
||||||
|| MV B3,B13
|
|| MV B3,B13
|
||||||
STDW .D2T2 B11:B10,*SP--[1] ; Store B11:B10
|
STDW .D2T2 B11:B10,*SP--[1] ; Store B11:B10
|
||||||
|| STDW .D1T1 A11:A10,*A15--[1] ; Store A11:A10
|
|| STDW .D1T1 A11:A10,*A15--[1] ; Store A11:A10
|
||||||
|| MVC .S2 CSR,B12
|
|| MVC .S2 CSR,B12
|
||||||
STDW .D2T2 B13:B12,*SP--[1] ; Store PC:CSR
|
STDW .D2T2 B13:B12,*SP--[1] ; Store PC:CSR
|
||||||
|| MVC .S2 TSR,B5
|
|| MVC .S2 TSR,B5
|
||||||
|
|
||||||
MVC .S2 ILC,B11 ;
|
MVC .S2 ILC,B11
|
||||||
MVC .S2 RILC,B10 ;
|
MVC .S2 RILC,B10
|
||||||
STDW .D2T2 B11:B10,*SP--[1] ; Store RILC:ILC
|
STDW .D2T2 B11:B10,*SP--[1] ; Store RILC:ILC
|
||||||
|| MV .S1X B5,A3
|
|| MV .S1X B5,A3
|
||||||
|
|
||||||
ZERO A2 ;
|
ZERO A2 ;
|
||||||
STDW .D2T1 A3:A2,*SP--[1] ; Store TSR:stack type
|
STDW .D2T1 A3:A2,*SP--[1] ; Store TSR:stack type
|
||||||
STW SP,*A4 ; Save thread's stack pointer
|
STW SP,*A4 ; Save thread's stack pointer
|
||||||
B rt_hw_context_switch_to
|
B rt_hw_context_switch_to
|
||||||
MV B4,A4 ;
|
MV B4,A4
|
||||||
NOP 4
|
NOP 4
|
||||||
;}
|
;}
|
||||||
|
|
||||||
@ -126,24 +126,24 @@ rt_hw_context_switch_to:
|
|||||||
;{
|
;{
|
||||||
LDW *A4,SP
|
LDW *A4,SP
|
||||||
NOP 4
|
NOP 4
|
||||||
LDDW .D2T2 *++SP[1],B9:B8 ; get TSR (B9) and stack frame type (B8)
|
LDDW .D2T2 *++SP[1],B9:B8 ; get TSR (B9) and stack frame type (B8)
|
||||||
LDDW .D2T2 *++SP[1],B11:B10 ; get RILC (B11) and ILC (B10)
|
LDDW .D2T2 *++SP[1],B11:B10 ; get RILC (B11) and ILC (B10)
|
||||||
LDDW .D2T2 *++SP[1],B13:B12 ; get PC (B13) and CSR (B12)
|
LDDW .D2T2 *++SP[1],B13:B12 ; get PC (B13) and CSR (B12)
|
||||||
NOP 2
|
NOP 2
|
||||||
MV B8,B0
|
MV B8,B0
|
||||||
[B0] B _rt_thread_interrupt_stack ;
|
[B0] B _rt_thread_interrupt_stack
|
||||||
NOP 5
|
NOP 5
|
||||||
;
|
;
|
||||||
; this maybe do better
|
; this maybe do better
|
||||||
;
|
;
|
||||||
LDDW .D2T2 *++SP[1],B11:B10
|
LDDW .D2T2 *++SP[1],B11:B10
|
||||||
|| MVC .S2 B11,RILC ; Restore RILC
|
|| MVC .S2 B11,RILC ; Restore RILC
|
||||||
LDDW .D2T2 *++SP[1],B13:B12
|
LDDW .D2T2 *++SP[1],B13:B12
|
||||||
|| MVC .S2 B10,ILC ; Restore ILC
|
|| MVC .S2 B10,ILC ; Restore ILC
|
||||||
LDDW .D2T1 *++SP[1],A11:A10
|
LDDW .D2T1 *++SP[1],A11:A10
|
||||||
|| MV B13,B3 ; Restore PC
|
|| MV B13,B3 ; Restore PC
|
||||||
LDDW .D2T1 *++SP[1],A13:A12
|
LDDW .D2T1 *++SP[1],A13:A12
|
||||||
|| MVC .S2 B12,CSR ; Restore CSR
|
|| MVC .S2 B12,CSR ; Restore CSR
|
||||||
LDDW .D2T1 *++SP[1],A15:A14
|
LDDW .D2T1 *++SP[1],A15:A14
|
||||||
B B3 ; Return to caller
|
B B3 ; Return to caller
|
||||||
ADDAW .D2 SP,2,SP
|
ADDAW .D2 SP,2,SP
|
||||||
@ -172,21 +172,21 @@ _rt_thread_interrupt_stack:
|
|||||||
|
|
||||||
LDDW .D1T1 *++A15[1],A3:A2
|
LDDW .D1T1 *++A15[1],A3:A2
|
||||||
|| LDDW .D2T2 *++SP[1],B3:B2
|
|| LDDW .D2T2 *++SP[1],B3:B2
|
||||||
|| MVC .S2 B9,ITSR ; Restore ITSR
|
|| MVC .S2 B9,ITSR ; Restore ITSR
|
||||||
LDDW .D1T1 *++A15[1],A5:A4
|
LDDW .D1T1 *++A15[1],A5:A4
|
||||||
|| LDDW .D2T2 *++SP[1],B5:B4
|
|| LDDW .D2T2 *++SP[1],B5:B4
|
||||||
|| MVC .S2 B11,RILC ; Restore RILC
|
|| MVC .S2 B11,RILC ; Restore RILC
|
||||||
LDDW .D1T1 *++A15[1],A7:A6
|
LDDW .D1T1 *++A15[1],A7:A6
|
||||||
|| LDDW .D2T2 *++SP[1],B7:B6
|
|| LDDW .D2T2 *++SP[1],B7:B6
|
||||||
|| MVC .S2 B10,ILC ; Restore ILC
|
|| MVC .S2 B10,ILC ; Restore ILC
|
||||||
|
|
||||||
LDDW .D1T1 *++A15[1],A9:A8
|
LDDW .D1T1 *++A15[1],A9:A8
|
||||||
|| LDDW .D2T2 *++SP[1],B9:B8
|
|| LDDW .D2T2 *++SP[1],B9:B8
|
||||||
|| MVC .S2 B13,IRP ; Restore IPR
|
|| MVC .S2 B13,IRP ; Restore IPR
|
||||||
|
|
||||||
LDDW .D1T1 *++A15[1],A11:A10
|
LDDW .D1T1 *++A15[1],A11:A10
|
||||||
|| LDDW .D2T2 *++SP[1],B11:B10
|
|| LDDW .D2T2 *++SP[1],B11:B10
|
||||||
|| MVC .S2 B12,CSR ; Restore CSR
|
|| MVC .S2 B12,CSR ; Restore CSR
|
||||||
|
|
||||||
LDDW .D1T1 *++A15[1],A13:A12
|
LDDW .D1T1 *++A15[1],A13:A12
|
||||||
|| LDDW .D2T2 *++SP[1],B13:B12
|
|| LDDW .D2T2 *++SP[1],B13:B12
|
||||||
@ -242,9 +242,9 @@ rt_interrupt_context_restore:
|
|||||||
CMPEQ 1,A1,A2
|
CMPEQ 1,A1,A2
|
||||||
[A2] BNOP rt_preempt_context_restore,5
|
[A2] BNOP rt_preempt_context_restore,5
|
||||||
NOP 5
|
NOP 5
|
||||||
LDDW .D2T2 *++SP[1],B9:B8 ; get TSR (B9)
|
LDDW .D2T2 *++SP[1],B9:B8 ; get TSR (B9)
|
||||||
LDDW .D2T2 *++SP[1],B11:B10 ; get RILC (B11) and ILC (B10)
|
LDDW .D2T2 *++SP[1],B11:B10 ; get RILC (B11) and ILC (B10)
|
||||||
LDDW .D2T2 *++SP[1],B13:B12 ; get PC (B13) and CSR (B12)
|
LDDW .D2T2 *++SP[1],B13:B12 ; get PC (B13) and CSR (B12)
|
||||||
|
|
||||||
ADDAW .D1X SP,30,A15
|
ADDAW .D1X SP,30,A15
|
||||||
|
|
||||||
@ -290,15 +290,15 @@ rt_interrupt_context_restore:
|
|||||||
|| MVKL .S1 rt_system_stack_top,A15
|
|| MVKL .S1 rt_system_stack_top,A15
|
||||||
MVKH .S1 rt_system_stack_top,A15
|
MVKH .S1 rt_system_stack_top,A15
|
||||||
|| ADDAW .D1X SP,6,A14
|
|| ADDAW .D1X SP,6,A14
|
||||||
STW .D1T1 A14,*A15 ; save system stack pointer
|
STW .D1T1 A14,*A15 ; save system stack pointer
|
||||||
|
|
||||||
LDDW .D2T1 *++SP[1],A15:A14
|
LDDW .D2T1 *++SP[1],A15:A14
|
||||||
B .S2 IRP ; return from interruption
|
B .S2 IRP ; return from interruption
|
||||||
LDDW .D2T2 *+SP[1],SP:DP
|
LDDW .D2T2 *+SP[1],SP:DP
|
||||||
NOP 4
|
NOP 4
|
||||||
rt_preempt_context_restore:
|
rt_preempt_context_restore:
|
||||||
ZERO A12
|
ZERO A12
|
||||||
STW A12,*A3 ; clear rt_thread_switch_interrupt_flag
|
STW A12,*A3 ; clear rt_thread_switch_interrupt_flag
|
||||||
;
|
;
|
||||||
; restore saved registers by system stack
|
; restore saved registers by system stack
|
||||||
;
|
;
|
||||||
@ -316,11 +316,9 @@ rt_preempt_context_restore:
|
|||||||
MVKH rt_interrupt_to_thread,B10
|
MVKH rt_interrupt_to_thread,B10
|
||||||
LDW *B10,B11
|
LDW *B10,B11
|
||||||
NOP 3
|
NOP 3
|
||||||
STW SP,*A10 ; store sp in preempted tasks's TCB
|
STW SP,*A10 ; store sp in preempted tasks's TCB
|
||||||
B rt_hw_context_switch_to
|
B rt_hw_context_switch_to
|
||||||
MV B11,A4 ;
|
MV B11,A4
|
||||||
NOP 4
|
NOP 4
|
||||||
;}
|
;}
|
||||||
|
|
||||||
.end
|
.end
|
||||||
|
|
||||||
|
@ -9,28 +9,28 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; macro definition
|
; macro definition
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
SAVE_ALL .macro __rp, __tsr
|
SAVE_ALL .macro __rp, __tsr
|
||||||
STW .D2T2 B0,*SP--[2] ; save original B0
|
STW .D2T2 B0,*SP--[2] ; save original B0
|
||||||
MVKL .S2 rt_system_stack_top,B0
|
MVKL .S2 rt_system_stack_top,B0
|
||||||
MVKH .S2 rt_system_stack_top,B0
|
MVKH .S2 rt_system_stack_top,B0
|
||||||
LDW .D2T2 *B0,B1 ; system stack
|
LDW .D2T2 *B0,B1 ; system stack
|
||||||
|
|
||||||
NOP 3
|
NOP 3
|
||||||
STW .D2T2 B1,*+SP[1] ; save original B1
|
STW .D2T2 B1,*+SP[1] ; save original B1
|
||||||
XOR .D2 SP,B1,B0 ; check current stack types
|
XOR .D2 SP,B1,B0 ; check current stack types
|
||||||
LDW .D2T2 *+SP[1],B1 ; restore B0/B1
|
LDW .D2T2 *+SP[1],B1 ; restore B0/B1
|
||||||
LDW .D2T2 *++SP[2],B0
|
LDW .D2T2 *++SP[2],B0
|
||||||
SHR .S2 B0,12,B0 ; 0 if already using system stack
|
SHR .S2 B0,12,B0 ; 0 if already using system stack
|
||||||
[B0] STDW .D2T2 SP:DP,*--B1[1] ; thread: save thread sp/dp system stack
|
[B0] STDW .D2T2 SP:DP,*--B1[1] ; thread: save thread sp/dp system stack
|
||||||
[B0] MV .S2 B1,SP ; and switch to system stack
|
[B0] MV .S2 B1,SP ; and switch to system stack
|
||||||
||[!B0] STDW .D2T2 SP:DP,*--SP[1] ; kernel: nest interrupt save(not support)
|
||[!B0] STDW .D2T2 SP:DP,*--SP[1] ; kernel: nest interrupt save(not support)
|
||||||
|
|
||||||
SUBAW .D2 SP,2,SP
|
SUBAW .D2 SP,2,SP
|
||||||
|
|
||||||
ADD .D1X SP,-8,A15
|
ADD .D1X SP,-8,A15
|
||||||
|| STDW .D2T1 A15:A14,*SP--[16] ; save A15:A14
|
|| STDW .D2T1 A15:A14,*SP--[16] ; save A15:A14
|
||||||
|
|
||||||
STDW .D2T2 B13:B12,*SP--[1]
|
STDW .D2T2 B13:B12,*SP--[1]
|
||||||
|| STDW .D1T1 A13:A12,*A15--[1]
|
|| STDW .D1T1 A13:A12,*A15--[1]
|
||||||
@ -73,15 +73,15 @@ SAVE_ALL .macro __rp, __tsr
|
|||||||
STDW .D2T2 B17:B16,*SP--[1]
|
STDW .D2T2 B17:B16,*SP--[1]
|
||||||
|| STDW .D1T1 A17:A16,*A15--[1]
|
|| STDW .D1T1 A17:A16,*A15--[1]
|
||||||
|
|
||||||
STDW .D2T2 B13:B12,*SP--[1] ; save PC and CSR
|
STDW .D2T2 B13:B12,*SP--[1] ; save PC and CSR
|
||||||
STDW .D2T2 B11:B10,*SP--[1] ; save RILC and ILC
|
STDW .D2T2 B11:B10,*SP--[1] ; save RILC and ILC
|
||||||
STDW .D2T1 A5:A4,*SP--[1] ; save TSR and orig A4(stack type)
|
STDW .D2T1 A5:A4,*SP--[1] ; save TSR and orig A4(stack type)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
RESTORE_ALL .macro __rp, __tsr
|
RESTORE_ALL .macro __rp, __tsr
|
||||||
LDDW .D2T2 *++SP[1],B9:B8 ; get TSR (B9)
|
LDDW .D2T2 *++SP[1],B9:B8 ; get TSR (B9)
|
||||||
LDDW .D2T2 *++SP[1],B11:B10 ; get RILC (B11) and ILC (B10)
|
LDDW .D2T2 *++SP[1],B11:B10 ; get RILC (B11) and ILC (B10)
|
||||||
LDDW .D2T2 *++SP[1],B13:B12 ; get PC (B13) and CSR (B12)
|
LDDW .D2T2 *++SP[1],B13:B12 ; get PC (B13) and CSR (B12)
|
||||||
|
|
||||||
ADDAW .D1X SP,30,A15
|
ADDAW .D1X SP,30,A15
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ RESTORE_ALL .macro __rp, __tsr
|
|||||||
|| MVKL .S1 rt_system_stack_top,A15
|
|| MVKL .S1 rt_system_stack_top,A15
|
||||||
MVKH .S1 rt_system_stack_top,A15
|
MVKH .S1 rt_system_stack_top,A15
|
||||||
|| ADDAW .D1X SP,6,A14
|
|| ADDAW .D1X SP,6,A14
|
||||||
STW .D1T1 A14,*A15 ; save system stack pointer
|
STW .D1T1 A14,*A15 ; save system stack pointer
|
||||||
|
|
||||||
LDDW .D2T1 *++SP[1],A15:A14
|
LDDW .D2T1 *++SP[1],A15:A14
|
||||||
LDDW .D2T2 *+SP[1],SP:DP
|
LDDW .D2T2 *+SP[1],SP:DP
|
||||||
@ -139,7 +139,7 @@ THREAD_SAVE_ALL .macro __rp, __tsr
|
|||||||
SUBAW .D2 SP,2,SP
|
SUBAW .D2 SP,2,SP
|
||||||
|
|
||||||
ADD .D1X SP,-8,A15
|
ADD .D1X SP,-8,A15
|
||||||
|| STDW .D2T1 A15:A14,*SP--[16] ; save A15:A14
|
|| STDW .D2T1 A15:A14,*SP--[16] ; save A15:A14
|
||||||
|
|
||||||
STDW .D2T2 B13:B12,*SP--[1]
|
STDW .D2T2 B13:B12,*SP--[1]
|
||||||
|| STDW .D1T1 A13:A12,*A15--[1]
|
|| STDW .D1T1 A13:A12,*A15--[1]
|
||||||
@ -181,7 +181,7 @@ THREAD_SAVE_ALL .macro __rp, __tsr
|
|||||||
STDW .D2T2 B17:B16,*SP--[1]
|
STDW .D2T2 B17:B16,*SP--[1]
|
||||||
|| STDW .D1T1 A17:A16,*A15--[1]
|
|| STDW .D1T1 A17:A16,*A15--[1]
|
||||||
|
|
||||||
STDW .D2T2 B13:B12,*SP--[1] ; save PC and CSR
|
STDW .D2T2 B13:B12,*SP--[1] ; save PC and CSR
|
||||||
STDW .D2T2 B11:B10,*SP--[1] ; save RILC and ILC
|
STDW .D2T2 B11:B10,*SP--[1] ; save RILC and ILC
|
||||||
STDW .D2T1 A5:A4,*SP--[1] ; save TSR and orig A4(stack type)
|
STDW .D2T1 A5:A4,*SP--[1] ; save TSR and orig A4(stack type)
|
||||||
.endm
|
.endm
|
||||||
|
@ -194,4 +194,3 @@ void hw_int15_handler(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,8 +26,8 @@ rt_uint32_t rt_thread_switch_interrupt_flag;
|
|||||||
*/
|
*/
|
||||||
void rt_hw_interrupt_init(void)
|
void rt_hw_interrupt_init(void)
|
||||||
{
|
{
|
||||||
// initial system trap
|
// initial system trap
|
||||||
rt_trap_init();
|
rt_trap_init();
|
||||||
|
|
||||||
/* init exceptions table */
|
/* init exceptions table */
|
||||||
rt_memset(isr_table, 0x00, sizeof(isr_table));
|
rt_memset(isr_table, 0x00, sizeof(isr_table));
|
||||||
|
@ -9,11 +9,11 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; interrupt and execption handler for C6000 DSP
|
; interrupt and execption handler for C6000 DSP
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; macro definition
|
; macro definition
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
DP .set B14
|
DP .set B14
|
||||||
SP .set B15
|
SP .set B15
|
||||||
@ -22,7 +22,7 @@ SP .set B15
|
|||||||
;
|
;
|
||||||
.include "contextinc.asm"
|
.include "contextinc.asm"
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; global function
|
; global function
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
.global _nmi_handler
|
.global _nmi_handler
|
||||||
.global _bad_handler
|
.global _bad_handler
|
||||||
@ -43,7 +43,7 @@ SP .set B15
|
|||||||
;
|
;
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; extern function
|
; extern function
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
.ref hw_nmi_handler
|
.ref hw_nmi_handler
|
||||||
.ref hw_bad_handler
|
.ref hw_bad_handler
|
||||||
@ -66,7 +66,7 @@ SP .set B15
|
|||||||
;
|
;
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; extern variable
|
; extern variable
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
.ref rt_system_stack_top
|
.ref rt_system_stack_top
|
||||||
;
|
;
|
||||||
@ -74,7 +74,7 @@ SP .set B15
|
|||||||
;
|
;
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; interrupt macro definition
|
; interrupt macro definition
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
RT_INTERRUPT_ENTRY .macro
|
RT_INTERRUPT_ENTRY .macro
|
||||||
SAVE_ALL IRP,ITSR
|
SAVE_ALL IRP,ITSR
|
||||||
@ -86,7 +86,7 @@ RT_CALL_INT .macro __isr
|
|||||||
NOP 5
|
NOP 5
|
||||||
.endm
|
.endm
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; execption macro definition
|
; execption macro definition
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
RT_EXECPTION_ENTRY .macro
|
RT_EXECPTION_ENTRY .macro
|
||||||
SAVE_ALL NRP,NTSR
|
SAVE_ALL NRP,NTSR
|
||||||
@ -94,7 +94,7 @@ RT_EXECPTION_ENTRY .macro
|
|||||||
|
|
||||||
RT_EXECPTION_EXIT .macro
|
RT_EXECPTION_EXIT .macro
|
||||||
RESTORE_ALL NRP,NTSR
|
RESTORE_ALL NRP,NTSR
|
||||||
B .S2 NRP ; return from execption
|
B .S2 NRP ; return from execption
|
||||||
NOP 5
|
NOP 5
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -35,73 +35,73 @@ ADDRESS_MSK .set 0xFFFFFFF0
|
|||||||
;{
|
;{
|
||||||
.global rt_hw_stack_init
|
.global rt_hw_stack_init
|
||||||
rt_hw_stack_init:
|
rt_hw_stack_init:
|
||||||
SUB A6,1,B1 ;
|
SUB A6,1,B1 ;
|
||||||
MVKL .S1 ADDRESS_MSK,A1 ;
|
MVKL .S1 ADDRESS_MSK,A1 ;
|
||||||
MVKH .S1 ADDRESS_MSK,A1 ; Build address mask
|
MVKH .S1 ADDRESS_MSK,A1 ; Build address mask
|
||||||
MVC .S2 CSR,B0 ;
|
MVC .S2 CSR,B0 ;
|
||||||
AND -2,B0,B0 ; Clear GIE bit
|
AND -2,B0,B0 ; Clear GIE bit
|
||||||
OR 2,B0,B0 ; Set PGIE bit for interrupt return
|
OR 2,B0,B0 ; Set PGIE bit for interrupt return
|
||||||
AND A1,B1,B1 ; Ensure alignment
|
AND A1,B1,B1 ; Ensure alignment
|
||||||
;
|
;
|
||||||
; Actually build the stack frame.
|
; Actually build the stack frame.
|
||||||
;
|
;
|
||||||
MV .S1 B1,A3
|
MV .S1 B1,A3
|
||||||
MV .S1 B14,A2
|
MV .S1 B14,A2
|
||||||
STDW .D2T1 A3:A2,*--B1[1] ; Initial B15:B14
|
STDW .D2T1 A3:A2,*--B1[1] ; Initial B15:B14
|
||||||
SUBAW .D2 B1,2,B1
|
SUBAW .D2 B1,2,B1
|
||||||
ZERO A2
|
ZERO A2
|
||||||
ZERO A3 ; Clear value
|
ZERO A3 ; Clear value
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A15:A14
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A15:A14
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A13:A12
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A13:A12
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A11:A10
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A11:A10
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A9:A8
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A9:A8
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A7:A6
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A7:A6
|
||||||
MV .S1 B4,A2
|
MV .S1 B4,A2
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A5:A4
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A5:A4
|
||||||
ZERO A2
|
ZERO A2
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A3:A2
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A3:A2
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A1:A0
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A1:A0
|
||||||
|
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A31:A30
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A31:A30
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A29:A28
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A29:A28
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A27:A26
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A27:A26
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A25:A24
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A25:A24
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A23:A22
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A23:A22
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A21:A20
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A21:A20
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A19:A18
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A19:A18
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial A17:A16
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial A17:A16
|
||||||
|
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B13:B12
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B13:B12
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B11:B10
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B11:B10
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B9:B8
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B9:B8
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B7:B6
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B7:B6
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B5:B4
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B5:B4
|
||||||
MV .S1 B6,A3
|
MV .S1 B6,A3
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B3:B2
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B3:B2
|
||||||
ZERO A3
|
ZERO A3
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B1:B0
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B1:B0
|
||||||
|
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B31:B30
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B31:B30
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B29:B28
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B29:B28
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B27:B26
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B27:B26
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B25:B24
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B25:B24
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B23:B22
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B23:B22
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B21:B20
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B21:B20
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B19:B18
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B19:B18
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial B17:B16
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial B17:B16
|
||||||
|
|
||||||
MV .S1 A4,A3
|
MV .S1 A4,A3
|
||||||
MV .S1 B0,A2
|
MV .S1 B0,A2
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial PC:CSR
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial PC:CSR
|
||||||
|
|
||||||
ZERO A2
|
ZERO A2
|
||||||
ZERO A3
|
ZERO A3
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial ILC:RILC
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial ILC:RILC
|
||||||
B B3
|
B B3
|
||||||
MVKL .S2 0x3,B0
|
MVKL .S2 0x3,B0
|
||||||
MV .S1 B0,A3
|
MV .S1 B0,A3
|
||||||
MVKL .S1 1,A2
|
MVKL .S1 1,A2
|
||||||
STDW .D2T1 A3:A2,*B1--[1] ; Initial TSR:stack type
|
STDW .D2T1 A3:A2,*B1--[1] ; Initial TSR:stack type
|
||||||
MV .S1 B1,A4 ; Save to TCB
|
MV .S1 B1,A4 ; Save to TCB
|
||||||
;}
|
;}
|
||||||
.end
|
.end
|
||||||
|
@ -333,26 +333,26 @@ int rt_hw_process_exception(struct rt_hw_exp_stack_register *regs)
|
|||||||
type_num = __fls(type) - 1;
|
type_num = __fls(type) - 1;
|
||||||
|
|
||||||
switch(type_num) {
|
switch(type_num) {
|
||||||
case EXCEPT_TYPE_NXF: /* NMI exception */
|
case EXCEPT_TYPE_NXF: /* NMI exception */
|
||||||
ack_exception(EXCEPT_TYPE_NXF); /* clear exception */
|
ack_exception(EXCEPT_TYPE_NXF); /* clear exception */
|
||||||
if (hw_nmi_handler != RT_NULL)
|
if (hw_nmi_handler != RT_NULL)
|
||||||
hw_nmi_handler(regs);
|
hw_nmi_handler(regs);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXCEPT_TYPE_IXF: /* internal exception */
|
case EXCEPT_TYPE_IXF: /* internal exception */
|
||||||
if (process_iexcept(regs))
|
if (process_iexcept(regs))
|
||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXCEPT_TYPE_EXC: /* external exception */
|
case EXCEPT_TYPE_EXC: /* external exception */
|
||||||
process_except(regs);
|
process_except(regs);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXCEPT_TYPE_SXF: /* software exception */
|
case EXCEPT_TYPE_SXF: /* software exception */
|
||||||
ie_num = 8;
|
ie_num = 8;
|
||||||
ack_exception(type_num);
|
ack_exception(type_num);
|
||||||
break;
|
break;
|
||||||
default: /* clear exception */
|
default: /* clear exception */
|
||||||
ack_exception(type_num);
|
ack_exception(type_num);
|
||||||
do_trap(&iexcept_table[ie_num], regs);
|
do_trap(&iexcept_table[ie_num], regs);
|
||||||
break;
|
break;
|
||||||
|
@ -41,30 +41,30 @@
|
|||||||
|
|
||||||
enum SYSTEM_TRAP_CODE
|
enum SYSTEM_TRAP_CODE
|
||||||
{
|
{
|
||||||
ABORT_BUS_ADDRERR = 0, // bus address error
|
ABORT_BUS_ADDRERR = 0, // bus address error
|
||||||
ABORT_BUS_ACCERR, // bus access permission error
|
ABORT_BUS_ACCERR, // bus access permission error
|
||||||
ABORT_OPCODE_ILL, // illegal opcode
|
ABORT_OPCODE_ILL, // illegal opcode
|
||||||
ABORT_PRVREG_ILL, // privilege register
|
ABORT_PRVREG_ILL, // privilege register
|
||||||
ABORT_PRVOPC_ILL, // privileged opcode
|
ABORT_PRVOPC_ILL, // privileged opcode
|
||||||
ABORT_ILLTRP_ILL, // illegal trap
|
ABORT_ILLTRP_ILL, // illegal trap
|
||||||
ABORT_BRKPT_ILL, // handling breakpoints
|
ABORT_BRKPT_ILL, // handling breakpoints
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* abort types
|
* abort types
|
||||||
*/
|
*/
|
||||||
#define ABORT_TYPE_BUS 0 // bus access abnormal
|
#define ABORT_TYPE_BUS 0 // bus access abnormal
|
||||||
#define ABORT_TYPE_MAP 1 // page table mapping error
|
#define ABORT_TYPE_MAP 1 // page table mapping error
|
||||||
#define ABORT_TYPE_UNDDEF 0xff // undefined exception
|
#define ABORT_TYPE_UNDDEF 0xff // undefined exception
|
||||||
#define ABORT_TYPE_FATAL 0xffffffff // fatal error
|
#define ABORT_TYPE_FATAL 0xffffffff // fatal error
|
||||||
|
|
||||||
struct rt_exception_info {
|
struct rt_exception_info {
|
||||||
char *kernel_str;
|
char *kernel_str;
|
||||||
int type;
|
int type;
|
||||||
int code;
|
int code;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BKPT_OPCODE 0x56454314 /* illegal opcode */
|
#define BKPT_OPCODE 0x56454314 /* illegal opcode */
|
||||||
#define INTC_MEXPMASK __SYSREGA(0x018000e0, unsigned int)
|
#define INTC_MEXPMASK __SYSREGA(0x018000e0, unsigned int)
|
||||||
|
|
||||||
#define __ffs(a) (_lmbd(1, _bitr(a)))
|
#define __ffs(a) (_lmbd(1, _bitr(a)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user