⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq.s

📁 专业汽车级嵌入式操作系统OSEK的源代码
💻 S
字号:


@
@  IRQ wrappers.
@
@  These call a C function.
@  We switch to supervisor mode and reenable interrupts to allow nesting.
@
@

  .text
  .code 32
  .align   2

@
@  Macros
@

  .macro   irq_wrapper_nested, C_function

@ Save registers on stack
  sub r14,r14,#4 @ fix up for return
  stmfd r13!,{r14}
  mrs  r14,spsr
  stmfd r13!,{r14}

@ Acknowledge the IVR for debugging to support Protected Mode
  ldr   r14,=0xFFFFF100
  str   r14,[r14]

 @ swich to system mode and enable IRQ, but not FIQ
  msr cpsr_c,#0x5F

  @push stack
  stmfd r13!,{r0-r12,r14}


@ Call the function
  ldr r0,=\C_function
  mov lr,pc
  bx  r0

  @ pop stack
   ldmfd r13!,{r0-r12,r14}

 @ swich to interrupt mode and disable IRQs and FIQs
  msr cpsr_c,#0xD2

@End of interrupt by doing a write to AIC_EOICR
  ldr  r14,=0xFFFFF130
  str  r14,[r14]

  @ Unstack the saved spsr
  ldmfd r13!,{r14}
  msr  spsr_all,r14

  @ Return from interrupt (unstacking the modified r14)
  ldmfd r13!,{pc}^

  .endm

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  .macro   irq_wrapper_not_nested, C_function

@ Save registers on stack
  sub r14,r14,#4 @ fix up for return
  stmfd r13!,{r0-r12,r14}

@ Acknowledge the IVR for debugging to support Protected Mode
  ldr   r14,=0xFFFFF100
  str   r14,[r14]

@ Call the function
  ldr r0,=\C_function
  mov lr,pc
  bx  r0

@End of interrupt by doing a write to AIC_EOICR
  ldr  r14,=0xFFFFF130
  str  r14,[r14]

  @ Return from interrupt (unstacking the modified r14)
  ldmfd r13!,{r0-r12,pc}^

  .endm

@
@	ISRs
@
@


	.global spurious_isr
	.global default_isr
	.global default_fiq
default_fiq:
spurious_isr:
default_isr:
	b default_isr

  .extern systick_isr_C
  .global systick_isr_entry
systick_isr_entry:
  irq_wrapper_nested systick_isr_C

  .extern systick_low_priority_C
  .global systick_low_priority_entry
systick_low_priority_entry:
  irq_wrapper_nested systick_low_priority_C

  .extern udp_isr_C
  .global udp_isr_entry
udp_isr_entry:
  irq_wrapper_nested udp_isr_C

  .extern spi_isr_C
  .global spi_isr_entry
spi_isr_entry:
  irq_wrapper_nested spi_isr_C

  .extern twi_isr_C
  .global twi_isr_entry
twi_isr_entry:
  irq_wrapper_nested twi_isr_C
  
  .extern sound_isr_C
  .global sound_isr_entry
sound_isr_entry:
  irq_wrapper_nested sound_isr_C

  .extern uart_isr_C_0
  .global uart_isr_entry_0
uart_isr_entry_0:
  irq_wrapper_nested uart_isr_C_0

  .extern uart_isr_C_1
  .global uart_isr_entry_1
uart_isr_entry_1:
  irq_wrapper_nested uart_isr_C_1

  .extern nxt_motor_isr_C
  .global nxt_motor_isr_entry
nxt_motor_isr_entry:
  irq_wrapper_nested nxt_motor_isr_C


  .extern i2c_timer_isr_C
  .global i2c_timer_isr_entry
i2c_timer_isr_entry:
  irq_wrapper_nested i2c_timer_isr_C

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -