Zynq
賽靈思公司(Xilinx)推出的行業第一個可擴展處理平台Zynq系列。旨在為視頻監視、汽車駕駛員輔助以及工廠自動化等高端嵌入式應用提供所需的處理與計算性能水平。Zynq中包含FPGA資源和ARM資源,可用AXI片內總線進行互聯。
PS端的SPI
在zynq中,PS端有兩個SPI控制器,每個控制器可以接3個設備,因為zynq除了ARM之外,還含有FPGA資源,因此可以利用FPGA資源將SPI控制器可控制的設備進行一個擴展,本次在使用SPI中遇到了一些問題,在此記下。
使用SPI控制DAC8811的問題描述
設計中,做了一個程控放大器,采用的芯片是DAC8811,這個芯片是采用SPI進行通訊,它里面是一個16位的寄存器,每次通過SPI寫這個16位的寄存器就可以達到調整輸出的目的。但是使用zynq的SPI控制控制該設備后,因為zynq提供的SPI的裸機驅動,每次只能發送一個字節,因此控制DAC8811的寄存器更新需要發送兩個字節。我使用spi連續發送兩個字節后,程控放大器的放大倍數和我設置的有區別,更改寫入的值出現貌似無規律的跳變,無法對該芯片進行正常的控制。
原因
將spi輸出的信號利用示波器進行觀察,發現似乎並沒有什么毛病,於是我將時鍾信號和片選信號都進行觀察,利用片選信號的上升沿捕捉信號,發現在發送了第一個字節后發第二個自字節的中間,片選信號由低電平跳變為高電平,這個時間是很短的,可以認為這是一個高頻信號。而DAC8811在片選信號上升沿時將會將寄存器中的值更新到輸出,這樣實際上就是寄存器只接收了一個字節就更新了,本來是應該接收兩個字節后更新的。
查看zynq的spi代碼,里面是有設置各個延時的函數的,但是設置了延時到最小值,還是會出現着這樣的問題。
解決方案