老師您好,有幾個(gè)i2c的問(wèn)題要請(qǐng)教一下,我用了例程中的app_i2c.c庫(kù)函數(shù),在串口轉(zhuǎn)i2c通訊的時(shí)候,快速頻繁收發(fā)數(shù)據(jù)時(shí),偶爾會(huì)死機(jī),我懷疑是不是總線總裁方面的問(wèn)題,或者是中斷優(yōu)先級(jí)的問(wèn)題,請(qǐng)問(wèn)老師各個(gè)中斷的優(yōu)先級(jí)從哪個(gè)函數(shù)里面設(shè)置,還有總站總裁是自動(dòng)的還是需要配置一下的?如果需要配置,在哪個(gè)函數(shù)里配置?謝謝老師
您好,您用的是582的硬件IIC主機(jī)還是從機(jī),主機(jī)的話可以先用GPIO模擬IIC調(diào)試,參考代碼見(jiàn)模擬I2C主機(jī)(CH579 CH573 CH582) - debugdabiaoge - 博客園 (cnblogs.com)。
調(diào)整中斷優(yōu)先級(jí)可以使用函數(shù) PFIC_SetPriority() 。
總線仲裁是硬件自帶功能,只可選擇是否上報(bào)錯(cuò)誤,默認(rèn)開啟。建議開啟上報(bào)功能,即置位I2C_STAR1寄存器的ARLO位,這樣出現(xiàn)總線相關(guān)異常時(shí)會(huì)有上報(bào)提示,關(guān)閉上報(bào)功能并不會(huì)使波形正常。您手頭若有邏輯分析儀等抓包工具,可以抓個(gè)包檢查一下主線仲裁出錯(cuò)時(shí)的SDA上的波形,是否在傳輸過(guò)程中受到串?dāng)_。
您可以將主/從機(jī)設(shè)備型號(hào)、調(diào)試代碼、打印截圖等信息發(fā)送至郵箱zhaiyw@wch.cn,年后我們會(huì)嘗試復(fù)現(xiàn)和定位問(wèn)題。
感謝工程師回復(fù),我用的是ch582m 使用的是硬件iic 要求是沒(méi)有操作時(shí)處于從機(jī)接收模式 用來(lái)接收另一個(gè)系統(tǒng)發(fā)來(lái)的指令,當(dāng)有操作時(shí)轉(zhuǎn)換為主機(jī)模式 對(duì)另一個(gè)系統(tǒng)發(fā)送數(shù)據(jù),我再研究一下看看 有問(wèn)題在請(qǐng)教您 感謝感謝 另外問(wèn)一下 582是否可以設(shè)置兩個(gè)從機(jī)地址?我想讓它代替兩個(gè)不同地址的i2c從機(jī)設(shè)備,我看32v203介紹好像可以,
可以設(shè)置雙從機(jī)地址的,CH58x.i2c.c文件中有配置函數(shù)如下。
IIC中斷處理過(guò)程中也要注意一下帶有_SECONDADDRESS_的宏,使用了與第一地址不同的數(shù)值。
感謝老師指導(dǎo)!!我學(xué)習(xí)一下!!
問(wèn)題已經(jīng)解決了,打擾老師了
老師您好,還要麻煩咨詢個(gè)問(wèn)題,PFIC_SetPriority() 中斷優(yōu)先級(jí)函數(shù),這個(gè)得具體用法能否給說(shuō)一下,我看可設(shè)置得中斷總共是21個(gè),函數(shù)說(shuō)明 4-6bit和7bit 各控制搶占優(yōu)先級(jí)和次優(yōu)先級(jí),不太明白這個(gè)怎么設(shè)置,麻煩老師有時(shí)間給說(shuō)一下,謝謝
優(yōu)先級(jí)都是數(shù)值越小,優(yōu)先級(jí)別越高。
搶占優(yōu)先級(jí)決定是否能夠嵌套運(yùn)行中斷。當(dāng)?shù)?位的搶占優(yōu)先級(jí)更高時(shí),可以嵌套搶占當(dāng)前正在運(yùn)行的搶占優(yōu)先級(jí)更低的中斷。同級(jí)搶占優(yōu)先級(jí)不能嵌套,需等待前一個(gè)中斷執(zhí)行完成。582有2級(jí)中斷嵌套,即只能搶占一次。
副優(yōu)先級(jí)決定同時(shí)產(chǎn)生中斷時(shí),先處理哪個(gè)中斷(非嵌套)。在同級(jí)搶占優(yōu)先級(jí)的情況下,若同時(shí)產(chǎn)生兩個(gè)中斷,先處理副優(yōu)先級(jí)高的。在同級(jí)搶占優(yōu)先級(jí)的情況下,新產(chǎn)生的高副優(yōu)先級(jí)中斷,仍要等待正在進(jìn)行的低副優(yōu)先級(jí)中斷。如果兩個(gè)中斷的搶占優(yōu)先級(jí)和副優(yōu)先級(jí)都相同,則查下表按順序處理。
感謝老師這個(gè)也最解決了,還有個(gè)問(wèn)題請(qǐng)教,串口中斷 超時(shí)接收說(shuō)是等待4個(gè)數(shù)據(jù)時(shí)間,請(qǐng)問(wèn)老師4個(gè)數(shù)據(jù)時(shí)間是多久?是接收4字節(jié)需要的時(shí)間嗎?謝謝
4個(gè)數(shù)據(jù)的時(shí)間要根據(jù)波特率和其他串口配置來(lái),1個(gè)起始位,8個(gè)數(shù)據(jù)位,1個(gè)停止位,115200波特率下,4個(gè)數(shù)據(jù)的時(shí)間大概是4*(1+8+1)/115200(s)
請(qǐng)問(wèn)老師 串口接受超時(shí)中斷的等待時(shí)長(zhǎng)是4個(gè)數(shù)據(jù)時(shí)間,這個(gè)時(shí)間能不能修改,比如改成2個(gè)數(shù)據(jù)時(shí)間或者3個(gè)數(shù)據(jù)時(shí)間
這個(gè)改不了,沒(méi)有相關(guān)寄存器可以配置該項(xiàng)。