我用sopc builder 搭建了一个跑马灯的硬件系统,里边添加了定时器,可定时器的定时方面有点问题,哪位大哥帮忙分析一下,这是怎么回事?我在nios下的变成如下:
#include "system.h"
#include "sys/alt_irq.h"
#include "alt_types.h"
#include "altera_avalon_pio_regs.h"
#include "altera_avalon_timer_regs.h"
#define TIMER_0_BASE 0x00005000
#define LED_BASE 0x00005020
alt_u8 n=0;
static void timer_overflow(void* context, alt_u32 id)
{
IOWR(TIMER_0_BASE,0,0);//清to标志
if (*(alt_u8 *)context & 0x80)
{
*(alt_u8 *)context = 0x01;
}
else
{
*(alt_u8 *)context = *(alt_u8 *)context << 1;
}
IOWR(LED_BASE,0,*(alt_u8 *)context);
return;
}
int main(void)
{
alt_u8 led = 0x01;
IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,0xFFFF);
IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,0x0FFF);
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, 0x07);//启动定时器
alt_irq_register( TIMER_0_IRQ, (void*)&led, timer_overflow);//注册定时器
while(1);
}
我添加的定时器默认是100ms中断一次,可我在这个程序里设置了定时器的初始值,差不多是5s多一点,可我下到板子上它还是按照100ms中断一次,请问这是怎么回事?
