? //SPI調(diào)試總結(jié):
? //把時鐘設(shè)置為30MHz,傳輸一個字節(jié)為0.3us。
? //我發(fā)現(xiàn)CH573指令運(yùn)行速度很慢,直接FIFO賦值8個字節(jié)時,已經(jīng)有3字節(jié)傳輸完成,R8_SPI0_FIFO_COUNT==5
? //當(dāng)使用while或for循環(huán)指令時,空循環(huán)里面只發(fā)一個FIFO賦值,一個循環(huán)就有1-2us,所以可以直接FIFO賦值,不用擔(dān)心溢出。
? //使用DMA時,要注意使用內(nèi)存地址循環(huán)時,會一直發(fā)數(shù)據(jù)以保持FIFO為滿,當(dāng)R16_SPI0_TOTAL_CNT為0時,F(xiàn)IFO還是滿的,有8個數(shù)據(jù)在FIFO未發(fā)送
? //當(dāng)下一次開啟SPI發(fā)送時會發(fā)現(xiàn)前8個數(shù)據(jù)不對,第9個數(shù)據(jù)才是要發(fā)送的第1個數(shù)據(jù)
? //在使用DMA內(nèi)存地址不循環(huán)時,要保證R16_SPI0_DMA_END-R16_SPI0_DMA_BEG=R16_SPI0_TOTAL_CNT,否則也行出現(xiàn)上面的問題。
? //因為DMA只能對內(nèi)存操作,而且CH573指令運(yùn)行速度慢,一般傳送非相同字節(jié)用DMA沒有意義。
以上是我調(diào)試SPI的總結(jié),如有不對,望大師指證。