CH592使用SPI驅(qū)動液晶屏,使用DMA搬運保存在FlashROM里的圖像數(shù)據(jù)(const數(shù)組),顯示內(nèi)容花屏,查看datasheet發(fā)現(xiàn)DMA搬運地址只有低15位有效,使用__attribute__強制指定const數(shù)組地址到FlashROM的前32K區(qū)域,仍然顯示花屏。是不是DMA不能訪問FlashROM,只能訪問SRAM的28K內(nèi)存?另外SPI的DMA是不是也不能從其他外設(shè)地址搬運數(shù)據(jù)到SPI發(fā)送緩沖?那么這個DMA功能和STM32比起來功能差好多,太雞肋了。如果圖片數(shù)據(jù)放在SRAM,使用DMA搬運速度還可以,而使用使用FIFO連續(xù)發(fā)送多字節(jié)刷圖片數(shù)據(jù)也太慢了,花費時間是DMA的6倍多。
DMA搬運的函數(shù)傳參只能是RAM地址,沒辦法是FLASH地址。
標準流程,應(yīng)該是,加一個緩存,將FLASH的數(shù)據(jù)先搬運到RAM緩存中,然后SPIDMA再從該緩存搬運數(shù)據(jù)。
可以發(fā)送郵件至zhaiyw@wch.cn,提供一份SPI驅(qū)動TFT的參考。
加一個緩存,將FLASH的數(shù)據(jù)先搬運到RAM緩存中,然后SPIDMA再從該緩存搬運數(shù)據(jù),該方法試過,速度還不如使用FIFO連續(xù)發(fā)送多字節(jié)的方法,從flash搬運數(shù)據(jù)到ram中還是太浪費時間了。
SPI的速度算2分頻,也就是30Mhz。
搬運的速度,使用memcpy搬運4K約100us,也就是40M/s的速度。是比SPI的速度要快的。
你這里搬運的速度如果比較慢,可以通過該方法處理。
該博客截圖里的代碼和給出的代碼文本不一致,另外博客內(nèi)容基本沒有文字說明,代碼修改流程不是太清除,按截圖和猜測修改后編譯報錯CH592EVT/EVT/EXAM/SRC/StdPeriphDriver/CH59x_sys.c:346: undefined reference to `__MCPY'
官方工程里似乎沒有包含__MCPY這個函數(shù)的鏈接,是另外實現(xiàn)的嗎?
查了一下內(nèi)核文件,CH584代碼工程里內(nèi)核文件用匯編實現(xiàn)了void __MCPY(void *dst, void *start, void *end)函數(shù),但是CH592和CH582這些芯片代碼工程里并未實現(xiàn),似乎是不支持mcpy匯編指令,復(fù)制CH584代碼工程里用匯編實現(xiàn)的void __MCPY(void *dst, void *start, void *end)函數(shù)到CH592工程里,編譯會報錯Error: unrecognized opcode `mcpy a2,a1,a0'
沒人解疑嗎?
沒人回復(fù)了嗎?
592可以參考:
感謝指導(dǎo),速度提升明顯,經(jīng)測試4K數(shù)據(jù)只需要116us