K60中断向量表问题

  • 格式:doc
  • 大小:25.50 KB
  • 文档页数:1

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;a
以上两句是在程序初始化中的语句。

此处是在RAM中改变指向(初始都是指向flauts)
在isr.h文件中的是改变flash中的指向。

例如:
#undef VECTOR_67
#define VECTOR_67 sio_irq
#undef VECTOR_68
#define VECTOR_68 sio_irq。