【原创】Microblaze 定时器中断使用(汉语注释)

  自己最近在玩Microblaze,下面简单的贴个定时器中断的例程出来,供大家参考,自己加了一点汉语注释,方便大家阅读,不过本人还是提倡大家提高原文阅读能力,本例程实现一秒定时,并在led灯上显示。(如需转载请注明出处)

废话太多,贴代码:

#include <xtmrctr.h>
#include <xintc_l.h>
#include <xgpio.h>
#include <xparameters.h>
#define LEDChan  1

unsigned int count = 0;
XGpio gpio;


void timer_int_handler(void * baseaddr_p) //中断句柄函数(中断服务程序)

{
 unsigned int csr;
 /* 读取定时器0的控制状态寄存器,判断中断是否产生 */
 csr = XTmrCtr_mGetControlStatusReg(XPAR_DELAY_BASEADDR,0);
 /* 如果中断产生,标志变量自加1 */
 if(csr &XTC_CSR_INT_OCCURED_MASK)
 {
  count++;
 } 
 /* 中断服务程序的最后,清除中断标志位 */
 XTmrCtr_mSetControlStatusReg(XPAR_DELAY_BASEADDR,0, csr);
}


int main()

{    
  /* 注册定时器的中断服务程序 */
  XIntc_RegisterHandler(XPAR_XPS_INTC_0_BASEADDR,
                             XPAR_XPS_INTC_0_DELAY_INTERRUPT_INTR,
                             (XInterruptHandler) timer_int_handler,
                             (void *)XPAR_DELAY_BASEADDR);

 

  /* 使能中断控制器 */
  XIntc_mMasterEnable(XPAR_XPS_INTC_0_BASEADDR);
  XIntc_mEnableIntr(XPAR_XPS_INTC_0_BASEADDR, 0x1);

  /* 给装载寄存器装载初值 */
  XTmrCtr_mSetLoadReg(XPAR_DELAY_BASEADDR, 0, 50000000); 
 
  /* 使能中断控制器中的计数器中断*/
  XIntc_mEnableIntr(XPAR_DELAY_BASEADDR, XPAR_DELAY_INTERRUPT_MASK);
 
  /* 设置计数器计数模式并开始计数*/
  XTmrCtr_mSetControlStatusReg(XPAR_DELAY_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK |
      XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK); 
 
  /* 使能Microblaze中断*/
   microblaze_enable_interrupts();
 
  /*初始化gpio口并设置其输入输出方向*/
 XGpio_Initialize(&gpio, XPAR_LED_DEVICE_ID);
 XGpio_SetDataDirection(&gpio,LEDChan, 0);


  while(1)
  {
  /* 把count赋给gpio口,将其显示在led灯上*/
  XGpio_DiscreteWrite(&gpio,1,count);
  if(count==256)
   count=0;
  }
  return 0;
}

 

注:程序中函数中的参变量多数是在xtmrctr_l.h文件里的,右以在其中查阅其值及含义,然后对照后面本文的Control/Status Register 0 (TCSR0)

的相关信息,每个函数的作用便很清楚了。

 

microblaze定时器中断在generate mode 下的主要特性如下:

2010081412493471.jpg

microblaze定时器中断主要寄存器的设置如下:

2010081412490419.png

2010081412483356.png

转载于:https://www.cnblogs.com/hclmcu/archive/2010/08/14/1799557.html

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值