打印
[KungFu32位 MCU]

KF32-c语言使用-中断函数

[复制链接]
896|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HuangHongLun|  楼主 | 2020-8-25 10:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
3.1 简介
中断处理用来使软件操作与实时发生的事件同步。当发生中断时,软件的正常执行流程被打断,调用专门的函数来处理事件。当中断处理结束时,恢复先前的现场信息并继续正常执行流程。
KF32 器件支持多个内部和外部中断源。另外,允许高优先级中断中断任何正在处理的低优先级中断。
KF32 编译器完全支持在 C 或汇编代码中进行中断处理。

使用特权

评论回复
沙发
HuangHongLun|  楼主 | 2020-8-25 19:35 | 只看该作者
3.2.1 中断函数现场保护
中断处理函数用于实现现场保护和恢复,以确保从中断返回时,程序现场恢复进入中断前的状态。
响应中断时,KF32 硬件约定将 R0、R1、R2、R3、R4、R13(LR)、返回地址(当前 PC 值)和程序状态寄存器(xPSR)压入当前激活的堆栈空间中,因此不需要主动保存它们。而其他被中断代码使用到的寄存器会被编译器进行入栈保护。

使用特权

评论回复
板凳
HuangHongLun|  楼主 | 2020-8-25 19:37 | 只看该作者
3.2.2 中断处理程序
函数通过 interrupt 属性标记为中断处理程序函数。
默认下,KF32 编译器已将中断向量表转为中断向量配置文件(vector.c 或vector.asm)。可根据喜好修改文件中对应位置的符号为函数名,或修改对应符号为自定义中断处理函数名。示例如下。
如 T1 中断的入口地址被配置为“.long _T1_exception”,则其中断处理程序写为:
void __attribute__((interrupt)) _T1_exception (void)
{
}
或用户修改中断向量配置文件将_T1_exception 修改为自定义函数名。
KF32 中断处理函数必须遵守下列规定:
1、返回的数据类型必须是 void;
2、不能有参数;
3、必须使用__attribute__((interrupt))声明;
4、函数地址必须与中断向量一致,即函数名称必须与 vector.c 文件中指定位置的向量名称一致;
5、既可以被中断处理程序访问也可以被其他函数访问的全局变量应定义为volatile
6、中断入口会自动保存寄存器(R0、R1、R2、R3、R4、R13),并在中断返回时恢复;
7、使用的中断必须建立该中断函数,否则芯片将运行错误。


使用特权

评论回复
地板
HuangHongLun|  楼主 | 2020-8-25 19:38 | 只看该作者
3.2.3 中断向量配置
KF32 系列支持多个内核中断和多个外设中断,256 个向量的中断向量表参KF32 芯片数据手册。默认情况下使用的中断向量表的起始单元位于存储器的0x0000_0000 地址处。当响应中断时,处理器自动从向量表中的相应位置加载中断向量入口地址。所以中断处理函数的地址必须为中断向量中对应的地址。
中断向量配置文件中的代码将被链接器分配到芯片起始地址 0x0 处,其中每一中断类型分别对应各自地址。若用户程序未使用或未全部使用中断处理,则可修改中断向量配置文件,以节省内存空间。
中断向量配置文件的修改需遵循以下两点:
1、0x0 地址和 0x4 地址的向量不可删除,即初时 SP 和复位向量不可删除;
2、删除向量的操作需从后向前开始,不可跳过,否则无法正确进入中断服务程序;【如果应用中重映射中断向量入库,不能删除,必须满 256 地址空间占用,否则空闲地址存在的代码因向量表切换会获取错误的内容并执行错乱。】
中断向量配置文件修改示例说明:
用户程序使用定时器 1 全局中断(T1,向量地址 0x0000_0064)和定时器 5 全局中断(T5,向量地址 0x0000_0074 ),而其他中断向量均未使用。则用户可将中断向量配置文件中“ .long_T5_exception”和“.weak_T5_exception”之后的几行信息删除,而之前的中断向量不可修改,包括未使用的中断向量。

3.2.4 中断使用的变量
中断和用户代码同时访问的变量必须使用 volatile 声明,如:volatile int var;否则因为函数的调用关系未存在管理,独自使用范围的优化可能操作参数无效的现象。




使用特权

评论回复
5
zeshoufx| | 2020-8-27 09:21 | 只看该作者
谢谢分享【KF32-c语言使用-中断函数】

使用特权

评论回复
6
单片小菜| | 2020-9-1 12:22 | 只看该作者

谢谢分享【KF32-c语言使用-中断函数】我也开始学习一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

438

帖子

2

粉丝