博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nios中定时器的使用
阅读量:5240 次
发布时间:2019-06-14

本文共 1173 字,大约阅读时间需要 3 分钟。

实验用的板子是黑金的,程序主要按照黑金的视屏来做的。

定时器的添加就不说了,主要总结一下定时器的操作过程吧。

 

1、初始化,即对定时器进行清零。

清零的方式有两种,一种是用定时器清零,另外一种是使用库函数,主要是io.h这个库里面的。

这里主要讲一下使用库函数,主要原因是使用库函数使得程序的可读性更强。

IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE,0x00);//清除timer1中断标志位

    其中TIMER1_BASE是定时器1的基地址,在system.h这个头文件中。

2、设置定期的周期,同样建议使用库函数。

    IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER1_BASE,timer_prd[j]); IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER1_BASE,timer_prd[j]>>16);

其中XXX_PERIODL和XXX_PERIODH分别为定时器的周期的低十六位和高十六位。这里需要提醒大家的一点是,主要不要超出16位,否则会丢失高位。

3、启动定时器。

     //启动timer1      IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER1_BASE,0X07);

这里0x07主要是对某一些特定的标志位进行操作,主要起启动定时器。

4、注册定时器。这里的注册需要解释一下,这个可能和os有点联系,nios后台有个操作系统,当定时器中断产生以后,后台就会响应这个中断,也就是执行这个中断对应的中断函数。

//注册timer1 alt_irq_register(TIMER1_IRQ,NULL,ISR_timer1);

这里的ISR_timer1就是定时器1对应的中断函数,ISR_timer1是这个中断函数对应的函数名称。(函数名实质就是一个指针,只不过这个指针是函数指针)。

我们可以中断函数中进行一些短时的操作,不宜进行复杂超过,主要是考虑到时间过长会引起定时器溢出。

 

static void ISR_timer1(void *context,alt_u32 id) {

LED->DATA=1<<i; printf("hello timer1! %d\n",i); i++; if(i==4)   i=0;   IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE,0x00); }

在中断响应函数中,不要忘记在执行结束前,添加定时器清零。以便于定时器下一次响应,否则定时器就仅仅执行一次。OMG,这是我们不想看到的,千万不要忽略这个小错误。

写到这里,提前放假回家了!

 

转载于:https://www.cnblogs.com/farbeyond/p/5202998.html

你可能感兴趣的文章
Eclipse 4.2 汉化
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
网络时间获取
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Code as IaaS for Azure : Terraform 初步
查看>>
WebFrom 小程序【分页功能 】
查看>>
Learning-Python【26】:反射及内置方法
查看>>
day7--面向对象进阶(内含反射和item系列)
查看>>
Python深入01 特殊方法与多范式
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
转:apache 的mod-status
查看>>
转:基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示
查看>>
结对编程博客
查看>>
Kendo MVVM 数据绑定(四) Disabled/Enabled
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
C++11 生产者消费者
查看>>