isr范例.txt

来自「nios范例(含源代码)」· 文本 代码 · 共 56 行

TXT
56
字号
/*
 * 声明:本范例源于书籍‘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 + =
减小字号Ctrl + -
显示快捷键?