首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kinetis中断处理程序codewarrior

Kinetis中断处理程序codewarrior
EN

Stack Overflow用户
提问于 2015-04-08 02:22:13
回答 3查看 1.2K关注 0票数 0

如何使用codewarrior处理ARM微控制器的中断??在HCs08处理器中,我这样做,例如:

代码语言:javascript
复制
interrupt VectorNumber_Vsci1rx void ISR_name(void) 
{
.....Do something......
}

当然,在启用中断之后...但是我不知道如何在使用codewarrior或KDS的ARM处理器中处理这些中断

EN

回答 3

Stack Overflow用户

发布于 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和计时器中断。

代码语言:javascript
复制
/* 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类型定义结构的正下方,编写类似这样的代码:

代码语言:javascript
复制
extern void timer_handler(void);
extern void portC_button_handler(void);
extern void uart_status_handler(void);
票数 0
EN

Stack Overflow用户

发布于 2015-09-03 03:45:52

您使用的是什么版本的CodeWarrior?您使用的是哪个工具集?如果您使用的是GCC工具集,则中断名称是不同的,并且与默认处理程序有弱关联。只需创建一个具有正确名称的中断,它就会工作。如果您没有使用GCC工具集,则必须在kinetis_sysinit.c中编辑数组。

票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29498485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档