⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr

📁 FPGA中niosII的应用实例--包括PIO
💻
字号:
/*
 * 声明:本范例源于书籍‘NiosII软件架构解析’
 * 作者:蔡伟纲
 * 博客地址: http://NiosII.cublog.cn 
 *
 * 一、功能: 中断演示代码.
 * 
 * 二、相关说明:
 *    由于NiosII IDE的ISS(Instruction Set Simulation)支持JTAG_UART和
 *    定时器的仿真功能,所以该源码可以运行于ISS模式,无须任何硬件开发板的支持.
 * 
 * 三、运行前提:
 *    1. 定时器必须具有周期中断功能;
 *    2. 定时器命名为: SYS_CLK_TIMER
*/

#include <stdio.h>
#include "system.h"
#include <sys/alt_irq.h>
#include "altera_avalon_timer_regs.h"

static volatile int Time_Counter = 0;

static void Timer_ISR(void* Base_Address, alt_u32 Interrupt_Level)
{  
  //清除中断标志位
  IOWR_ALTERA_AVALON_TIMER_STATUS((alt_u32)Base_Address, 0);
  //累计定时器中断发生次数
  Time_Counter++;
}


int main()
{
  printf("\nISR Demo!\n");

  //设置定时器为自由运行模式
  IOWR_ALTERA_AVALON_TIMER_CONTROL(SYS_CLK_TIMER_BASE, 
            ALTERA_AVALON_TIMER_CONTROL_ITO_MSK  |
            ALTERA_AVALON_TIMER_CONTROL_CONT_MSK |
            ALTERA_AVALON_TIMER_CONTROL_START_MSK);
  //开始中断注册操作          
  alt_irq_register(SYS_CLK_TIMER_IRQ, SYS_CLK_TIMER_BASE, Timer_ISR);

  printf("Timer interrupt has occurred for: %d times\n", Time_Counter);
  int Old_Value = Time_Counter;
  for(;;)
  {
    if(Old_Value != Time_Counter)
    {
      Old_Value = Time_Counter;
      printf("Timer interrupt has occurred for: %d times\n", Old_Value);
    }
  }  
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -