找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6859|回复: 0
打印 上一主题 下一主题
收起左侧

IAR for arm 中断处理写法

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-12 22:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
方法1:

启动文件中:(默认启动文件也是这样)

org 0x18
ldr pc,[pc,#-0xFF0] ; 直接跳转到用户中断处理函数

直接写用户中断函数
__irq __arm void Tmr0_IntOnMR0_isr(void)
{
............
}

__irq __arm void Tmr1_IntOnMR0_isr(void)
{
............
}


方法2.

启动文件中:(默认启动文件也是这样)

org 0x18
ldr pc,=irq_handler ;跳转到公共中断处理函数,再分支到具体功能的中断处理函数中


__irq __arm void irq_handler (void)//公共中断处理函数,检查VICVectAddr是否为空
{
void (*interrupt_function)();
unsigned int vector;

vector = VICVectAddr; // Get interrupt vector.
interrupt_function = (void(*)())vector;
if(interrupt_function != NULL)
{
interrupt_function(); // Call vectored interrupt function.
}
else
{
VICVectAddr = 0; // Clear interrupt in VIC.
}
}


具体功能的中断处理函数
void Tmr0_IntOnMR0_isr(void)
{
............
}

void Tmr1_IntOnMR0_isr(void)
{
............
}


方法3.

使用#pragma vector不管启动文件如何写法,

#define IRQV 0x18
#pragma vector=IRQV
__irq __arm void irq_handler (void)
{
void (*interrupt_function)();
unsigned int vector;

vector = VICVectAddr; // Get interrupt vector.
interrupt_function = (void(*)())vector;
if(interrupt_function != NULL)
{
interrupt_function(); // Call vectored interrupt function.
}
else
{
VICVectAddr = 0; // Clear interrupt in VIC.
}
}

具体功能的中断处理函数
void Tmr0_IntOnMR0_isr(void)
{
............
}

void Tmr1_IntOnMR0_isr(void)
{
............
}

//================================================================================================
ldr pc, [pc,#-0xFF0]是直接copy的,是不好看。
应该去掉注释,写成 ldr pc,[pc,#-0xFF0]。

org 0x18
ldr pc, [pc,#-0xFF0] ; 直接跳转到用户中断处理函数
此时PC = 0x18+8 = 0x20
0x20 - 0xff0 = 0xFFFFF030
0xFFFFF030 正是 VICVectAddr
//================================================================================================
LPC23XX,LPC24XX的VICVectAddr地址是0xFFFFFF00 ,也没关系,用
org 0x18
LDR PC, [PC, #-0x0120] ; Vector from VicVectAddr
道理是一样的:
(0x18+0x08)-0x0120 = 0x20 - 0x0120 = 0xFFFFFF00



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表