Re: SAM2002 Lab driver 練習問題(SAMD21G17D)
|
||||
---|---|---|---|---|
管理員
|
這三個HANDLE放在一起宣告, 然後只有第三個錯誤嗎?
感覺上是打錯字或是沒有include sys_time 的 header file.
發表於: 2021/10/6 18:13
|
|||
|
Re: SAM2002 Lab driver 練習問題(SAMD21G17D)
|
||||
---|---|---|---|---|
新會員
|
Hi Libra,
感謝你的幫助~ 早上改polling mode就可以成功輸出,但還沒細想要怎麼改善. 我正在把Kit 上面的BME280 一起弄在drvier裏面當練習~ 遇到怪怪的問題,我在project 裡面做了第三個SYS_TIME_HANDLE SYS_TIME_HANDLE tmrHandle1; SYS_TIME_HANDLE tmrHandle2; SYS_TIME_HANDLE tmrHandle3; ===Complier output======== ../src/app_drv_i2c.c:78:1: error: unknown type name 'SYS_TIME_HANDLE'; did you mean 'SYS_TIME_INDEX_0'? SYS_TIME_HANDLE tmrHandle3; ^~~~~~~~~~~~~~~ ========================= 我Clients有開到9,是有其他限制嗎?
發表於: 2021/10/6 16:52
|
|||
|
Re: SAM2002 Lab driver 練習問題(SAMD21G17D)
|
||||
---|---|---|---|---|
管理員
|
改了SM2002 SPI1 OLED的Lab, 可以使用Driver實現 I2C(OLED+TempSensor+EEPROM+G-sensor), SPI(OLED) 由於I2C OLED原先採用 Two Byte transfer的方式實在是慢, [0x80] [Cmd Byte 0] , [0x80] [Cmd Byte 1] ... [0x80] [Cmd Byte n] , [0xC0] [Data Byte 0], [0xC0] [Data Byte 1], ... [0xC0] [Data Byte n], 建議改成連續Byte的操作方式(詳見SSD1306的Datasheet) // Bit 7 6 5 4 3 2 1 0 // Co D/C# 0 0 0 0 0 0 // Co : If the Co bit is set as logic “0”, the transmission of the following information will contain data bytes only. // D/C# : The D/C# bit determines the next data byte is a command or a data. // If the D/C# bit is set to logic “0”, it defines the following data byte as a command. // If the D/C# bit is set to logic “1”, it defines the following data byte as a data [0x00] [Cmd Byte 0] [Cmd Byte 1] ..... [Cmd Byte n] [0x40] [Data Byte 0] [Data Byte 1] ..... [Data Byte n] 我的I2C Driver Bus Write如下, 還是用Polling方式 避免Driver太晚處理到I2C Transfer Queue,
#define LCM_BUS_CMD 0x00
發表於: 2021/10/6 12:51
|
|||
|
Re: SAM2002 Lab driver 練習問題(SAMD21G17D)
|
||||
---|---|---|---|---|
管理員
|
由於OLED的Command與Data傳送時, 可能無法等到 Driver 去處理Queue中的 Transfer Request 完成, 建議用 Polling Status 方式來循序完成 OLED 的所有傳送需求,
1. 先拿掉TransferHandler
// DRV_I2C_TransferEventHandlerSet(drv_i2c_oled_handle, drv_i2c_oled_WriteHandler, 0);
2. Write 改成用Polling Status方式來做
void OLEDWrCmd(uint8_t command)
發表於: 2021/10/5 18:03
|
|||
|
Re: SAM2002 Lab driver 練習問題(SAMD21G17D)
|
||||
---|---|---|---|---|
新會員
|
練習用Driver改寫完之後,試著跑沒東西出來
我不知道哪邊有問題,是否有先進可以指導一下,我哪邊寫錯. 系統有繼續跑,但OLED畫面沒出來 Attach file: Link only for registered users
發表於: 2021/10/5 16:16
|
|||
|
Re: SAM2002 Lab driver 練習問題(SAMD21G17D)
|
||||
---|---|---|---|---|
管理員
|
如果你的MP9800 與 I2C OLED使用的是同一組SERCOM時, 則必須要全部採用PLIB寫法或是改用Driver寫法才行, 不能混用, 因為I2C Driver會全權掌控SERCOM PLIB的資源, 如果你自己又用I2C PLIB API去控制SERCOM時, 則I2C Driver會錯亂, 請參考SAM2002 SPI Driver中OLED的作法, 將I2C OLED改用Driver 來實現.
發表於: 2021/9/28 7:40
|
|||
|
SAM2002 Lab driver 練習問題(SAMD21G17D)
|
||||
---|---|---|---|---|
新會員
|
我從這個APP-Nano-C21-D21-TW套件開始,自己更換IC (SAMD21G17D)
http://www.microchip.com.tw/modules/tad_link/index.php?link_sn=64 到Lab11 & Lab13 都沒問題,但我想把i2c OLED enable卻出現寫法不同的問題. i2c OLED 在套件寫法是PILB 用SERCOMx Callback來處理。 //void I2C_EventHandler (uintptr_t context) //{ // if (SERCOM4_I2C_ErrorGet() == SERCOM_I2C_ERROR_NONE) // bIsI2C_DONE = true ; //} ........ // SERCOM4_I2C_CallbackRegister( I2C_EventHandler, 0 ) ; 開啟上述的callback,MP9800 的值就沒有了 關掉才能在Uart 輸出~~ 我試過app_drv_i2c.c註冊一個OLED handle來處理好像也不會成功,還是我做錯? 這部分有人試過嗎?或是我應該往哪方向處理?
發表於: 2021/9/24 9:10
|
|||
|