日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AXI quad SPI没有输出

發(fā)布時間:2024/10/14 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AXI quad SPI没有输出 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AXI quad SPI沒有輸出(已解決)

在使用ZYNQ的AXI quad SPI時遇到以下問題:
使用loopback可以成功,但是使用示波器測量引腳卻沒有輸出。


問題描述:

最近在用ZYNQ的AXI quad SPI拓展接口,卻遇到了這個問題:
添加AXI quad SPI核,編譯完畢后。使用官方例程,loopback模式可以跑通,但是正常輸出模式無法工作,且用示波器測試引腳輸出沒有波形。

IP核AXI quad SPI的設(shè)置如下:

程序為AXI quad SPI官方的 xspi_polled_example:

/***************************** Include Files *********************************/#include "xparameters.h" /* XPAR parameters */ #include "xspi.h" /* SPI device driver */ #include "xspi_l.h" #include "xil_printf.h"/************************** Constant Definitions *****************************//** The following constants map to the XPAR parameters created in the* xparameters.h file. They are defined here such that a user can easily* change all the needed parameters in one place.*/ #define SPI_DEVICE_ID XPAR_SPI_0_DEVICE_ID/** This is the size of the buffer to be transmitted/received in this example.*/ #define BUFFER_SIZE 12/**************************** Type Definitions *******************************//** The following data type is used to send and receive data on the SPI* interface.*/ typedef u8 DataBuffer[BUFFER_SIZE];/***************** Macros (Inline Functions) Definitions *********************//************************** Function Prototypes ******************************/int SpiPolledExample(XSpi *SpiInstancePtr, u16 SpiDeviceId);/************************** Variable Definitions *****************************//** The instances to support the device drivers are global such that the* are initialized to zero each time the program runs.*/ static XSpi SpiInstance; /* The instance of the SPI device *//** The following variables are used to read and write to the Spi device, they* are global to avoid having large buffers on the stack.*/ u8 ReadBuffer[BUFFER_SIZE]; u8 WriteBuffer[BUFFER_SIZE];/*****************************************************************************/ /** * * Main function to call the Spi Polled example. * * @param None * * @return XST_SUCCESS if successful, otherwise XST_FAILURE. * * @note None * ******************************************************************************/ int main(void) {int Status;/** Run the Spi Polled example.*/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 polled Example\r\n");return XST_SUCCESS; }/*****************************************************************************/ /** * * This function does a minimal test on the Spi device and driver as a * design example. The purpose of this function is to illustrate how to use * the XSpi component using the polled mode. * * This function sends data and expects to receive the same data. * * * @param SpiInstancePtr is a pointer to the instance of Spi component. * @param SpiDeviceId is the Device ID of the Spi Device and is the * XPAR_<SPI_instance>_DEVICE_ID value from xparameters.h. * * @return XST_SUCCESS if successful, otherwise XST_FAILURE. * * @note * * This function contains an infinite loop such that if the Spi device is not * working it may never return. * ******************************************************************************/ int SpiPolledExample(XSpi *SpiInstancePtr, u16 SpiDeviceId) {int Status;u32 Count;u8 Test;XSpi_Config *ConfigPtr; /* Pointer to Configuration data *//** Initialize the SPI driver so that it is ready to use.*/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;}/** Perform a self-test to ensure that the hardware was built correctly.*/Status = XSpi_SelfTest(SpiInstancePtr);if (Status != XST_SUCCESS) {return XST_FAILURE;}/** Run loopback test only in case of standard SPI mode.*/if (SpiInstancePtr->SpiMode != XSP_STANDARD_MODE) {return XST_SUCCESS;}/** Set the Spi device as a master and in loopback mode.*/Status = XSpi_SetOptions(SpiInstancePtr, XSP_MASTER_OPTION |XSP_LOOPBACK_OPTION);if (Status != XST_SUCCESS) {return XST_FAILURE;}/** Start the SPI driver so that the device is enabled.*/XSpi_Start(SpiInstancePtr);/** Disable Global interrupt to use polled mode operation*/XSpi_IntrGlobalDisable(SpiInstancePtr);/** Initialize the write buffer with pattern to write, initialize the* read buffer to zero so it can be verified after the read, the* Test value that is added to the unique value allows the value to be* changed in a debug environment.*/Test = 0x10;for (Count = 0; Count < BUFFER_SIZE; Count++) {WriteBuffer[Count] = (u8)(Count + Test);ReadBuffer[Count] = 0;}/** Transmit the data.*/XSpi_Transfer(SpiInstancePtr, WriteBuffer, ReadBuffer, BUFFER_SIZE);/** Compare the data received with the data that was transmitted.*/for (Count = 0; Count < BUFFER_SIZE; Count++) {if (WriteBuffer[Count] != ReadBuffer[Count]) {return XST_FAILURE;}}return XST_SUCCESS; }

編譯下載之后,串口提示運行成功,

將loopback模式關(guān)閉,設(shè)置為禁止loopback,CPOL = 1 CPHA = 1。

Status = XSpi_SetOptions(SpiInstancePtr, XSP_MASTER_OPTION |XSP_LOOPBACK_OPTION); //修改為禁止loopback,CPOL = 1 CPHA = 1 Status = XSpi_SetOptions(SpiInstancePtr, XSP_MASTER_OPTION |XSP_CLK_PHASE_1_OPTION | XSP_CLK_ACTIVE_LOW_OPTION);

然后,把mosi引腳和miso引腳短接。然后編譯、下載,提示運行錯誤

使用示波器測量SCK、mosi引腳,發(fā)現(xiàn)沒有波形。


原因分析:

然后在Xilinx的論壇上發(fā)現(xiàn)也有人反饋這個問題,最后原因好像是:
因為SS0的引腳一直輸出是高電平引起的,我后來將程序修改為持續(xù)向SPI發(fā)送數(shù)據(jù),發(fā)現(xiàn)確實是SS0引腳一直是高電平(剛燒寫完程序,SS0也會持續(xù)一段時間的高電平)。
個人認為可能是SPI自動選擇從機編號發(fā)生了問題。


解決方案:

參考論壇中的解決方法,具體解決方案:
將從機選擇設(shè)置為手動選擇(XSP_MANUAL_SSELECT_OPTION)

Status = XSpi_SetOptions(SpiInstancePtr, XSP_MASTER_OPTION |XSP_CLK_PHASE_1_OPTION | XSP_CLK_ACTIVE_LOW_OPTION | XSP_MANUAL_SSELECT_OPTION);

然后再在SPI禁止中斷語句之后,加入選擇從機編號的語句。(1號從機的選擇引腳就是SS0)

/** Disable Global interrupt to use polled mode operation*/XSpi_IntrGlobalDisable(SpiInstancePtr);XSpi_SetSlaveSelect(SpiInstancePtr, 0x01); //選擇從機編號

經(jīng)過以上修改后,再次編譯燒寫,程序運行正確。

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的AXI quad SPI没有输出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产在线视频你懂的 | 久久亚洲av无码精品色午夜麻豆 | 午夜视频h | 黄色片免费在线 | 亚洲第一第二区 | 奇米网久久| 在线se| 精品视频一区二区三区四区五区 | 色一情一乱一伦 | 香港三日本8a三级少妇三级99 | 91宅男 | 女人下面流白浆的视频 | 日本特黄一级大片 | 男女黄床上色视频 | 五月天丁香网 | 亚洲精品第一 | 就是色 | 日本japanese乳偷乱熟 | 久久精品黄 | 贝利弗山的秘密1985版免费观看 | 美女张开腿让男人操 | 国内久久久 | 在线观看欧美精品 | 先锋影音av资源站 | 亚洲成色网 | 综合久久av | 欧美日韩国产一区二区三区在线观看 | 亚洲成人激情av | 欧美性videos高清精品 | 国产一区91精品张津瑜 | 欧美一区二区三区视频 | 超碰.com| 日韩精品第三页 | 无码精品一区二区三区AV | 久草影视在线观看 | 国产精品毛片一区二区 | 91高跟黑色丝袜呻吟在线观看 | 视频在线观看视频 | h网址在线观看 | 国产精品一区在线免费观看 | 国产美女福利视频 | 中文字幕免费观看 | 欧美性受xxxx白人性爽 | 国产精品美女在线观看 | 黄色精品网站 | 91国内产香蕉 | 人妻一区二区三区 | 亚洲成人黄色影院 | 亚洲av无码一区二区三区四区 | 涩涩成人网 | 农村少妇无套内谢粗又长 | 亚洲性欧美色 | 国产色网址 | av在线影片 | 贝利弗山的秘密1985版免费观看 | 欧美人一级淫片a免费播放 西方av在线 | 欧美性免费 | 97麻豆| 日韩六区| 久草视频精品在线 | 国产精品网站免费 | 波多野在线播放 | 国产高清在线免费 | 国产手机在线观看 | 偷自拍 | 日韩中文在线视频 | 国产精品高清在线观看 | 天天综合干 | 一区免费观看 | 91久久国产精品 | 福利社午夜影院 | 成人激情小视频 | 你懂的在线免费观看 | 手机看片国产日韩 | 久草资源在线观看 | 欧美经典一区二区 | a级片在线免费看 | 中文字幕亚洲日本 | 日韩色中色| 日本不卡视频在线观看 | 日本一本不卡 | 宅男在线视频 | 国产91精品久久久久久久网曝门 | 亚洲色图网站 | www香蕉视频 | 中文字幕一区在线 | 亚洲国产精品成人无久久精品 | 永久免费黄色 | 国产免费一区二区三区在线观看 | 两个女人互添下身爱爱 | 亚洲欧美国产毛片在线 | 在线色播 | 岛国裸体写真hd在线 | 免费看裸体视频网站 | 亚洲在线一区 | 性欧美一区二区 | 被扒开腿一边憋尿一边惩罚 | 日本伊人色 | 日韩少妇内射免费播放18禁裸乳 |