发 帖  
原厂入驻New
怎么通过FPGA向DSP发送有符号整型数据?
80 FPGA DSP
分享
[tr]我用的是TL138EVM-F的开发板,在用FPGA和DSP通信的时候遇到点问题。我看了创龙的例程有UPP的外部回环测试,上板也验证成功了。我现在需要做的是通过FPGA向DSP发送有符号整型数据,再通过DSP对该数据处理后,发送新的带符号整型数据给FPGA。我能否在例程的基础上做一些修改就能达到这样的功能。我尝试了修改FPGA那边的程序没有达到要求。DSP这边不知道该怎么改。创龙的工程师能不能指导下?

[/tr]
0
2020-4-1 10:27:14   评论 分享淘帖 邀请回答

相关问题

7个回答
传输的有符号整型数据是支持的,把数据类型定义成您要传的就行。
2020-4-1 10:42:02 评论

举报



我看到例程里面通过两个通道发送和接收各都是8位的宽度,但是传输的数据upp_buffer_a中的数据是有大于8位的,那可以直接通过FPGA用8位的通道发送大于8位的数据,问不会出错吗?为什么例程的回环测试可以发送和传输大于接口宽度的数据。
2020-4-1 10:49:28 评论

举报

我觉得你应该好好看看C语言里的数组是一个什么东西,每一个数组在内存里存储都是连续的,数组在内存里体现出来的就是一片连续的二进制数据,这个跟数据是什么类型没有关系。UPP只需要把内存里的一整片数据以8bit的方式发送出去即可。
2020-4-1 10:54:39 评论

举报



请问我修改了UPP内部回环测试的FPGA程序,使FPGA发送固定8位二进制数据给DSP,可为什么DSP收到的数据却是高8位与低8位都是固定数据的16位的二进制数?我是通过将收到的数据读出到串口,发现这个现象的。
2020-4-1 11:04:41 评论

举报

2020-4-1 11:11:37 评论

举报

请问下面这段UPP接收FPGA发来数据的代码,为什么一直进入不了窗口中断,也就是upp_interrupt_count的值一直为0。

  • /****************************************************************************/
  • /*                                                                          */
  • /*              uPP通信 A 通道接收                                                */
  • /*                                                                          */
  • /*              2015年06月24日                                              */
  • /*                                                                          */
  • /****************************************************************************/
  • #include <stdio.h>
  • #include <c6x.h>
  • #include <math.h>

  • #include "hw_types.h"                                // 宏命令
  • #include "hw_syscfg0_C6748.h"            // 系统配置模块寄存器
  • #include "soc_C6748.h"                            // DSP C6748 外设寄存器
  • #include "psc.h"                                // 电源与睡眠控制宏及设备抽象层函数声明
  • #include "interrupt.h"             // DSP C6748 中断相关应用程序接口函数声明及系统事件号定义
  • #include "uartStdio.h"             // 串口标准输入输出终端函数声明
  • #include "upp.h"
  • #include "dspcache.h"
  • /****************************************************************************/
  • /*                                                                          */
  • /*              宏定义                                                      */
  • /*                                                                          */
  • /****************************************************************************/
  • // 使用缓存

  • //配置 DMA
  • #define upp_line_size        (20)
  • #define upp_line_count       (20)
  • #define upp_frame_size       (upp_line_size * upp_line_count)
  • #define upp_line_offset      (upp_line_size)

  • /****************************************************************************/
  • /*                                                                          */
  • /*              全局变量                                                    */
  • /*                                                                          */
  • /****************************************************************************/
  • //全局变量
  • volatile int upp_interrupt_count = 0;
  • volatile int upp_error_count = 0;

  • //接收缓存变量
  • signed short data[upp_frame_size/2];



  • uPPDMAConfig transposeParA;

  • /****************************************************************************/
  • /*                                                                          */
  • /*              函数声明                                                    */
  • /*                                                                          */
  • /****************************************************************************/
  • void InterruptInit(void);
  • void uPPIntRegister(unsigned int cpuINT );
  • void uPPIntSetUp(void);
  • void uPPIsr(void);
  • static void Delay(volatile unsigned int count);


  • /****************************************************************************/
  • /*                                                                          */
  • /*              中断服务函数                                                */
  • /*                                                                          */
  • /****************************************************************************/
  • void uPPIsr(void)
  • {
  •         unsigned int intr_dmai_status;

  •         intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);

  •         while (intr_dmai_status != 0)  
  •         {
  •                 if (intr_dmai_status & uPP_INT_EOL)
  •                 {
  •                         uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOL);
  •                 }

  •                 // 窗口接收完成
  •                 if (intr_dmai_status & uPP_INT_EOW)
  •                 {
  •                         uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW);
  •                         upp_interrupt_count++;
  •                 }

  •                 if (intr_dmai_status & uPP_INT_ERR)
  •                 {
  •                         uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_ERR);
  •                         upp_error_count++;
  •                 }

  •                 if (intr_dmai_status & uPP_INT_UOR)
  •                 {
  •                         uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_UOR);
  •                         upp_error_count++;
  •                 }

  •                 if (intr_dmai_status & uPP_INT_DPE)
  •                 {
  •                         uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_DPE);
  •                         upp_error_count++;
  •                 }

  •                 // make sure all interrupts are handled
  •                 intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);
  •         }

  •         // finally: write 0 to EOI register
  •         uPPEndOfInt(SOC_UPP_0_REGS);
  • }



  • /****************************************************************************/
  • /*                                                                          */
  • /*              uPP注册中断                                                           */
  • /*                                                                          */
  • /****************************************************************************/
  • void uPPIntRegister(unsigned int cpuINT )
  • {
  •         IntRegister(cpuINT, uPPIsr);
  •         IntEventMap(cpuINT, SYS_INT_UPP_INT);
  •         IntEnable(cpuINT);

  • }


  • /****************************************************************************/
  • /*                                                                          */
  • /*              初始化uPP                                                           */
  • /*                                                                          */
  • /****************************************************************************/
  • void OmaplFpgauPPSetup(void)
  • {
  •         PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UPP, PSC_POWERDOMAIN_ALWAYS_ON,
  •                                      PSC_MDCTL_NEXT_ENABLE);

  •         // 引脚复用配置
  •         uPPPinMuxSetup(uPP_CHA_8BIT);

  •         // uPP复位
  •         uPPReset(SOC_UPP_0_REGS);

  •         // 数据格式配置
  •         uPPDataFmtConfig(SOC_UPP_0_REGS, uPP_CHA, uPP_DataPackingFmt_LJZE | uPP_DataPacking_FULL
  •                                                         | uPP_InterfaceWidth_8BIT | uPP_DataRate_SINGLE);

  •         // 通道配置
  •         uPPChannelConfig(SOC_UPP_0_REGS, uPP_DDRDEMUX_DISABLE | uPP_SDRTXIL_DISABLE | uPP_CHN_ONE
  •                                                         | uPP_ALL_RECEIVE);

  •         // 引脚配置
  •         uPPPinConfig(SOC_UPP_0_REGS, uPP_CHA, uPP_PIN_TRIS | uPP_PIN_WAIT | uPP_PIN_ENABLE | uPP_PIN_START);

  •         // 时钟配置
  •         uPPClkConfig(SOC_UPP_0_REGS, uPP_CHB, 57000000, 228000000, uPP_PIN_PHASE_NORMAL);

  •         // 中断使能
  •         uPPIntEnable(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW);

  •         // 中断映射
  •         IntRegister(C674X_MASK_INT5, uPPIsr);//DSP可屏蔽中断5
  •         IntEventMap(C674X_MASK_INT5, SYS_INT_UPP_INT);//将UPP中断映射到cpu中断
  •         IntEnable(C674X_MASK_INT5);//使能UPP外设

  •         // uPP使能
  •         uPPEnable(SOC_UPP_0_REGS);
  • }



  • /****************************************************************************/
  • /*                                                                          */
  • /*              DSP 中断初始化                                              */
  • /*                                                                          */
  • /****************************************************************************/
  • void InterruptInit(void)
  • {
  •         // 初始化 DSP 中断控制器
  •         IntDSPINTCInit();

  •         // 使能 DSP 全局中断
  •         IntGlobalEnable();
  • }



  • /****************************************************************************/
  • /*                                                                          */
  • /*              主函数                                                            */
  • /*                                                                          */
  • /****************************************************************************/
  • void main(void)
  • {
  •         int i,j;
  •         char ch[2];
  •        
  •         /* 初始化串口终端 使用串口2*/
  •         UARTStdioInit();
  •         UARTprintf( "\r\n" );
  •         UARTprintf( "=================================================\r\n" );
  •         UARTprintf( "=== uPP A Receive Demo : Start\r\n" );
  •         UARTprintf( "=================================================\r\n" );

  •         // DSP 中断初始化
  •         InterruptInit();

  •         // uPP 初始化
  •         OmaplFpgauPPSetup();


  •         UARTprintf ("\tStarting uPP transfers...\r\n");

  •         // A通道参数 接收
  •         transposeParA.WindowAddress = (unsigned int *)((int)data);
  •         transposeParA.LineCount = upp_line_count;
  •         transposeParA.ByteCount = (upp_line_size*sizeof(signed short )) ;
  •         transposeParA.LineOffsetAddress = (upp_line_offset*sizeof(signed short));

  •         while(1)
  •         {
  •                
  •                 upp_error_count = 0;
  •         upp_interrupt_count = 0;

  •          //通道A启动传输
  •         uPPDMATransfer(SOC_UPP_0_REGS, uPP_DMA_CHI, &transposeParA);
  •                

  •         //等待upp传输完毕       
  •          while (upp_interrupt_count == 0 && upp_error_count == 0)
  •                 {

  •                         Delay(0x0ff);
  •                         i++;
  •                         if(i == 50)
  •                         {
  •                            UARTprintf( "ERROR : UPP timeout occurred, aborting transfer ...\r\n" );
  •                            break;
  •                         }
  •                 }

  •            UARTPuts("\tDo you want to print all the data?(y/n)",-2);
  •            UARTGets(ch,2);
  •           UARTPuts("\n", -2);

  •                 /*打印全部读到的数据*/
  •                 if(ch[0] == 'y')
  •          {
  •                 for(i=0; i<upp_frame_size/2;i++ )
  •                  {
  •                         for(j=1; j<=3; j++)
  •                         {
  •                                 UARTprintf("data[%d]=%d   ",i,data);

  •                                 if(i >= upp_frame_size/2)
  •                                         break;
  •                         }
  •                         UARTPuts("\n",-2);
  •                  }
  •          }

  •                 UARTPuts("\n",-2);
  •                 UARTPuts("\n",-2);
  •                 UARTPuts("\n",-2);
  •                 UARTPuts("\n",-2);
  •                 UARTPuts("\n",-2);
  •                 UARTPuts("\n",-2);
  •         }
  • }



  • /****************************************************************************/
  • /*                                                                          */
  • /*              延时                                                        */
  • /*                                                                          */
  • /****************************************************************************/
  • static void Delay(volatile unsigned int count)
  • {
  •     while(count--);
  • }


复制代码

2020-4-1 11:30:38 评论

举报



你好  解决了吗?我也在做这个  遇到一些问题  想和你讨论一下  我的QQ448916030   期待你的回复
2020-4-1 11:49:26 评论

举报

只有小组成员才能发言,加入小组>>

49个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表