Board logo

标题: [NiosII] 定时器中断 [打印本页]

作者: 海洋狂吻    时间: 2014-4-30 15:54     标题: [NiosII] 定时器中断

首先在NoisII里面添加一个Full-featured的Timer

然后在EDS里面使用下面已经调试成功的代码

#include    //用到printf()函数
#include "altera_avalon_pio_regs.h"   //读写IO寄存器相关函数
#include "sys/alt_irq.h"  //NoisII中断处理相关函数,这里遵循增强型中断风格以向后兼容
#include "altera_avalon_timer_regs.h" //读写定时器寄存器相关函数



void Timer1_Init(void); //定时器中断初始化函数申明

void Timer1_ISR(void* isr_context);//定时器中断服务函数申明
//参考"sys/alt_irq.h"定义的函数原型
/* ISR Prototype */
//#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
//typedef void (*alt_isr_func)(void* isr_context);
//#else
//typedef void (*alt_isr_func)(void* isr_context, alt_u32 id);
//#endif


int Flags = 0;
unsigned int timer_isr_context;


int main()
{


Timer1_Init();


printf("Timer1 Init done...\n");


while(1)

{

IOWR_ALTERA_AVALON_PIO_DATA(LEDEDGE_BASE,Flags%2);

}


return 0;

}


void Timer1_Init(void)
{

void* isr_context_ptr = (void*)&timer_isr_context;


IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER1_BASE,0x05F5);

IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER1_BASE,0xE0FF);
  // 设置PERIOD寄存器
  // PERIODH << 16 | PERIODL = Timer周期 * 系统时钟频率 - 1
  // PERIODH << 16 | PERIODL = 1s*100M - 1 = 99999999 = 0x5F5E0FF



IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER1_BASE,

ALTERA_AVALON_TIMER_CONTROL_START_MSK|

ALTERA_AVALON_TIMER_CONTROL_CONT_MSK|

ALTERA_AVALON_TIMER_CONTROL_ITO_MSK);
  // 设置CONTROL寄存器
  //    位数 |  3   |  2   |  1   |  0  |
  // CONTROL | STOP | START| CONT | ITO |
  // ITO   1,产生IRO;                      0,不产生IRQ
  // CONT  1,计数器连续运行直到STOP被置一;   0,计数到0停止
  // START 1,计数器开始运行;                0,无影响
  // STOP  1,计数器停止运行;                0,无影响


  // 注册定时器中断

alt_ic_isr_register(

  TIMER1_IRQ_INTERRUPT_CONTROLLER_ID, // 中断控制器标号,从system.h复制

  TIMER1_IRQ,           // 硬件中断号,从system.h复制

          Timer1_ISR,             // 中断服务子函数

          isr_context_ptr,       // 指向与设备驱动实例相关的数据结构体

           0x0);                       // flags,保留未用
}

void Timer1_ISR(void* timer_isr_context)
{
       // 应答中断,将STATUS寄存器清零

IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE,

~ALTERA_AVALON_TIMER_STATUS_TO_MSK);  //TO=0


Flags += 1;
}





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0