123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- ;
- ; Copyright (c) 2021, Shenzhen Academy of Aerospace Technology
- ;
- ; SPDX-License-Identifier: Apache-2.0
- ;
- ; Change Logs:
- ; Date Author Notes
- ; 2021-11-16 Dystopia the first version
- ;
- ;-----------------------------------------------------------
- ; interrupt and execption handler for C6000 DSP
- ;-----------------------------------------------------------
- ;-----------------------------------------------------------
- ; macro definition
- ;-----------------------------------------------------------
- DP .set B14
- SP .set B15
- ;
- ;-----------------------------------------------------------
- ;
- .include "contextinc.asm"
- ;-----------------------------------------------------------
- ; global function
- ;-----------------------------------------------------------
- .global _nmi_handler
- .global _bad_handler
- .global _int4_handler
- .global _int5_handler
- .global _int6_handler
- .global _int7_handler
- .global _int8_handler
- .global _int9_handler
- .global _int10_handler
- .global _int11_handler
- .global _int12_handler
- .global _int13_handler
- .global _int14_handler
- .global _int15_handler
- ;
- ;-----------------------------------------------------------
- ;
- ;-----------------------------------------------------------
- ; extern function
- ;-----------------------------------------------------------
- .ref hw_nmi_handler
- .ref hw_bad_handler
- .ref hw_int4_handler
- .ref hw_int5_handler
- .ref hw_int6_handler
- .ref hw_int7_handler
- .ref hw_int8_handler
- .ref hw_int9_handler
- .ref hw_int10_handler
- .ref hw_int11_handler
- .ref hw_int12_handler
- .ref hw_int13_handler
- .ref hw_int14_handler
- .ref hw_int15_handler
- .ref rt_hw_process_exception
- .ref rt_interrupt_context_restore
- ;
- ;-----------------------------------------------------------
- ;
- ;-----------------------------------------------------------
- ; interrupt macro definition
- ;-----------------------------------------------------------
- RT_INTERRUPT_ENTRY .macro
- SAVE_ALL IRP,ITSR
- .endm
- RT_CALL_INT .macro __isr
- B __isr
- ADDKPC $1 ,B3,4
- $1:
- B .S1 rt_interrupt_context_restore
- NOP 5
- .endm
- ;-----------------------------------------------------------
- ; execption macro definition
- ;-----------------------------------------------------------
- RT_EXECPTION_ENTRY .macro
- SAVE_ALL NRP,NTSR
- .endm
- RT_EXECPTION_EXIT .macro
- RESTORE_ALL NRP,NTSR
- B .S2 NRP ; return from execption
- NOP 5
- .endm
- ;
- ;-----------------------------------------------------------
- ;
- .sect ".text"
- ;
- ;-----------------------------------------------------------
- ;
- ;-----------------------------------------------------------
- ; handler NMI interrupt
- ;-----------------------------------------------------------
- _nmi_handler:
- ;{
- RT_EXECPTION_ENTRY
- MVC .S2 EFR,B2
- CMPEQ .L2 1,B2,B2
- || MVC .S2 TSR,B1
- MV .D1X B2,A2
- || CLR .S2 B1,10,10,B1
- MVC .S2 B1,TSR
- [!A2] MVKL .S1 rt_hw_process_exception,A0
- ||[B2] MVKL .S2 rt_hw_software_exception,B1
- [!A2] MVKH .S1 rt_hw_process_exception,A0
- ||[B2] MVKH .S2 rt_hw_software_exception,B1
- [!B2] B .S2X A0
- [B2] B .S2 B1
- [!B2] ADDAW .D2 SP,2,B1
- [!B2] MV .D1X B1,A4
- ADDKPC .S2 ret_from_trap,B3,2
- ;
- ; return from trap
- ;
- ret_from_trap:
- MV .D2X A4,B0
- [!B0] MVKL .S2 ret_from_exception,B3
- [!B0] MVKH .S2 ret_from_exception,B3
- [!B0] BNOP .S2 B3,5
- ;
- ; return from trap restore exception context
- ;
- ret_from_exception:
- RT_EXECPTION_EXIT
- ;
- rt_hw_software_exception:
- MVKL .S1 rt_hw_process_exception,A0
- MVKH .S1 rt_hw_process_exception,A0
- B .S2X A0
- ADDAW .D2 SP,2,B1
- MV .D1X B1,A4
- ADDKPC .S2 ret_from_trap,B3,2
- NOP 2
- ;}
- ;-----------------------------------------------------------
- ; handler bad interrupt
- ;-----------------------------------------------------------
- _bad_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_bad_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT4 interrupt
- ;-----------------------------------------------------------
- _int4_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int4_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT5 interrupt
- ;-----------------------------------------------------------
- _int5_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int5_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT6 interrupt
- ;-----------------------------------------------------------
- _int6_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int6_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT7 interrupt
- ;-----------------------------------------------------------
- _int7_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int7_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT8 interrupt
- ;-----------------------------------------------------------
- _int8_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int8_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT9 interrupt
- ;-----------------------------------------------------------
- _int9_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int9_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT10 interrupt
- ;-----------------------------------------------------------
- _int10_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int10_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT11 interrupt
- ;-----------------------------------------------------------
- _int11_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int11_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT12 interrupt
- ;-----------------------------------------------------------
- _int12_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int12_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT13 interrupt
- ;-----------------------------------------------------------
- _int13_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int13_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT14 interrupt
- ;-----------------------------------------------------------
- _int14_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int14_handler
- ;}
- ;-----------------------------------------------------------
- ; handler INT15 interrupt
- ;-----------------------------------------------------------
- _int15_handler:
- ;{
- RT_INTERRUPT_ENTRY
- RT_CALL_INT hw_int15_handler
- ;}
- .end
|