• 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 }
  • 相关阅读:
    做事的底线和逻辑
    我在华为的十年----徐家俊
    华为的冬天
    如何当好一个师长--林彪
    Base64 的那些事儿
    流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
    软件目的需求开发与管理
    车载行业认证资质
    tcpdump抓包分析 https://www.01hai.com/note/av263669
    packages.conifg
  • 原文地址:https://www.cnblogs.com/xiangtailiang/p/2663277.html
Copyright © 2020-2023  润新知