首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

NIOS下光电编码器调速的问题?

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;
}

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

在交流中前进,共同实现nios的应用。
可能是你的引脚电平不对吧
真诚让沟通更简单! QQ:767914192
返回列表