一直在折騰前段時間畫好的dm642+lpc4357板子,說明下這個板子的結構:python
真是好事多磨,以前由於焊接問題搞了一陣子,後來HPI也遇到問題,終於弄通了,記錄下!eclipse
經過LPC4357的EMC鏈接DM642的HPI16,測試硬件天然力求簡單,超簡單的程序(原本HPI的結構也很簡單):異步
void HPI_test(void) { volatile uint32_t pdat; HPI_Init(LPC_EMC_BASE); volatile uint32_t *pAddr=(volatile uint32_t*)HPIC_ADDR_RBASE; uint32_t x; while(1) { pAddr=(volatile uint32_t*)HPIC_ADDR_RBASE; pdat = *pAddr; pAddr=(volatile uint32_t*)HPIA_ADDR_RBASE; pdat = *pAddr; pAddr=(volatile uint32_t*)HPIDI_ADDR_RBASE; pdat = *pAddr; pAddr=(volatile uint32_t*)HPIDF_ADDR_RBASE; pdat = *pAddr; HPI_Write(0x22,0x12345678); x=HPI_Read(0x22); } }
經過單步調試來查看變量值來驗證正確性。一開始不如所意,偶然發現讀HPIC的值是正確的,但其它的就不行了,
調整EMC的時序,折騰幾晚(晚上弄的,不是公事)都不行,簡單的東西不通真是想破腦殼,分析理順了一下:測試
好吧,三個方面:時序問題、焊接問題(以前出過問題總會不那麼信任),WE(嚴重懷疑)。異步讀寫是最簡單的操做,
我把各個寄存器的時間都設置成最長,那麼時序問題的可能性很小了,WE能有什麼問題呢,想不明白。
只好繼續看參考手冊,又去看數據手冊,想找找波形圖,找到了個很簡陋的波形圖,發現PB=0的時候WE沒有動做,而PB=1
的時候WE動做了,那麼問題來了,仔細地把STATICCONFIG中的PB一個單詞不放過地看,終於找到問題了:ui
** Remark: When PB is set to 0, the WE signal is undefined or 0.
You must set PB to 1, to use the WE signal. **調試
坑爹啊,原本看這個位的名稱就是Byte lane state,跟WE又扯上關係了!設置好後,全部問題解決。後來HPI BOOT的問題就一次測試搞定了:code
寫了個小python程序將DM642的代碼(中斷向量須要在0地址)生成的.out文件中須要加載的段轉化成c程序,並組成一個鏈表,而後經過HPI
寫到DSP中並給一個DSPINT(須要設置DM642的啓動方式爲HPI),成功!視頻