原创 NiosII——系统时钟API函数应用之alarm(2)

2010-1-31 19:50 4272 4 4 分类: FPGA/CPLD

#include "system.h"<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


#include "alt_types.h"


#include "stdio.h"


#include "sys/alt_alarm.h"


#include "unistd.h"


 


static int Calledtimes = 0;


#define NUMBER_CALLBACK 10


#define STOP_CALLBACK   0


alt_u32 alarm_callback(void *context)//被注册成alarm的函数,


{                                   


    Calledtimes ++;


    if(Calledtimes <100)


    return  NUMBER_CALLBACK ;//返回值代表多少个系统时钟心跳周期后,再次调用函数


    else


    return  STOP_CALLBACK;//返回值为0,表示终止调用


}


int main (void)


{


  alt_u16 Calledtimes_old;


  static alt_alarm alarm;           //注册Alarm之前必须先定义一个alt_alarm类型变量,无需初始化


  if(alt_alarm_start(&alarm,        //alt_alarm类型变量


                    NUMBER_CALLBACK,//第一次经过多少个系统时钟周期调用函数


                    alarm_callback, //待被注册的alarm函数


                    NULL            //alarm函数传递的形参,可以为NULL


                    )<0)            //如果没有系统时钟,返回值就为负


    printf("No system clock available\n");


    Calledtimes_old = Calledtimes;


    while(1)


    {


        if(Calledtimes_old!=Calledtimes)


        {


            Calledtimes_old = Calledtimes;


            printf("callback function has been called %d times\n",Calledtimes);


        if(Calledtimes >=50)


        alt_alarm_stop(&alarm);//可以采用调用该函数停止alarm函数调用


        }


}


}


总结:


1 硬件系统保障:SOPC中一定要有定时器,而且system library中要配置系统时钟


2 包含头文件alt_alarm.h


3 alarm函数:返回值:NULL表示停止调用,其他数字表示经过多少次系统时钟再次调用,该函数是在中断背景下执行的,最好不要再其中调用printf


4 定义alt_alarm类型的变量


5 注册,通过alt_alarm_start注册,注意判断返回值,小于零没有系统时钟


6 alt_alarm_stop(alt_alarm* alarm)也是可以结束alarm函数调用。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条