CH551G使用SDCC編譯非官方SPI程序時SCK異常問題(關(guān)聯(lián)CH552、CH554)

為什么在調(diào)用CH551G的SPI時,會在SCK前面出一個低電平?

而且需要后插3個nop才能保證SCK輸出時鐘數(shù)量和電平的正常?

波形.jpgQQ圖片20230103180634.jpg

以下是C代碼和用SDCC編譯后的匯編:

icon_rar.gif問題代碼.zip

(用論壇自帶的插入代碼功能總會把半角空格變成問號,只好打個zip提交上來。字符集編碼為UTF-8)

您好,

建議先測試單一SPI外設(shè)是否存在問題,檢查該SCK引腳是否存在與其他功能復(fù)用,硬件處理上,檢查該腳是否和其他器件相關(guān)。


C代碼就只有這些,沒有其他代碼

使用的只有SPI外設(shè)

SCK引腳沒有與其他功能復(fù)用

硬件只有一個CH551G,引腳輸出直接接的示波器探頭


well your code is very strange

check the clock programming i would do something like

CLOCK_CFG = (CLOCK_CFG & ~MASK_SYS_CK_SEL) | 0x06;


for sending spi data:

while (!S0_FREE)?

{

? ; /* wait till free */

}

SPI0_DATA? ? =? 0xAA;



摸索出解決辦法了,但是為什么這樣能解決?


先設(shè)置IO模式

? ? P1_MOD_OC? ? = 0x00 ;

? ? P1_DIR_PU? ? = 0xFF ;

? ? P3_MOD_OC? ? = 0x00 ;

? ? P3_DIR_PU? ? = 0xFF ;

再開啟并設(shè)置SPI0外設(shè)

? ? SPI0_CK_SE? ?= 0x02 ;

? ? SPI0_CTRL? ? = 0x68 ;

即使是給GPIO先置全1,也還會在SCK前面出一個低電平,出錯。


先開啟并設(shè)置SPI0外設(shè)

? ? SPI0_CK_SE? ?= 0x02 ;

? ? SPI0_CTRL? ? = 0x68 ;

再設(shè)置IO模式

? ? P1_MOD_OC? ? = 0x00 ;

? ? P1_DIR_PU? ? = 0xFF ;

? ? P3_MOD_OC? ? = 0x00 ;

? ? P3_DIR_PU? ? = 0xFF ;

就不會在SCK前面出一個低電平,完全正常。


需要后插3個nop才能保證SCK輸出時鐘數(shù)量和電平的問題使用發(fā)送完成檢測解決。


但是為什么先開啟并設(shè)置SPI0外設(shè),再設(shè)置IO模式,就能解決這個問題?

但是為什么先開啟并設(shè)置SPI0外設(shè),再設(shè)置IO模式,就能解決這個問題?

但是為什么先開啟并設(shè)置SPI0外設(shè),再設(shè)置IO模式,就能解決這個問題?

(重要的事說三遍)



不妨貼一下你現(xiàn)在完整的代碼工程。


最初的壓縮包里的代碼工程就是全部,僅僅只是修改了這些代碼的順序


確認是老版本PlatformIO自帶的SDCC版本有問題,更新到最新的PlatformIO和最新的SDCC后,再編譯工程,頂樓的代碼即使更換代碼順序后也會發(fā)生同樣的問題。

使用最新的PlatformIO和最新的SDCC,先開啟并設(shè)置SPI0外設(shè),再設(shè)置IO模式。將后插3個nop,更換為while ( S0_FREE == 0 ) ;后,SPI0正常工作。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频