K60中断向量表问题K60中断向量表问题
K60中断向量表问题总结
1、 程序在flash中调试,将向量表和程序都下载到flash中,程序执行中若产生中断,因为
到RAM中取地址比到flash中快,所以需要把向量表拷贝到RAM中。
2、 若程序在RAM中调试,程序和向量表直接下载到RAM中,所以不用拷贝。 3、 配置中断
set_irq_priority (51, 6); 设定中断优先级(优先级一般选中间,不要太高也不要太低)
enable_irq(51); //使能串口收发中断
enable_irq(52);
中断使能分三个等级:...
K60中断向量
问题
K60中断向量表问题总结
1、 程序在flash中调试,将向量表和程序都下载到flash中,程序执行中若产生中断,因为
到RAM中取地址比到flash中快,所以需要把向量表拷贝到RAM中。
2、 若程序在RAM中调试,程序和向量表直接下载到RAM中,所以不用拷贝。 3、 配置中断
set_irq_priority (51, 6); 设定中断优先级(优先级一般选中间,不要太高也不要太低)
enable_irq(51); //使能串口收发中断
enable_irq(52);
中断使能分三个等级:首先是总中断使能
例句来自modbus---arm-cm.4 port.c中调用
/*!< Macro to enable all interrupts. */
#define EnableInterrupts asm(" CPSIE i");
/*!< Macro to disable all interrupts. */
#define DisableInterrupts asm(" CPSID i");
具体参见cortex M3 P42
然后是开具体一种中断 例如串口3中断(使用减16以后数)
enable_irq(51); //使能串口收发中断
enable_irq(52);
最后是寄存器中开中断。
三个等级中断必须全部都使能,才是开了中断。
一般在初始化前先关中断,初始化最后开中断。典型例modbus
4、 中断指向
例如,串口3中断
__VECTOR_RAM[67] = (uint32)sio_irq;
//注意:必须重定向中断向量表到RAM中,这两句才正确,
__VECTOR_RAM[68] = (uint32)sio_irq;
以上两句是在程序初始化中的语句。此处是在RAM中改变指向(初始都是指向flauts) 在isr.h文件中的是改变flash中的指向。
例如:
#undef VECTOR_67
#define VECTOR_67 sio_irq
#undef VECTOR_68
#define VECTOR_68 sio_irq
本文档为【K60中断向量表问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。