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

View Code
#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

View Code
#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 的配置。文件请到这里下载。

原文地址:https://www.cnblogs.com/xiangtailiang/p/2663251.html