Vector_table.S 以arm cortex-M系列的启动流程为例,arch/arm/core/cortex_m:
vector_table.S: 定义了中断向量表_vector_table。其中arm cortex-M规定0x0地址存放栈的起始地址(栈顶)。0x4开始存放reset handler,…
没看到定义外部中断的地址
上电后跳转至z_arm_reset函数,进入reset.S。
Reset.S 目前大部分的宏定义都没打开。这里关注下通用的一些流程:
movs.n r0, #_EXC_IRQ_DEFAULT_PRIO msr BASEPRI, r0 设置BASEPRI寄存器, 中断的base prioriity, 低于或等于该优先级的中断都会被屏蔽。
这里#_EXC_IRQ_DEFAULT_PRIO宏展开为3,说明中断优先级只能配置为0/1/2。
ldr r0, =z_interrupt_stacks ldr r1, =CONFIG_ISR_STACK_SIZE + MPU_GUARD_ALIGN_AND_SIZE adds r0, r0, r1 msr PSP, r0 // write r0 to PSP mrs r0, CONTROL // read CONTROL to r0 movs r1, #2 orrs r0, r1 /* CONTROL_SPSEL_Msk */ msr CONTROL, r0 // write 0x2 to CONTROL isb bl z_arm_prep_c 1....