This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

6748 UPP问题



我的板子上6748的upp是跟FPGA连接在一起,6748先发数据给FPGA,然后FPGA把数据返回,可奇怪的是那几根控制线,ENABLE,一直处于高电平,START发数据时也不产生起始脉冲一直高电平,这是怎么搞的?求指教

  •     配置如下:

    UPPCR = 0x00000010;                        //复位,SWRST
        sw_wait(400);
        UPPCR = 0;                           //复位结束

        UPCTL = 0x02020006;     //16位数据,CHA收,CHB发
        UPICR = 0x00300010;               //0
        UPIVR = 0xffff0000;
        UPTCR = 0 ;                    //64byte DMA bursts read / write
        UPDLB = 0 ;

        UPIEC = 0XFFFFFFFF ;                    //关掉所有中断
        UPPCR = 0x0000000A;           // 0x00000008;使能UPP

    按理说,配置好,我先发送给FPGA,开始时会产生START信号,ENABLE信号开始是低,等我发送数据时候就会变高,但是我检测这两根线时,两根线电平一直为高根本没变化。。pinmux也是按要求配置的,谁能告诉我真相

  • 检查一下是否在PSC里使能了uPP module?

  • 现在的情况是DLB能正常工作,也就是说管脚映射和PSC是对的。当把FPGA里面的程序烧进去(主要任务是把DSP通过UPP发来的数据再通过UPP返还给DSP),测试DLB模式会出现问题,开始和中间位置的数据会收两次(short型,第2个和第32个数据收到两次),不测试回环模式的话,DSP收到一个数据是对的,其他的有问题

  • 不是很理解你的问题,"现在的情况是DLB能正常工作","测试DLB模式会出现问题",你的意思是接了FPGA, DLB模式就不正常了?照理说DLB模式跟FPGA没关系的,它只是DSP内部自环。

  • 在FPGA里面没烧写测试程序时,DLB模式下收的跟发的数据完全一样,当我把测试程序烧写到FPGA里面时,DLB模式下就会出现几个数据被收两次,其他的数据是正常的(也就是收发数据大部分是一样就极个别数据被收了两次,貌似每次都是第2个字和第64个字出现收两次的情况),我知道是内部循环,但事实就出现了这种问题

  • FPGA烧写的是什么测试程序?会对uPP口操作么?

  • 会对upp发数据,就这个

  • 我感觉是DLB模式下,uPP管脚是做好映射的,当FPGA往upp发送数据时,DSP这边会认为这是一个正常的uPP收操作,所以会出现你碰到的有时候会出现几个数据被收两次。

  • 正好在E2E上看到一个类似问题的帖子,看来是不能接外设的,外部信号会对DLB模式有影响。
    http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/305449.aspx

  • 你好,我也是做FPGA与omapl138  upp通信,只是用upp接收fpga采样数据,为什么每次只能接收到一包数据,求解惑,程序如下:

    #include <stdio.h>
    #include "types.h"
    #include "evmomapl138lin.h"
    #include "evmomapl138_uPP.h"
    #include "evmomapl138_i2c.h"
    #include "evmomapl138_timer.h"
    #include "evmomapl138_i2c_gpio.h"
    #include "evmomapl138_gpio.h"
    #include "evmomapl138_emac.h"
    #include "uartStdio.h"
    #include "uart.h"
    #include "psc.h"
    #include "hw_psc_OMAPL138.h"
    #include "soc_OMAPL138.h"
    #include "interrupt.h"
    /*
    * hello.c
    */

    //uint16_t recBuf[1539] = {0};
    #pragma DATA_SECTION(FPGA_ADC_DATA,".FPGA_ADC_upp");
    #pragma DATA_ALIGN(FPGA_ADC_DATA, 8);

    volatile uint16_t FPGA_ADC_DATA[5][1539] = {0};

    //配置uPP
    void uPP_config(void);

    void send_GDB_HEX ();

    void main(void)
    {
    #if NO_GEL
    EVMOMAPL138_init();
    EVMOMAPL138_initRAM();
    #endif
    uint16_t count = 0;

    UPXS2_t * UPIS2r = (UPXS2_t *)&(UPP->UPIS2);//DMA I通道状态
       //UPXS2_t * UPQS2r = (UPXS2_t *)&(UPP->UPQS2);//DMA Q通道状态
       //UPISR_t * UPISR = (UPISR_t *)&(UPP->UPISR);//Up中断原始状态寄存器 1 EOLI线条结束标志、 EOWI窗口结束标志


    USTIMER_init();
    //USTIMER_delay(1000000);
    //USTIMER_set(1000000);


    uPP_config();

    //我将upp的dma描述寄存器每次重写,为什么fpga连续发数据DSP只得到一包数据FPGA_ADC_DATA[0],

    //此时暂停运行发现程序停止在while(UPIS2r->bits.PEND == 1){};貌似下一包数据的存储地址没有被写入一直在等待,还有UPIS2r->bits.PEND位何时便为零?是否是在第一包数据到来时,dma开始传输,UPIS2r->bits.PEND == 0;同时第二包数据的dma地址被写入寄存器,然后.pend=1,等待第二包数据传输,然后依次类推呢?
    while(1)
    {

    UPP->UPID0 = (uint32_t)&FPGA_ADC_DATA[count]; //add next DMA transfer//数据存储在FPGA_ADC_DATA中
    UPP->UPID1 = 0x00010C06; //1 lines 3078 bytes per line 
    UPP->UPID2 = 0x00000C06; //no offset between lines ;
    while(UPIS2r->bits.PEND == 1){};
    printf("\t\n count=%d\t\n",count);
    count++;
    if(count==5)
     {
       count=0;
      }

        printf("\t\n Reach the end of window \t\n");
    }
    }

    void uPP_config()
    {
    upp_config_t config;

    //UPCTL
    config.UPCTL.value=0;
    //config.UPCTL.bits.IWB = 1; //16 bit interface
    //config.UPCTL.bits.DPWB = 2; //10 bit data
    //config.UPCTL.bits.DPFA = 0; //对齐方式
    config.UPCTL.bits.DPWA = 0; //位宽
    config.UPCTL.bits.IWA = 1; //0 8bit 1 16bit
    config.UPCTL.bits.DRA = 0; //通道A数据率 0 单 1双

    config.UPCTL.bits.SDRTXIL = 0; //单数据率下的DMA乒乓模式 1 只有A通道乒乓
    config.UPCTL.bits.DDRDEMUX = 0;

    config.UPCTL.bits.CHN = 0; //1 dual channel mode 0 signal channel mode
    config.UPCTL.bits.MODE = 0; //0 all recv, 1 all xmit, 2 a recv b xmit, 3 a xmit b recv
    //Channel A ADC, Channel B DAC
    //UPICR
    config.UPICR.value=0;
    config.UPICR.bits.CLKDIVA = 0;//15; //Set DAC sampling freqency at 75/16 Mhz (4.6875MHz)
    config.UPICR.bits.STARTA =1;
    config.UPICR.bits.ENAA =1;
    //config.UPICR.bits.WAITA =1;
    //UPIVR
    config.UPIVR.value=0;
    //config.UPIVR.bits.VALA = 0x1000;
    //config.UPIVR.bits.VALB = 0x0000;

    //UPTCR
    config.UPTCR.value=0; //发送模式数据量门限、DMA触发门限设置all values 0 for 64byte DMA bursts read / write
    //UPDLB
    config.UPDLB.value=0; //no loopback
    //UPIES
    config.UPIES.value=0; //dont enable any interrupts
    //UPPCR
    config.UPPCR.value = 0;
    config.UPPCR.bits.EN = 1; //enable uPP
    config.UPPCR.bits.RTEMU = 1; //allow emulator use
    config.UPPCR.bits.SOFT = 1; //allow emulation
    UPP_init(&config);
    }

    //发串口数据,以16进制发送
    void send_GDB_HEX ()
    {
    }

  • 你好,请我可以把您upp的重新给我发一份吗?谢谢啦

  • 请问您的问题是怎么解决的?我也遇到一样的问题.

  • shaojie qu 说:
    是否是在第一包数据到来时,dma开始传输,UPIS2r->bits.PEND == 0;同时第二包数据的dma地址被写入寄存器,然后.pend=1,等待第二包数据传输,然后依次类推呢?

    pend位的变化是这样的。

    至于上面问题,你还需要确认是不是其实5包数据都接收完了,因为while中没有退出处理,5包后又会回到count=1重新开始。

    shaojie qu 说:

    while(1)
    {

    UPP->UPID0 = (uint32_t)&FPGA_ADC_DATA[count]; //add next DMA transfer//数据存储在FPGA_ADC_DATA中
    UPP->UPID1 = 0x00010C06; //1 lines 3078 bytes per line 
    UPP->UPID2 = 0x00000C06; //no offset between lines ;
    while(UPIS2r->bits.PEND == 1){};
    printf("\t\n count=%d\t\n",count);
    count++;
    if(count==5)
     {
       count=0;
      }

        printf("\t\n Reach the end of window \t\n");
    }

  • 各位大神:  

    autstyh autstyh 说:
    我的板子上6748的upp是跟FPGA连接在一起,6748先发数据给FPGA,然后FPGA把数据返回,可奇怪的是那几根控制线,ENABLE,一直处于高电平,START发数据时也不产生起始脉冲一直高电平,这是怎么搞的?求指教
     我也遇到同样问题.OMAP138   使用UPP与FPGA通讯,Start和Enable的极性是高有效时, Start和Enable口线一直输出高电平.但是如果我把Start和Enable的极性是低有效时,口线的时序是对的.Start和Enable平时为高,发送数据时,Start和Enable为低电平.但是Start和Enable的极性是高有效时,Start和Enable却一直为高.这是为什么?