本帖最后由 hawkgreen 于 2021-7-15 09:55 编辑
大家好,我最近在做SPI控制外部DAC的实验,但是遇到了很多问题,如果您有相应的经验,请帮我看看我哪里做的有问题:[软件版本VIVADO2019.2和VITIS2019.2] 如下图,我在block design中加入的第二个spi模块(第一个spi模块是用来烧写FLASH的),意图是控制外部的DAC,想用ILA抓图发送的数据,所以手动添加了一个SYSTEM_ILA,手动连线到SPI的四根线,并选中4个网络,如下图中的MOSI,MISO,SCK和SSn,右键DEBUG,但是正如图所示,只有输出的位置有3个小爬虫,在输入引脚MISO那个线上并没有小爬虫,这个十分困惑。
在生成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; } VIVADO的BLOCK DESIGN的完整视图如下,估计太小了看不清楚: file:///C:/Users/dell/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
|