ADXL345采用I2C模式與tms320vc5509A接口
VC5509A包含I2C外設接口,可以方便的與ADXL345通信。在調試中,使用了實驗室自制的DSP主板SDUST VC5509A V1.1。該板的JP2擴展接口引出了I2C總線。該主板上也使用I2C總線完成與AIC23B的配置,但由于I2C總線可掛置多個外設,所以無需再連接一片ADXL345,不會有影響。
本文引用地址:http://www.104case.com/article/201808/385323.htm由于ADXL345不容易焊接,所以在買芯片時也購買了飛拓電子的PCB板。在該PCB板上已經添加了去耦電容、上拉電阻等。下圖為VC5509A主板與ADXL345模塊的連線示意圖。

ADXL345與5509A主板連線(I2C)示意圖
分析原理圖,ADXL345需要3.3V供電,直接使用5509A主板來提供,而不使用345小板上的5V轉換,所以5V引腳空缺即可。CS引腳懸空,因為在模塊中已經將其上拉,表示采用I2C模式通信。將SDO下拉,I2C地址為0x53(若上拉,I2C地址為1D)。將INT1n輸出與主板的INT0n相連,將SDA和SCL線對應連接。圖中標注的U1引腳為5509A主板上擴展口JP2對應的引腳編號。
下圖為完整的原理圖:

ADXL345與5509A主板連線(I2C)原理圖
調試要點小結:
1)ADXL345的中斷默認是高電平有效,而5509A默認是低電平有效,所以開始要修改一下。通過設置DATA_FORMAT(0x31)寄存器中的DATA_INVERT位,將其置1即表示低電平有效。
2)修改CPLD代碼,將INT0輸出由1改為高阻抗。
3)可通過讀取寄存器DEVID,來判斷I2C讀是否正常。該寄存器的數據固定為0xE5,若數據讀取正確,則表明I2C讀取函數編寫無誤。
4)連續讀取寄存器,會出現總線忙的錯誤,需要在讀取數據完畢后添加一必要的延時。
5)調試總結發現,雖然5509A的手冊中寫明外部中斷是低電平有效的,但實際應為下降沿有效。由于ADXL345運行狀態的不確定性,在使能中斷前,INT1輸出就可能已經拉低了。這時即便使能外部中斷,也無法按預想的進入中斷子程序。需要想辦法將INT1 清除一次,這樣才有機會觸發中斷。所以在中斷使能后,通過讀取寄存器的方式來實現清除中斷,以觸發中斷循環。
6)發現CSL中的I2C讀寫函數相當耗費時間。觀察其大約占用380000個指令周期,在144MHz的速率下,大約消耗2.6ms。而設定的ADXL345的數據輸出速率為200Hz,遠遠跟隨不上。在每個中斷中,至少需要7個讀寫指令,單純這部分的耗時就達到了18.2ms。也就是說當使用I2C總線時,ADXL345的數據輸出速率最高只能設為50Hz。
7)最后測試,將速率設置為25Hz,通過示波器觀察中斷,大約40ms中斷一次,對應25Hz。中斷的低電平時間基本一致,說明能夠規律的進入中斷。將速率設置為50Hz,觀察中斷,大約20ms中斷一次,對應50Hz。進入中斷也比較規律。當設置為100Hz時,中斷不再呈現周期性,低電平保持時間也不一致。說明出現了中斷嵌套的現象。與推斷一致。
評論