很精确的定时 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
}
用户1505147 2010-5-2 20:43