2008年4月12日 星期六

NiosII 定时器中断_中断一秒

不少人都问到NiosII定时器定时问题,下面说明如何使用定时器设定一秒一次中断http(75)://www.icwin.net/bbs http://www.wantso.com

在SOPC BUILDER中添加timer,设置如下图所示:

在Initial Period 选择1Shttp(75)://www.icwin.net/bbs http://www.wantso.com

说明:Initial Period 可表示为定时器的默认定时值,当在写程序的过程中不对周期寄存器写定时初值时,定时器的定时值就默认为Initial Period设定的值http(75)://www.icwin.net/bbs 于是在在定时1秒的时候可以有两种方法,一种是Initial Period 设定为1秒http(75)://www.icwin.net/bbs 另一种是在register中选上Writable Period ,然后在程序中写入定时初值使定时器定时一秒http(75)://www.icwin.net/bbs http://www.wantso.com http://www.wantso.com http://www.wantso.com


此主题相关图片如下:

程序如下:每一秒LED闪一次,数码管1秒加1并显示http(75)://www.icwin.net/bbs http://www.wantso.com

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include
#include "altera_avalon_pio_regs.h"
#include "altera_avalon_timer_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h"

void timer_ISR (int context) //定时中断服务程序
{
alt_u8 led;
alt_u32 sec;
led=~led;
sec++;
IOWR_8DIRECT(SEG7LED_0_BASE,0,sec%10);
IOWR_8DIRECT(SEG7LED_0_BASE,1,(sec/10)%10);
IOWR_8DIRECT(SEG7LED_0_BASE,2,(sec/100)%10);
IOWR_8DIRECT(SEG7LED_0_BASE,3,(sec/1000)%10);
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE, 0);//清TO标志
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, 0);
*(unsigned int *)LED_PIO_BASE =led;
//下面两条语句可以不加,不加时,定时值为SOPC Builder中设置的定时值1S,加上也是定时1Shttp(75)://www.icwin.net/bbs
//IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE, 50000000&0xffff);50M的频率写入低16位
//IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE, 50000000>>16);50M的频率写入高16位
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,    ALTERA_AVALON_TIMER_CONTROL_ITO_MSK|ALTERA_AVALON_TIMER_CONTROL_START_MSK
);
}
http://www.wantso.com


int main(void)
{
alt_irq_register(TIMER_0_IRQ, 0, timer_ISR);//安装中断服务子程序

//下面两条语句可以不加,不加时,定时值为SOPC Builder中设置的定时值1S,加上也是定时1Shttp(75)://www.icwin.net/bbs
//IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE, 50000000&0xffff);初值设置50M低16位
//IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE, 50000000>>16);50M高16位
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,
ALTERA_AVALON_TIMER_CONTROL_ITO_MSK|ALTERA_AVALON_TIMER_CONTROL_START_MSK );
//启 动定时器,开中断http(75)://www.icwin.net/bbs
while (1)
{


}
return 1;
}
http://www.wantso.com http://www.wantso.com

沒有留言: