mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 20:51:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #include <xtensa/coreasm.h>
 | |
| #include <xtensa/corebits.h>
 | |
| #include <xtensa/config/system.h>
 | |
| #include "freertos/xtensa_context.h"
 | |
| #include "esp_private/panic_reason.h"
 | |
| #include "sdkconfig.h"
 | |
| #include "soc/soc.h"
 | |
| #include "soc/dport_reg.h"
 | |
| 
 | |
| #ifndef CONFIG_FREERTOS_UNICORE
 | |
| 
 | |
| #define L5_INTR_STACK_SIZE  12
 | |
| #define L5_INTR_A2_OFFSET   0
 | |
| #define L5_INTR_A3_OFFSET   4
 | |
| #define L5_INTR_A4_OFFSET   8
 | |
|     .data
 | |
| _l5_intr_stack:
 | |
|     .space      L5_INTR_STACK_SIZE
 | |
| 
 | |
|     .section .iram1,"ax"
 | |
|     .global     xt_highint5
 | |
|     .type       xt_highint5,@function
 | |
|     .align      4
 | |
| xt_highint5:
 | |
| 
 | |
|     movi    a0, xt_highint5_read_apb
 | |
|     l32i    a0, a0, 0
 | |
|     bnez    a0, .read_apb_reg
 | |
| 
 | |
| // Short interrupt
 | |
|     movi a0, 0
 | |
|     wsr a0, CCOMPARE2
 | |
|     esync
 | |
| 
 | |
|     rsr     a0, EXCSAVE_5 // restore a0
 | |
|     rfi     5
 | |
| 
 | |
| 
 | |
| 
 | |
| // read APB reg 10 time.
 | |
| .read_apb_reg:
 | |
|     movi    a0, _l5_intr_stack
 | |
|     s32i    a2, a0, L5_INTR_A2_OFFSET
 | |
|     s32i    a3, a0, L5_INTR_A3_OFFSET
 | |
|     s32i    a4, a0, L5_INTR_A4_OFFSET
 | |
| 
 | |
|     movi    a4, 10         // count of reading
 | |
|     movi    a0, 0x3ff40078 // read APB reg
 | |
|     l32i    a2, a0, 0
 | |
| .loop_read_apb_reg:
 | |
|     l32i    a3, a0, 0
 | |
|     bne     a3, a2, .need_set_apb_test_result
 | |
|     addi    a4, a4, -1
 | |
|     l32i    a2, a0, 0
 | |
|     bnez    a4, .loop_read_apb_reg
 | |
|     j       1f
 | |
| .need_set_apb_test_result:
 | |
|     movi    a0, apb_intr_test_result // set fail
 | |
|     movi    a2, 0
 | |
|     s32i    a2, a0, 0
 | |
|     memw
 | |
| 1:
 | |
|     movi    a0, _l5_intr_stack
 | |
|     l32i    a2, a0, L5_INTR_A2_OFFSET
 | |
|     l32i    a3, a0, L5_INTR_A3_OFFSET
 | |
|     l32i    a4, a0, L5_INTR_A4_OFFSET
 | |
|     rsync
 | |
| .L_xt_highint5_exit:
 | |
|     rsr     a0, EXCSAVE_5                   // restore a0
 | |
|     rfi     5
 | |
| 
 | |
| /* The linker has no reason to link in this file; all symbols it exports are already defined
 | |
|    (weakly!) in the default int handler. Define a symbol here so we can use it to have the
 | |
|    linker inspect this anyway. */
 | |
| 
 | |
|     .global ld_include_test_dport_xt_highint5
 | |
| ld_include_test_dport_xt_highint5:
 | |
| #endif // CONFIG_FREERTOS_UNICORE
 | 
