# interrupt ## interrupt * 通知CPU事件發生,CPU需對事件做出回應 * 從process contex 切換到 interupt context ## interrupt handler * 負責處理硬體中斷 * 不能呼叫會進入睡眠的function * 因為interrupt有最高的優先等級 * 處理時會關閉中斷 ## VIM3L * 從 hikey-linaro/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts 的include往下追到 meson-g12-common.dtsi * 看到裡面的gpio-intc 裡有 interrupt-controller,可見他只有8個channel * 電路圖:https://dl.khadas.com/Hardware/VIM3/Schematic/VIM3_V13_Sch.pdf * datasheet: https://dl.khadas.com/Hardware/VIM3/Datasheet/S905D3_datasheet_0.2_Wesion.pdf * 根據 https://docs.khadas.com/linux/vim3/Gpio.html * 測試 GPIOZ15 無法export , GPIOH_4可以,故使用這根來實作  * 根據 可得 interrupts-extended 後面的參數為何 * ## request_irq(irq, handler, irqflags, devname, dev_id) * levle trigger * IRQF_TRIGGER_HIGH * IRQF_TRIGGER_LOW * edge trigger * IRQF_TRIGGER_FALLING * IRQF_TRIGGER_RISING * IRQF_SHARED * 有多個中斷處理程序共享irq * 使用dev來區分,dev不能重複 * dev * 如果有設定 IRQF_SHARED就必須設定 ## devm_request_threaded_irq(dev, irq, handler,thread_fn irqflags, devname, dev_id) * 將中斷處理程序加入線程的概念 * thread_fn 可以跟一般thread一起競爭cpu資源 * 避免中斷處理佔用太多資源 * handler 在 interrupt context中執行 * thread_fn 在 process context 中執行 * IRQF_ONESHOT * 執行完 thread_fn 才會 enable interrupt * level edge 使用可以避免程式一直卡在 handler           
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up