每天进步一点点------SysTimer

/******************************************************************** * 文 件 名:SysTimer_test.c * 功 能:利用系统时钟服务产生1s的周期性事件,并借此控制LED闪烁,在做实验时首先在System Library设置页中,在System clock timer下拉列表框中选择一个系统时钟.* * 说 明:观察LED闪烁效果。 ********************************************************************/ #include #include "system.h" //包含基本的硬件描述信息 #include "altera_avalon_pio_regs.h" //包含基本的IO寄存器信息 #include "alt_types.h" //Altera定义的数据类型 #include "sys/alt_alarm.h" //系统时钟服务头文件 /****************************************************************** * 与硬件相关的宏定义,用户根据实际情况修改 ******************************************************************/ // 用户添加并命名的外设基地址,在SYSTEM中定义,用户需要根据不同的命名来修改此处 #ifndef LED_PIO_BASE //这是LED_PIO核的基地址 #define LED_PIO_BASE 0xffffffff //user's definition here #endif #if LED_PIO_BASE == 0xffffffff #error "No definition of LED_PIO core... " #endif #define LEDCON 0xff static alt_alarm alarm; //按调用API函数规定定义的变量 static unsigned char led = 0xff; /******************************************************************** * 名 称:my_alarm_callback * 功 能:按调用规定系统时钟回调函数,在该函数中实现用户功能 * 入口参数:context,系统传给回调函数的参数 * 出口参数:返回下一次的系统时钟服务的周期值 ********************************************************************/ alt_u32 my_alarm_callback (void* context) { if(led == 0xff){ led = 0x00; }else{ led = 0xff; } IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led); //操作IO口 return alt_ticks_per_second(); } /******************************************************************** * 名 称:InitPIO() * 功 能:初始化LED_PIO为输出,其余输入,屏蔽中断,清边沿捕获寄存器 * 入口参数:无 * 出口参数:无 ********************************************************************/ void InitPIO(void) { /* LED_PIO为输出,其余输入 */ IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE, LEDCON); /* 禁止所有PIO中断 */ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(LED_PIO_BASE, 0x00); /* 清清边沿捕获寄存器 */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(LED_PIO_BASE, 0x00); } int main() { InitPIO(); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0xff); //灭LED printf("test alarm... "); //打印提示信息 printf("alt_ticks_per_second() is %ld",alt_ticks_per_second()); if (alt_alarm_start (&alarm,alt_ticks_per_second() //启动系统时钟服务 ,my_alarm_callback,NULL) < 0) { printf ("No system clock available "); } while(1); //等待时钟事件发生 return 0; }

原文地址:https://www.cnblogs.com/kongqiweiliang/p/3236004.html