MicroBlaze定时器(Timer)的使用
(2008-06-26 09:29:31)
标签:
microblaze定时器timer中断it |
分类: Xilinx_FPGA |
MicroBlaze的Timer IP比较简单易用,一个XPS_TC IP包含两个32bit定时/计数器。工作方式也比较灵活,可以设置中断、自动加载、Count UP/DOWN等模式,每当timer溢出的时候产生中断,进入中断程序后通过写1 clear中断标志位,通常的做法是csr = = XTmrCtr_mGetControlStatusReg(XPAR_MY_TIMER_BASEADDR, 0);然后再“XTmrCtr_mSetControlStatusReg(XPAR_MY_TIMER_BASEADDR, 0, timer_csr);”,这样可以在不影响别的控制位的前提下clear中断标志位。
同样值得注意的是用了XIntc模块,要将timer中断服务程序连接(注册)到XIntc模块上。
使用Timer IP的流程是:(1)设置Load Regisiter初始值;(2)设置控制/状态寄存器,包括中断时能、timer使能、COUNT方向、Relaod使能等;(3)注册中断服务函数;(4)开MB全局中断和XIntc中断;(5)等待中断发生。(6)在中断服务程序中clear中断标志位。
来看例程(100MHz时钟下MB每秒钟产生一个中断):
#include "xparameters.h"
#include "xutil.h"
#include "xintc.h"
#include "xtmrctr.h"
void timer_int_handler(void);
unsigned int push_button_times, timer_cnt;
int main()
{
//must enable mb_enable bit
}
void timer_int_handler(void)
{
}

加载中…