如何使用codewarrior处理ARM微控制器的中断??在HCs08处理器中,我这样做,例如:
interrupt VectorNumber_Vsci1rx void ISR_name(void)
{
.....Do something......
}当然,在启用中断之后...但是我不知道如何在使用codewarrior或KDS的ARM处理器中处理这些中断
发布于 2015-04-14 23:23:44
我使用的是Kinetis K20 (K20DX128VLH5)和Codewarrior for MCU,并使用了这种方法。要将某个方法声明为事件的处理程序,请查找应随任何项目自动生成的类kinetis_sysinit.c。在那里,您将发现一个方法,它看起来像我发布的以下代码。这是中断向量表。如果您使用的是K20子系列中的内容,请下载K20 Sub-Family reference manual。从ref手册的第62页开始,您可以找到哪个矢量对应于哪个模块。
注意:根据您使用的Kinetis类型(K20、K40和K60等),该过程可能会有所不同。查看设备的参考手册,找出哪些中断向量对应哪些中断向量。
在下面的代码中,您可以看到我添加了一些自己的方法来处理GPIO、UART和计时器中断。
/* The Interrupt Vector Table */
void (* const InterruptVector[])() __attribute__ ((section(".vectortable"))) =
{
/* Processor exceptions */
(void(*)(void)) &_estack, // Vector 0
__thumb_startup, // Vector 1
NMI_Handler, // Vector 2
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
0,
0,
0,
0,
SVC_Handler,
DebugMonitor_Handler,
0,
PendSV_Handler,
SysTick_Handler,
/* Interrupts */
Default_Handler, // Vector 16
Default_Handler, // Vector 17
Default_Handler, // Vector 18
Default_Handler, // Vector 19
Default_Handler, // Vector 20
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler, // Vector 30
Default_Handler,
(tIsrFunc)uart_status_handler, // 32 is UART0 status sources
Default_Handler, // 33 is UART0 error sources
Default_Handler,
Default_Handler, // Vector 35
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler, // Vector 40
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler, // Vector 45
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler, // Vector 50
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
(tIsrFunc)timer_handler, // Vector 55, LPTMR
Default_Handler, //(tIsrFunc)portA_button_handler, // Vector 56, port A pin detect
Default_Handler,
(tIsrFunc)portC_button_handler, // Vector 58, port C pin detect
Default_Handler,
Default_Handler,
Default_Handler,
};在同一个类中,请确保还在外部声明您的方法。在顶部的tIsrFunc类型定义结构的正下方,编写类似这样的代码:
extern void timer_handler(void);
extern void portC_button_handler(void);
extern void uart_status_handler(void);发布于 2015-09-03 03:45:52
您使用的是什么版本的CodeWarrior?您使用的是哪个工具集?如果您使用的是GCC工具集,则中断名称是不同的,并且与默认处理程序有弱关联。只需创建一个具有正确名称的中断,它就会工作。如果您没有使用GCC工具集,则必须在kinetis_sysinit.c中编辑数组。
发布于 2019-03-03 02:15:20
我手头没有Codewarrior或KDE。但是所有遵循ARM-CMSIS标准的ARM控制器都是这样的。
控制器的所有中断处理程序都已定义,但带有__weak链接。所以,你所要做的就是创建一个同名的函数。
例如,比较FRDM-K22板的MCUXpresso开发工具包中的文件devices\MK22F51212\arm\startup_MK22F51212.s:https://mcuxpresso.nxp.com/en/dashboard
https://stackoverflow.com/questions/29498485
复制相似问题