MCU

NIOS II学习五~~system timer

0
阅读(2829)

很精确的定时   1S变化一次  

#include "system.h"                     // SOPC Builder配置后的存储映射头文件 
#include "altera_avalon_pio_regs.h"     // PIO核的存储映射头文件 
#include "alt_types.h"                  // Altera的数据类型 
#include "sys/alt_alarm.h"              // Interval Timer核的驱动头文件 
#include "unistd.h"                     // NULL 
// 用户回调函数 
alt_u32 timer_CallBackFunc(void* context);  
alt_alarm timer_addr;                   // 指向结构体alt_alarm的指针 
alt_u32 ticks_num = 1000;                // 100 ticks  * 1 ms/tick = 100 ms     
int main() 

/* 
 * 函数功能:启动sys_clk_timer服务 
 * 函数备注:#include "sys/alt_alarm.h" 
 * 入口参数:timer_addr,指向结构体alt_alarm的指针 
 *        ticks_num,每隔ticks_num执行一次回调函数 
 *        timer_CallBackFunc,用户回调函数 
 *        context,传给用户回调函数的参数,此处为NULL 
 */
 alt_alarm_start(&timer_addr, ticks_num, timer_CallBackFunc, NULL); 
 while(1); 
 return 0; 
 }  

  * 函数功能:用户回调函数 

 * 函数备注:用户自己编写 

 * 入口参数:*context, 从alt_alarm_start()传来的参数 

* 出口参数:ticks_num, sys_clk_timer服务的周期数 

 */

alt_u32 timer_CallBackFunc(void* context) 


  static alt_u8 temp = 0;               // static 定义时,只可赋值一次 
  IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, temp); 
  temp = ~temp;                         // 翻转temp 
  return ticks_num;                     // 返回下一次sys_clk_timer服务的ticks_num 
}