Board logo

标题: NIOS下光电编码器调速的问题? [打印本页]

作者: xinmolpf    时间: 2007-12-24 15:07     标题: NIOS下光电编码器调速的问题?

我做的一个编码器调速实现,直接用PIO接收编码器的脉冲信号,但是为什么 if(((IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE))&yi)==1) {i+=1;}这句只要把编码器接上就开始计数了呢,而且改为 if(((IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE))&yi)==0) {i+=1;}仍然执行这句,太奇怪了,望大家指点。

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "priv/alt_busy_sleep.h"
#include "sys/alt_irq.h"
#include <stdio.h>
#include <io.h>
#include "sys/alt_alarm.h"
#include "timer_struct.h"
#include "sys/alt_timestamp.h"
#define alt_cpu_freq 50000000
np_timer *na_timer=SYS_CLK_TIMER_BASE;
volatile alt_u32 done=0;
volatile int edge_capture;
int i=0,j=0,k=0;
int en;

#define yi (1<<0)
#define er (1<<1)
#define san (1<<2)

static void myfire_interrupts(void* context,alt_u32 id)
{
volatile int* edge_capture_ptr=(volatile int*) context;
*edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE);
if(((IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE))&yi)==1) {i+=1;}
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, 0x00);
}

void InitPIO(void)
{
void* edge_capture_ptr=(void *)&edge_capture;
//IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_0_BASE, 0x00);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, 0x00);
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_0_BASE, 0x07);
alt_irq_register(PIO_0_IRQ,edge_capture_ptr,myfire_interrupts);
}

/*void InitPIO(void)
{
IOWR(PIO_0_BASE,0,0);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, 0x00);
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_0_BASE, 0x0);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0x07);
}
*/

int main()
{
na_timer->np_timerperiodl=(short)(alt_cpu_freq&0x0000ffff);
na_timer->np_timerperiodh=(short)((alt_cpu_freq>>16)&0x0000ffff);
na_timer->np_timercontrol=np_timercontrol_start_mask+np_timercontrol_cont_mask;
int write1,write2,write3;
InitPIO();
printf("successful!\n");
while(1)
{
if(na_timer->np_timerstatus&np_timerstatus_to_mask)
{

printf("%8d%8d%8d\n",i,j,k);
na_timer->np_timerstatus=0;
}

}
return 0;
}


作者: kzw    时间: 2007-12-25 20:01

调试一下吧,看到底结果为多少吧。


作者: flanix    时间: 2007-12-27 18:07

可能是你的引脚电平不对吧




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0