中断的基础知识
分享链接:
程序在正常执行代码时发生触发事件,打断了正在执行的程序,转到事件处理程序中去执行,完成后返回事件触发时运行的程序处。
中断的基础知识
ARM Corex-MX的NVIC
ARM Corex-MX中断处理过程
➜ 中断向量表中相应中断处找到用户中断服务函数地址
➜ 执行用户中断服务函数
S32K SDK中断处理
具体流程详解
1. 在Startup.c 中把s_vectors 指向 MCU的NVIC 的Vector Table Offset Register (VTOR)
2. 从连接文件 S32K1xx_flash.ld 文件中看到VECTOR_TABLE 的定义地址,isr_vector 由启动文件中定义
3. 在startup.c 中把Flash 中的中断向量表拷贝到 __VECTOR_RAM (在ld文件中定义在m_data)中
4. 在startup.c 中再通过s_vectors 把 MCU 的VTOR 指向RAM 中的断向量表
5. 中断组件中的InstallHandler 即修改 VECTOR_RAM 中中断地址指向自定义中断处理函数
6. 外设模块的 Callback 应用中断,在配置完成后如置配了相关Callback,就会生成包含Callback的配置结构体
以下以Uart为例,Uart_pal component 设置
7. 在模块的初始化函数中底层会调用 INT_SYS_InstallHandler 来把 VECTOR_RAM 中中断地址指向SDK定义的 g_lpuartIsr 中
8. 模块的初始化函数中层层重定义 g_lpuartIsr 直到调用定义的Callback 函数