GPIO Interrupt delay 問題

大家好,我近期在進行 Interrupt 的測試
使用RTL8722DM的開發版,用 Arduino IDE 進行開發
但是觸發 Interrupt 的時候,會 delay 50 us 之後才觸發函式
想詢問這個問題是甚麼原因造成的呢?
code :

//INPUT
#define READY 28
#define TEST_PIN 27

void button_handler(uint32_t id, uint32_t event) {
    digitalWrite(TEST_PIN, HIGH);
}

void setup() {
  pinMode(READY, INPUT);    
  pinMode(TEST_PIN, OUTPUT); 

  pinMode(READY, INPUT_IRQ_FALL);
  digitalSetIrqHandler(READY, button_handler);
}

void loop() {
  digitalWrite(TEST_PIN, LOW);
}

1 Like

Hi @Ray
建議嘗試使用外部電路來觸發interrupt,然後再看是否會有速度上的提升?
總而言之,Arduino并不會對MCU的效能有什麽優化,更多是兼容性和易用性,因此一定會損失一些效能

@xidameng 您好
我是透過訊號產生器給予 3.3V - 8kHz 的訊號來觸發 interrupt 的喔
再透過示波器檢視觸發訊號,發現有大約 50us 的延遲
所以是因為使用 Arduino IDE 開發,才會有這樣的狀況嗎?
若想要排除這樣的狀況,是需要更換 IDE 開發嗎?
是否有推薦的 IDE 開發平台呢?

1 Like

瞭解

建議可以使用下面的example再試一試,因爲Arduino環境默認會運行FreeRTOS,這會比下面使用bare-metal的example多使用一些CPU時間

需要注意的是,下面的example是瑞昱的Standard SDK,在Windows上使用的時候,需要安裝Cygwin環境,詳細的上手教程在這裏:
https://www.amebaiot.com/zh/ameba-sdk-getting-started-8722/

@xidameng 您好
我按照手冊進行 Standard SDK Image download 時
發生了 Err: Flashloader download fail 錯誤
想詢問您這個錯誤是發生了甚麼問題呢?

1 Like

Hi @Ray
Flashloader download fail很有可能是路徑錯誤了

建議你使用路徑爲SDK\tools\AmebaD\Image_Tool\ImageTool.exe 來下載試試

具體步驟都在這邊
https://www.amebaiot.com/zh/ameba-sdk-getting-started-8722/

@xidameng 您好
我按照您提供的網頁上的說明進行操作
使用的開發版是 RTL8722DM mini
但是依然發生 Err: Flashloader download fail 錯誤

1 Like

請看一下image tool的相同路徑下有沒有一個叫imgtool_flashloader_amebad.bin的文檔,一般這個文檔都會放在和image tool同路徑之下,就像這樣:

有喔,在 image tool 的路徑底下存在著這個檔案喔

可以試最後一個方法,把所有需要的bin檔都放在上圖中的這個資料夾中,然後再嘗試一次

需要的bin有:

  1. km0_boot_all.bin
  2. km4_boot_all.bin
  3. km0_km4_image2.bin

成功了,非常感謝您的協助
另外想詢問您,檔案的放置位置是這樣,對嗎?
km0_boot_all.bin : 0x08000000
km4_boot_all.bin : 0x08004000
km0_km4_image2.bin : 0x08006000

太好啦!

是的,沒有錯! :+1:

您好,目前想透過 GCC 編譯範例內的程式
關於 RTL8722DM_AN0400.pdf 內的第四、五步驟不太明白
想詢問您
4. Add C++ files into protect. We have tested a small program and provide it as an example, which can be found in main.cpp.
指的是將 main.c 放置在 /project/realtek_amebaD_va0_example/GCC-RELEASE 之下嗎?
5. Use command make in console to compile project with C++ files.
這邊指的是 make all:/project_lp 與 /project_hp,然後再透過 ImageTool 燒錄至開發版內嗎?

1 Like

您有cpp的檔案嗎? 如果沒有就不用擔心了,所有的example的main.c都要放在以下的路徑中

請使用您已經驗證可用的方法來燒錄吧,image tool是個很好的選擇

@xidameng 您好
非常感謝您的協助,我已經成功運行 gpio_irq 範例
然後針對 GPIO 的 Interrupt 功能再進行了一次測試
我使用訊號產生器,產生了 8k Hz 訊號 trigger Interrupt Pin
然後再用示波器觀察 Output Pin 與訊號產生器的訊號
還是有大約 50us 的 delay 問題 (每次delay的時間都有些微差距)

1 Like

:+1: :+1:

這個我們再研究一下再告訴你吧