NIOS?TIMER中止相关笔记
NIOSTIMER中止试验
一、开发环境及试验目
(1)、开发环境:
硬件:DE2—70开发板
软件:QuartusII9.0sp2WebEdition
NIOSIIEDC9.0NIOSIDE
(2)、试验目:
深入了解TIMER中止,学会写TIMER中止函数,学会调用TIMER中止
二、相关知识、资料
(1)状态寄存器:status:
TO:计数器递减至0时置1,并保持,直到软件修改为0
RUN:定时器运行时为1,停止时为0,不能被软件改写
(2)控制寄存器(control):
ITO:若为1则TIMER递减至0时发出中止,不然中止被屏蔽
CONT:为1时定时器连续工作,为0时定时器只工作一次
Start、stop:分别用来开启定时器和停止定时器,只需置1,不能同时置1
(3)周期计数器:PeriodlPeriodh
(4)定时器快照寄存器:(SnaplSnaph)
NIOS中访问定时器
头文件:
Altera_Avalon_timer_regs.h
该文件:
1、读写状态寄存器:
IORD_ALTERA_AVALON_TIMER_STATUS(base)
IOWR_ALTERA_AVALON_TIMER_STATUS(base,data)
2、读写控制寄存器:
IORD_ALTERA_AVALON_TIMER_CONTROL(base)
IOWR_ALTERA_AVALON_TIMER_CONTROL(base,data)
3、读写周期寄存器
IORD_ALTERA_AVALON_TIMER_PERIODL(base)
IOWR_ALTERA_AVALON_TIMER_PERIODL(base,data)
IORD_ALTERA_AVALON_TIMER_PERIODH(base)
IOWR_ALTERA_AVALON_TIMER_PERIODH(base,data)
4、读写计数器快照寄存器
IORD_ALTERA_AVALON_TIMER_SANPL(base)
IOWR_ALTERA_AVALON_TIMER_SANPL(base,data)
IORD_ALTERA_AVALON_TIMER_SANPH(base)
IOWR_ALTERA_AVALON_TIMER_SANPH(base,data)
三、试验内容(内容为大量截图新浪博客不方便上传,懒上传了,仅上传NIOS源程序)
#includestdio.h
#includesys/unistd.h
#includeio.h
#includestring.h
#includesystem.h
#includealtera_avalon_pio_regs.h
#includealtera_avalon_timer_regs.h
#includealt_types.h
#includesys/alt_irq.h
staticvoidTimer_ISR_Init(void);//setinterrupter
alt_u8i=0;
intmain(void)
{
printf(\nmainfunction!\n);
Timer_ISR_Init();//setinterrupterfunction
while(1)
{
usleep(10000);
}
return0;
}
//Timer1
alt_u8LED1=0;
staticvoidTimer1_Irq_Handler(void*context,alt_u32id)
{
printf(\nTimers1INTERRUPT!\n);
LED1++;
IOWR_ALTERA_AVALON_PIO_DATA(LED1_BASE,LED1);
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE,0);
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER2_BASE,0x07);
}
//Timer2
alt_u8LED2=0;
alt_u8K;
alt_u32Timer_Prd[]=12500000