AT91SAM7SE应用 -- PIT 周期中断(1ms)


最近在使用 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

 

下面是PIT模块的控制的代码,能够产生一定时间周期的中断。

 

pit.h

View Code
#ifndef PIT_H
    #define PIT_H

    #include "AT91SAM7SE512.h"
    #include "lib_AT91SAM7SE512.h"
    #include "Board.h"


    extern __irq void AT91F_SysHandler(void);
    ////temp=x*(MCK/16) x的单位为秒
    extern void pit_init(unsigned int temp);

#endif

 

pit.c

View Code
 1 #include "pit.h"
 2 
 3 //中断服务函数
 4 __irq void AT91F_SysHandler(void)
 5 {
 6     static int StStatus;
 7     StStatus++;
 8     // Read the system timer status register
 9     if (AT91F_PITGetStatus(AT91C_BASE_PITC))
10     {
11         AT91F_PITGetPIVR(AT91C_BASE_PITC);
12     }
13     AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
14 }
15 
16 
17 
18 
19 //temp=x*(MCK/16) x的单位为秒 MCK为系统的时钟
20 void pit_init(unsigned int temp)
21 {
22     //unsigned int temp = x*(MCK/16);
23     AT91F_PITC_CfgPMC();
24     AT91C_BASE_PITC->PITC_PIMR = temp; //x*(MCK/16) x的单位为秒     2995时为1ms
25     AT91C_BASE_PITC->PITC_PIMR |= AT91C_PITC_PITEN;
26     //AT91F_PITInit(AT91C_BASE_PITC, SYS_TMR_PER, (MCK / 1000000));
27     AT91F_PITEnableInt(AT91C_BASE_PITC);
28 
29     // Read the system timer status register
30     AT91F_PITGetPIVR(AT91C_BASE_PITC);
31 
32     AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,  // AIC base address
33     AT91C_ID_SYS,  // System peripheral ID
34     AT91C_AIC_PRIOR_HIGHEST,  // Max priority
35     AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,  // Level sensitive
36     AT91F_SysHandler);
37 
38     AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);
39     
40 }
posted @ 2012-08-30 10:56  xiangtailiang  阅读(433)  评论(0编辑  收藏  举报