您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF53x技术支持专区 -> 561接收数据,求指教
本帖共有405个阅读者
发表帖子 发表投票 回复主题
561接收数据,求指教
Summer(论坛新手)
Summer
头衔:社区公民
帮派:无帮无派
帖数:3
金钱:129
积分:5
注册时间:2014/4/25
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
561接收数据,求指教

//****************************************************************************** 目标板架构
: FPGA + DSP (BF561)

*       目      标 : BF561接收 1024 个数据,并将接收到的数据打印出来

*       数 据 源   : FPGA 产生1 MHz 分频时钟,并在该时钟下做计数,把计数结果(为

*                                  
16bits)作为输出,此外产生一个帧同步信号。

*                                            即从数据源得到              PPI_CLK,  PPI_FS1,
data[15:0]

*       DSP
            :   CCLK==125 MHZ    SCLK==50 MHZ

*       编译uClinux版本:
2011R1-RC3

//*****************************************************************************

摸索了很久一直没有实现这个功能,请求高手指点!

3、是否有程序可以供小弟参考?求指导。

问题1:在2011R1-RC3版本中,对PPI_PORT_ENABLE、PPI_PORT_DIRECTION,并没有定义,在对PPI口读取 数据时(应用程序),是否
用 fd=open(“dev/ppi0”,O_RDWR),即可使能ppi口,即实现了对PPI0_CONTROL寄存器的EN位写“1”使能?

问题2: 我期望实现的机制是 在应用程序中,开辟一个数组,open设备后,读取数据,再用   printf() 打印出数组中从PPI口读到的数据。手册上说PPI必须与DMA一起使用。我找的这个参考程序里面并没有体现对DMA的设置,是不是在驱动层实现了呢?

参考程序的设计构想是否成立?

Bfin_ppi.h------------------------------2011R1-RC3------------------------------------

没有对PPI_PORT_ENABLE、PPI_PORT_DIRECTION,做定义

Bfin_ppi.c------------------------------2011R1-RC3------------------------------------

#elif defined(EPPI0_CONTROL) || defined(EPPI1_CONTROL)  /* EPPI */

#define PORT_EN      EPPI_EN                                  

#define PORT_DIR  EPPI_DIR

Ppi_read

         /*
configure PPI registers to match DMA registers */

         dev->regs->ppi_control
&= ~PORT_DIR;

         dev->regs->ppi_count
= conf->line_len - PPI_COUNT_CORR_OFFSET;

         dev->regs->ppi_frame
= conf->num_lines;

         dev->regs->ppi_delay
= conf->delay;

         if
(conf->timers)

                   disable_timer_output(dev);

         enable_dma(dma);

         /* enable ppi */

         dev->regs->ppi_control
|= PORT_EN;

         SSYNC();

Ppi_write

         /*
configure PPI registers to match DMA registers */

         dev->regs->ppi_control
|= PORT_DIR;

         dev->regs->ppi_count
= conf->line_len - PPI_COUNT_CORR_OFFSET;

         dev->regs->ppi_frame
= conf->num_lines;

         dev->regs->ppi_delay
= conf->delay;

         enable_dma(dma);

         /*
enable ppi */

         dev->regs->ppi_control
|= PORT_EN;

         SSYNC();

在2008BEV   bfin_ppi.h中------------------------------------------------------------------------------------

/*

** ioctl commands

*/

#define CMD_PPI_PORT_ENABLE    1

#define CMD_PPI_PORT_DIRECTION 2

在2008BEV   bfin_ppi.c中--------------------------------------------------------------------------------------

switch (cmd) {

case CMD_PPI_PORT_ENABLE:

{

DPRINTK("ppi_ioctl: CMD_PPI_PORT_ENABLE\n");

regdata = bfin_read_PPI0_CONTROL();

pdev->portenable = (unsigned short)arg;

if (arg)

regdata |= PORT_EN;

else

regdata &= ~PORT_EN;

pdev->ppi_control = regdata;

bfin_write_PPI0_CONTROL(pdev->ppi_control);

break;

}

case CMD_PPI_PORT_DIRECTION:

{

DPRINTK("ppi_ioctl: CMD_PPI_PORT_DIRECTION\n");

regdata = bfin_read_PPI0_CONTROL();

if (arg)

regdata |= PORT_DIR;

else

regdata &= ~PORT_DIR;

pdev->ppi_control = regdata;

bfin_write_PPI0_CONTROL(pdev->ppi_control);

break;

}

问题2: 我期望实现的机制是 在应用程序中,开辟一个数组,open设备后,读取数据,再用   printf() 打印出数组中从PPI口读到的数据。程序如下:

//version1: change the buffer_size from 128 to
1024  -----2014.5.7

//version2: add the printf()  for making sure  the programming running location

//PPI接收程序测试

#include <stdio.h>

#include <fcntl.h>

#include
<sys/ioctl.h>

#include
<unistd.h>

#include <errno.h>

#include
<string.h>

#include
<stdlib.h>

#include
<sys/time.h>

#include
"ppi.h"

typedef unsigned short   UINT16;

UINT16 buf[1024];

int main( int argc,
char** argv )

{

    int i;

    int fd;

    

    for(i=0;i<1024;i++)

    {

       buf[i] = 0;

    }

    fd = open("/dev/ppi0", O_RDWR);

    if (fd==-1)

    {

    printf(" error opening device. fd=-1\n");

    exit(1);

    }

    else

    {

    printf("\nPPI0 open success\n");

    //print  the  ==============fd

    printf("\n%d\n",fd);

    }

    //配置PPI操作寄存器,满足外部帧同步及接收模式

//////////////return
ioctl///then printf ///the return 、、value;;;;;///////////////5.11

    int rt[20];         //  
返回 值

    rt[0]=ioctl(fd,
CMD_PPI_LINELEN, 1024);

    rt[1]=ioctl(fd, CMD_PPI_NUMLINES, 1);

rt[2]=ioctl(fd, CMD_PPI_PORT_DIRECTION, CFG_PPI_PORT_DIR_RX); //返回负值  -1

    rt[3]=ioctl(fd, CMD_PPI_XFR_TYPE,
CFG_PPI_XFR_TYPE_NON646);

    //ioctl(fd, CMD_PPI_FIELD_SELECT,
CFG_PPI_FIELD_SELECT_1);  rt[4]=ioctl(fd,
CMD_PPI_PORT_CFG, CFG_PPI_PORT_CFG_XSYNC1);

    rt[5]=ioctl(fd, CMD_PPI_SKIPPING,
CFG_PPI_SKIP_DISABLE);  

    rt[6]=ioctl(fd, CMD_PPI_PACKING,
CFG_PPI_PACK_DISABLE);

    //ioctl(fd, CMD_PPI_SKIP_ODDEVEN,
CFG_PPI_SKIP_ODD);

    rt[7]=ioctl(fd, CMD_PPI_DATALEN,
CFG_PPI_DATALEN_16);

    rt[8]=ioctl(fd, CMD_PPI_CLK_EDGE,
CFG_PPI_CLK_EDGE_RISE);

    rt[9]=ioctl(fd, CMD_PPI_TRIG_EDGE, CFG_PPI_TRIG_EDGE_RISE);

    printf("\nrunning
location------------------- 1\n");
/////////5.8/

    rt[10]=ioctl(fd, CMD_PPI_SET_DIMS,
CFG_PPI_DIMS_1D);

    //ioctl(fd, CMD_PPI_SETGPIO, 1); //意义不明确 ////version 4

    rt[11]=ioctl(fd, CMD_PPI_DELAY, 0);

    

    printf("\nrunning
location---------finishi ioctl ---------- 2\n");////////////5.8//

    rt[12]=ioctl(fd,
CMD_PPI_PORT_ENABLE, 1);     //返回负值  -1

//----------------------------------------------------------------------------------------------------------------------    

    int m;

    for(m=0;m<=14;m++)

    {

       printf("\nioctl %d return value  %d\n",m,rt[m]);

    }

//----------------------------------------------------------------------------------------------------------------------

    rt[13]=read(fd,buf,1024*sizeof(UINT16));

    rt[14]=close(fd);

    

    printf("\nrunning
location------------------- 3\n");    
////////////5.8//

    for(i=0;i<1024;i++)

    {

     printf("%d\n",buf[i]);

    }

    printf("\nEnd of data");

    return 0;

}



「该帖子被 Summer 在 2014-05-17 09:32:19 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/5/16 16:16:13
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
linux用的不熟,不会。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/5/20 22:57:54
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154384 Call, 1 Queries, Processed in 0.015625 second(s),