我的板子上6748的upp是跟FPGA连接在一起,6748先发数据给FPGA,然后FPGA把数据返回,可奇怪的是那几根控制线,ENABLE,一直处于高电平,START发数据时也不产生起始脉冲一直高电平,这是怎么搞的?求指教
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是跟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也是按要求配置的,谁能告诉我真相
不是很理解你的问题,"现在的情况是DLB能正常工作","测试DLB模式会出现问题",你的意思是接了FPGA, DLB模式就不正常了?照理说DLB模式跟FPGA没关系的,它只是DSP内部自环。
我感觉是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 ()
{
}
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");
}
各位大神:
我也遇到同样问题.OMAP138 使用UPP与FPGA通讯,Start和Enable的极性是高有效时, Start和Enable口线一直输出高电平.但是如果我把Start和Enable的极性是低有效时,口线的时序是对的.Start和Enable平时为高,发送数据时,Start和Enable为低电平.但是Start和Enable的极性是高有效时,Start和Enable却一直为高.这是为什么?autstyh autstyh 说:我的板子上6748的upp是跟FPGA连接在一起,6748先发数据给FPGA,然后FPGA把数据返回,可奇怪的是那几根控制线,ENABLE,一直处于高电平,START发数据时也不产生起始脉冲一直高电平,这是怎么搞的?求指教