LPC2114/EASYARM2100 FIQ快速中断例程
来源:互联网 发布:java 创建自定义菜单 编辑:程序博客网 时间:2024/06/11 02:56
FIQ快速中断只有一个中断服务程序,如果设置了多个中断作为FIQ快速中断,那么,需要在中断服务程序里面
读取VICFIQStatus寄存器来判断是哪个中断请求被激活了。
要使用FIQ快速中断,还要让ARM开启FIQ的支持,即在EasyARM2100的工程模板里面startup.s文件中设置系统模式
堆栈的地方开启FIQ支持,把原来的MSR CPSR_c, #0xdf改为MSR CPSR_c, #0x1f就可以了。
EasyARM2100的工程模板里面有个target.c文件,在这个文件的FIQ_Exception函数里写你要的中断服务代码就可以了
每一个终端服务程序的末尾都要记得清除刚才的中断标志,否则,不能相应下一个中断
测试例程:
1.修改startup.s
2.在FIQ_Excepiton函数里编写中断服务函数
下面的例子设置T0为FIQ,0.5s定时,让LED1灯闪烁。如果你看到灯闪烁了,说明FIQ应用成功。
完整的main.c文件:
#include "config.h"
#define LED1CON (0x01<<22)
#define LED1_ON() IO0CLR=LED1CON
#define LED1_OFF() IO0SET=LED1CON
void TOInit(void)
{
T0TC=0;
T0PR=0;
T0MCR=0x03;
T0MR0=Fpclk/3;
T0IR=0x01;
T0TCR = 0x03;
T0TCR = 0x01;
}
int main (void)
{// add user source code
VICIntSelect=(0X01<<4);
VICIntEnable =(0X01<<4);
LED1_OFF();
TOInit();
while(1);
return 0;
}
/***************************************************/
中断处理函数:
#define LED1CON (0x01<<22)
#define LED1_ON() IO0CLR=LED1CON
#define LED1_OFF() IO0SET=LED1CON
void FIQ_Exception(void)
{
if((IO0PIN&LED1CON)==0)
{
LED1_OFF();
}
else
{
LED1_ON();
}
T0IR=0x01;//这一句非常重要,我一开始就忘了写这一句,结果就是,灯亮了就一直亮不会灭。但是单步调试的时候发现是可以灭的。于是才想到可能是中断标志没有清除!
}
好了,run......
- LPC2114/EASYARM2100 FIQ快速中断例程
- LPC2114/EASYARM2100中断嵌套设计
- FIQ(快速中断请求)和IRQ(外部中断请求)
- Keil for arm 关于enit0 快速中断(FIQ)的响应
- 61单片机项目 - FIQ中断
- FIQ快中断,为什么叫快中断?
- LPC2114中向量中断控制器(VIC)的操作方法
- IRQ和FIQ中断的区别
- IRQ和FIQ中断的区别
- 凌阳16位单片机之FIQ中断
- 凌阳16位单片机之FIQ中断
- IRQ和FIQ中断的区别
- IRQ和FIQ中断的区别
- ARM的irq和fiq中断以及中断嵌套
- __irq声明IRQ和FIQ中断处理函数
- __irq声明IRQ和FIQ中断处理函数
- ARM 中断--IRQ and FIQ配置--外部配置
- ISR 中断服务例程
- 好长时间没写技术blog了
- SQL Server应用程序中的高级SQL注入收藏
- 轻松实现Apache,Tomcat集群和负载均衡
- ajax有关网站
- 在Linux(RedHat E3)上架设FTP服务器
- LPC2114/EASYARM2100 FIQ快速中断例程
- 编写通用的ASP防SQL注入攻击程序
- MFC数据类型(Data Type)
- silverlight
- XMPP
- C# 里怎样得到当前执行的函数名,当前代码行,源代码文件名
- webwork中解决action跳转到action丢失参数的问题
- 跟学术不相称的道德水平
- 深度优先迷宫生成类