I2C start訊號到SCL第乙個上公升沿時間太長

2021-10-08 19:14:32 字數 1085 閱讀 6883

日常工作中,遇到過如題的問題,當時不知道原因,今天在****的時候,無意中發現了如題的不良現象,如下是keil **的gpio模擬i2c的結果

//i2c寫ch450 兩個位元組命令

放大以後波形(測量時間間隔為33.5us,在24m 晶振對應12個機器指令週期,1個機器指令週期0.5us的條件下,對應67個機器指令週期)

開啟除錯命令按鈕,檢視彙編**:

迴圈前(0x0982到0x0984):3個指令週期;

迴圈體(0x0985到098b):有8個指令週期;迴圈次數是7次,迴圈一共有56個指令週期;

其他(0x098c~0x0993):有8個指令週期

t total=3+56+8=67個指令週期,因此從start訊號結束到第乙個i2c_clk 拉高,理論時間為33.5us,資料剛好符合

【改善對策】

根據ch450的規格書,我們可以對問題的**,在晶元規格書的要求下進行優化,第乙個位元組資料直接用規格數上的0x48,0x4f,0x64,0x66,0x68,0x6a,0x6c,0x6e 來直接定位,而不是用複雜的語句來表示。

【實際效果】

對比之前的33.5us的時間間隔,調整以後的時間間隔縮短到8us以內,改善效果明顯。

2 第乙個lua程式

1.建立乙個lua的c 專案 2.指定lua的源 路勁 專案 屬性 配置屬性 c c 常規 附加包含路勁 1.luadll luadll 3.新增lua的lib路勁和庫名 1.專案 屬性 配置屬性 鏈結器 高階 附加庫目錄 lib 2.專案 屬性 配置屬性 鏈結器 輸入 附加依賴項 新增luadll...

2 第乙個Python程式

第乙個程式 helloworld helloworld 一直都是每一門語言經典的第一課,就是使用那一種語言輸出 helloworld 的字串 print hello world 非常簡單,只需要一行就行。那麼。已經有了,如何去使用它呢?我們有兩種快速的使用方法.1 使用互動式python環境輸出 2...

struts2 第乙個程式

struts1 control center right forward web inf page controlcenter right.jsp struts2 比struts1 省略好多 control center extends struts default execute 是方法名 web...