AT91SAM7SE应用 - IRQ
最近在使用 ATMEL 的AT91SAM7SE256 来处理FPGA 输出的数据,然后再把数据发送到PC机端。
既利用了FPGA 高速数字信号处理的优势,又发挥了ARM处理器对控制类信号的简洁处理。。
在使用的过程中,感觉AT91SAM7SE256的资料比较少,所以在这里我把自己测试过的代码放上来,提供下载。。
开发环境如下所示:
IDE-Version:
μVision V4.23.00.0
Copyright (C) 2011 ARM Ltd and ARM Germany GmbH. All rights reserved.
Tool Version Numbers:
Toolchain: MDK-ARM Standard Version: 4.23
Toolchain Path: D:\Keil\ARM\BIN40
C Compiler: Armcc.Exe V4.1.0.894
Assembler: Armasm.Exe V4.1.0.894
Linker/Locator: ArmLink.Exe V4.1.0.894
Librarian: ArmAr.Exe V4.1.0.894
Hex Converter: FromElf.Exe V4.1.0.894
CPU DLL: SARM.DLL V4.23
Dialog DLL: DARMATS.DLL V1.20
Target DLL: UL2ARM.DLL V1.67
Dialog DLL: TARMATS.DLL V1.20
外部信号上升沿出发的IRQ0中断。
irq.h
#ifndef IRQ_H #define IRQ_H #include "AT91SAM7SE512.h" #include "lib_AT91SAM7SE512.h" #include "Board.h" extern uint32 status_irq; extern __irq void at91_IRQ0_handler(void); extern void irq0_init(void); #endif
irq.c
#include "irq.h" static uint32 status_irq = 0; //__irq void at91_IRQ0_handler(void) __irq void at91_IRQ0_handler(void) { status_irq++; AT91F_AIC_ClearIt(AT91C_BASE_AIC, AT91C_ID_IRQ0); AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); } #define IRQ0_INTERRUPT_LEVEL 2 void irq0_init(void) { AT91PS_AIC pAic; // Load System pAic Base address pAic = AT91C_BASE_AIC; // First, enable the clock of the PIOB AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB); // open external IRQ0 interrupt AT91F_PIO_CfgPeriph(AT91C_BASE_PIOB, 1 << 20, 0); // open external IRQ0 interrupt AT91F_AIC_ConfigureIt(pAic, AT91C_ID_IRQ0, IRQ0_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_POSITIVE_EDGE, at91_IRQ0_handler); AT91F_AIC_EnableIt(pAic, AT91C_ID_IRQ0); AT91F_AIC_Trig(pAic, AT91C_ID_IRQ0); }
头文件AT91SAM7SE512.h为μVision V4.23.00.0自带的
头文件 lib_AT91SAM7SE512.h 为 ATMEL提供的一个库文件,里面有一些使用的函数来实现对AT91SAM7SE256 的配置。文件请到这里下载。