在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1955|回复: 0

[求助] 如何在microblaze搭建的系统内抓取spi的输出波形

[复制链接]
发表于 2021-7-15 10:47:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好,我最近在做SPI控制外部DAC的实验,但是遇到了很多问题,如果您有相应的经验,请帮我看看我哪里做的有问题:[软件版本VIVADO2019.2VITIS2019.2]
如下图,我在block design中加入的第二个spi模块(第一个spi模块是用来烧写FLASH的),意图是控制外部的DAC,想用ILA抓图发送的数据,所以手动添加了一个SYSTEM_ILA,手动连线到SPI的四根线,并选中4个网络,如下图中的MOSI,MISO,SCKSSn,右键DEBUG,但是正如图所示,只有输出的位置有3个小爬虫,在输入引脚MISO那个线上并没有小爬虫,这个十分困惑。
file:///C:/Users/dell/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
在生成BIT文件的时候,遇到了CRITICAL WARNING,代码如下:
[Chipscope 16-3] Cannot debug net'system_wrapper_i/axi_quad_spi_1_sck_o'; it is connected between In/Out buffer andIn/Out flip flop having property IOB true.
[Chipscope 16-3] Cannot debug net'system_wrapper_i/system_ila_0/inst/probe2_1'; it is connected between In/Outbuffer and In/Out flip flop having property IOB true.
我理解这个警告时SCK引脚这个不能被用来做debug,但是我想看的话,应该怎么做呢?
还有一个联合调试的问题,我导出XSA,用VITIS写了一个SPI的控制程序,基于SPI例子里的polled mode例子。我仅仅修改了LOOKBACK部分:
    //Status = XSpi_SetOptions(SpiInstancePtr,XSP_MASTER_OPTION |
    //              XSP_LOOPBACK_OPTION);
    Status= XSpi_SetOptions(SpiInstancePtr, XSP_MASTER_OPTION );
因为我想将数据发送到SPI BUS上,所以没用XSP_LOOPBACK_OPTION仅仅将SPI设置成MASTER,然后将程序用debug的形式下载到FPGA中,这时在VIVADO界面上就能看到ILA的界面了:
file:///C:/Users/dell/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
如上图,因为SSn平时是高电平,所以在触发里设置了0作为触发值,点击三角箭头,这样在status里就能看到waiting for trigger了,但是我在VITIS里按F6运行时序的时候,在VIVADO界面并没有抓到触发的波形,请问,是我哪里做的不对吗?
或者谁有用MICROBLAZE里的SPI控制DAC的例子可以给我参考下,自己一步一步摸索下来效率太低了。
VITIS的完整代码如下,和例子基本相同,就是修改了LOOKBACK部分:
#include "xparameters.h"    /* XPAR parameters */
#include "xspi.h"       /* SPI devicedriver */
#include "xspi_l.h"
#include "xil_printf.h"
#define SPI_DEVICE_ID       XPAR_SPI_1_DEVICE_ID
#define BUFFER_SIZE     8
typedef u8 DataBuffer[BUFFER_SIZE];
int SpiPolledExample(XSpi *SpiInstancePtr, u16 SpiDeviceId);
static XSpi  SpiInstance;   /* The instance of the SPI device */
u8ReadBuffer[BUFFER_SIZE];
u8WriteBuffer[BUFFER_SIZE];
int main(void)
{
    int Status;
    Status= SpiPolledExample(&SpiInstance, SPI_DEVICE_ID);
    if (Status != XST_SUCCESS){
        xil_printf("Spi polled Example Failed\r\n");
        return XST_FAILURE;
    }
    xil_printf("Successfully ran Spi polledExample\r\n");
    return XST_SUCCESS;
}
int SpiPolledExample(XSpi *SpiInstancePtr, u16 SpiDeviceId)
{
    int Status;
    u32 Count;
    u8 Test;
    XSpi_Config *ConfigPtr; /* Pointer toConfiguration data */
    ConfigPtr= XSpi_LookupConfig(SpiDeviceId);
    if (ConfigPtr == NULL) {
        return XST_DEVICE_NOT_FOUND;
    }
    Status= XSpi_CfgInitialize(SpiInstancePtr, ConfigPtr,
                  ConfigPtr->BaseAddress);
    if (Status != XST_SUCCESS){
        return XST_FAILURE;
    }
    Status= XSpi_SelfTest(SpiInstancePtr);
    if (Status != XST_SUCCESS){
        return XST_FAILURE;
    }
    if (SpiInstancePtr->SpiMode != XSP_STANDARD_MODE) {
        return XST_SUCCESS;
    }
    //Status = XSpi_SetOptions(SpiInstancePtr,XSP_MASTER_OPTION |
    //              XSP_LOOPBACK_OPTION);
    Status= XSpi_SetOptions(SpiInstancePtr, XSP_MASTER_OPTION );
    if (Status != XST_SUCCESS){
        return XST_FAILURE;
    }
    XSpi_Start(SpiInstancePtr);
    XSpi_IntrGlobalDisable(SpiInstancePtr);
    Test= 0x10;
    for (Count = 0; Count <BUFFER_SIZE; Count++) {
        WriteBuffer[Count]= (u8)(Count + Test);
        ReadBuffer[Count]= 0;
    }
    XSpi_Transfer(SpiInstancePtr,WriteBuffer, NULL, BUFFER_SIZE);
    return XST_SUCCESS;
}
VIVADOBLOCK DESIGN的完整视图如下,估计太小了看不清楚:
file:///C:/Users/dell/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-20 22:40 , Processed in 0.018425 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表