Speed, Precision, Strength, Adaptation, Elegance

2011年8月16日星期二

Linux gpio & irq mapping

arch/arm/plat-pxa/gpio.c 定義了 pxa_gpio_chip 指的是某一個管理 gpio interrupt 的 register
而一個 register 是 4 bytes,所以最多管 32 根 gpio (irq),例如 pxa270 的 Section 24.
Interrupt Controller 定義了 0~39 (扣除 reserved 也用到 33,第 34 根 GPIO),因此
保留兩個 gpio_chip 的空間 32*2= 64 個位置給 gpio 對應的 irq number。

Interrupt 借由 Interrupt controller 向 pxa270 發出 request,取得該 pin 腳的 GPIO number,
再透過 arch/arm/mach-pxa/include/mach/gpio.h 的 gpio_to_irq 取得 irq number,再指向在
arch/arm/mach-pxa/pxa27x.c 中的 pxa27x_init_irq 與
arch/arm/plat-pxa/gpio.c 中的 pxa_init_gpio 初始化時指定的 gpio 與 irq chip,
最後註冊 irq chip  內的  chained_handler ...

Linux 使用 irq_desc 表示某一個 irq,chip level ISR 實作可能是舊式的 __do_IRQ  或
採用新的 irq_desc->handle_irq() ,到上一層透過 irq_desc->chip 呼叫不同的 handler

 kernel/irq/handle.c 定義了 irq_desc[NR_IRQS], NR_IRQS, nr_irqs 代表目前 Linux kernel
 擁有的 irq 總數

另外相關的部份:
 arch/arm/plat-pxa/gpio.c
 arch/arm/kernel/calls.S 處理的 system call interface
 arch/arm/kernel/entry-armv.S 定義 irq_handler, interrupt vector table, dispatcher table
 arch/arm/mach-pxa/irq.c 處理的 irq interface

http://www.kernel.org/doc/htmldocs/genericirq.html

linux kernel source base: 3.1.0-rc1

參考:

ARM中斷流程

0 comments:

張貼意見

標籤雲、文章分類

Ruby (3) Ruby on Rails (3) security (2) tangible interface (2) 工作 (6) 廣告 (5) 微軟 (4) 成功 (7) 技能 (6) 捷運 (11) 旅遊 (42) 東京 (15) 照片 (77) 科技 (7) 程式設計 (17) 網路安全 (15) 美國 (11) 蜜月 (15) 軟體 (5) 開車 (3) 閱讀 (3) 隱私 (6) 電影 (24) 飲食 (16) 高雄 (8)

版權宣告、免責聲明


姓名標示、非商業性、相同方式分享3.0台灣授權條款授權。
如果您看不懂以上版權,表示您無權使用本網頁任何資料。
免責聲明: 本文所載資料僅供參考,並不構成投資建議,
讀者閱讀或使用該資料所導致結果需要自擔風險與責任,作者概不承擔閱讀人行為之任何風險與責任。