-
NIOS 定时器Timer - [FPGA]
2007-09-27
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://helloblog.blogbus.com/logs/10059255.html
由于前一阵的忙碌已经很久没有写东西了,一方面是因为前一阵准备电赛的事,没有时间来顾及我这块小空间。另一方面,前一阵对于FPGA也没有太大的进步。经过一个星期压迫式的学习,我对FPGA有了更加深刻的认识。对FPGA中定时器有了最深刻的认识。下面是我写的在NIOS环境中关于定时的的编程。
static void Timer_Init(void)
{
IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_1_BASE,(short)(alt_frq)&0x0000ffff);
IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_1_BASE,(short)((alt_frq)>>16)&0x0000ffff);
} //始终初始化,设定定时值,alt_frq为cpu始终。上面的表达为定时一秒将产生一个标志。分别向上面两个寄存器写入定时的值,一个为低位一个为高位。
//start count
static void Timer_Start(void)
{
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_1_BASE,ALTERA_AVALON_TIMER_CONTROL_START_MSK+ALTERA_AVALON_TIMER_CONTROL_CONT_MSK);
}//设置控制寄存器的值,以循环的方式开始计数。
//stop count;
static void Timer_Stop(void)
{
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_1_BASE,ALTERA_AVALON_TIMER_CONTROL_STOP_MSK);
} //停止定时器,计数器//read value
alt_u32 Timer_Value(alt_u32 time)
{
int k;
int l;
IOWR_ALTERA_AVALON_TIMER_SNAPH(TIMER_1_BASE, 0);
k=IORD_ALTERA_AVALON_TIMER_SNAPH(TIMER_1_BASE);
l=IORD_ALTERA_AVALON_TIMER_SNAPL(TIMER_1_BASE);
time=((alt_frq-((k<<16)|l))*1)/50; //unit us
return (time);
}//读取定时器的值,并且换算成时间。上面的表达式的单位为us我用的CPU时钟是50MHZ.
本代码经过测试,比较稳定。
随机文章:
FPGA捕获数据 2007-08-27nios(尼奥斯) 2007-08-25Nios II 中串口接收数据 2007-08-03液晶屏添加成功 2007-08-01快玩转了 2007-08-01
收藏到:Del.icio.us








评论