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 }