NIOS TIMER中断的相关笔记.docx_第1页
NIOS TIMER中断的相关笔记.docx_第2页
NIOS TIMER中断的相关笔记.docx_第3页
NIOS TIMER中断的相关笔记.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NIOSTIMER中断的相关笔记NIOS TIMER中断实验一、开发环境及实验目的(1)、开发环境: 硬件:DE270开发板软件:Quartus II 9.0sp2 Web Edition NIOS II EDC 9.0 NIOS IDE(2)、实验目的: 深入理解TIMER中断,学会写TIMER中断函数,学会调用TIMER中断 二、相关知识、资料 (1)状态寄存器:status:TO: 计数器递减至0时置1,并保持,直到软件修改为0RUN: 定时器运行时为1,停止时为0,不能被软件改写(2)控制寄存器(control): ITO: 若为1则TIMER递减至0时发出中断,否则中断被屏蔽 CONT: 为1时定时器连续工作,为0时定时器只工作一次 Start、stop: 分别用来启动定时器和停止定时器,只需置1,不能同时置1(3)周期计数器:Periodl & Periodh(4)定时器快照寄存器:(Snapl & Snaph)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源程序)#include #include #include #include #include system.h#include altera_avalon_pio_regs.h#include altera_avalon_timer_regs.h#include alt_types.h#include sys/alt_irq.h static void Timer_ISR_Init(void); /set interrupter alt_u8 i=0;int main(void) printf(n main function! n); Timer_ISR_Init(); /set interrupter function while(1) usleep(10000); return 0; /Timer1alt_u8 LED1=0; static void Timer1_Irq_Handler(void *context,alt_u32 id) printf(n Timers1 INTERRUPT! 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);/Timer2alt_u8 LED2=0;alt_u8 K;alt_u32 Timer_Prd = 25000000,12500000,6250000,3125000;static void Timer2_Irq_Handler(void *context,alt_u32 id) printf(n Timers2 INTERRUPT! n); LED2=(LED2+1)%4; IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER2_BASE,Timer_PrdLED2); IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER2_BASE,0); IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE,LED2); K=IORD_ALTERA_AVALON_PIO_DATA(K1_BASE) & 0x01; if(K) IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER3_BASE,0x07); else IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER3_BASE,0x0a); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER2_BASE,0);/Timer3alt_u8 LED3=0;static void Timer3_Irq_Handler(void *context,alt_u32 id) printf(n Timers3 INTERRUPT! n); LED3+; IOWR_ALTERA_AVALON_PIO_DATA(LED3_BASE,LED3); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER3_BASE,0); static void Timer_ISR_Init(void) printf(n INTERRUPTer function! n); /timer1 IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE,0); alt_irq_register(TIMER1_IRQ,NULL,Timer1_Irq_Handler); IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER1_BASE,0x01); /timer2 IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER2_BASE,0); alt_irq_register(TIMER2_IRQ,NULL,Timer2_Irq_Handler); IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER2_BASE,0x01); /timer3 IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER3_BASE,0); alt_irq_register(TIMER3_IRQ,NULL,Timer3_Irq_Handler); IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER3_BASE,0x01);(英文太差,写注释写的很差,估计就自己能看懂,见笑)四、实验心得:部分资料写在实验前的TIMER资料中总结在NIOS中C程序编写所应有的格式如上例所示:在一个时钟初始化中需写以下三句话:1、TIMER状态寄存器设置:开启TIMERIOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE,0);2、中断注册,函数内为:中断号,空指针,中断函数alt_irq_register(TIMER1_IRQ,NULL,Timer1_Irq_Handler);3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论