[Suzaku:00520] UART IPのIRQへの関連付けについて
HLDC上村
email@hidden
2006年 5月 20日 (土) 11:45:59 JST
いつもお世話になっております。HLDCの上村と申します。
早速ですが、IRQの使用方法について質問させていただきます。
現在、追加したOPB-UART16550 IPの割り込みをIRQに関連付けようとして、
カーネルのソースを読み始めてみたのですが、
PC用の解析入門書とは異なる部分も多く、まだ良くわかっていない状態です。
IRQについてメーリングリストの過去ログを探してみたところ、
以下のパッチをが投稿されていのですが、このパッチから、
XPAR_SECOND_UART1_BASEADDRの部分を追加したIPのアドレスに変更して適用する、
という事で割り込みが発生するようになるのでしょうか?
--- xmbserial.c.orig 2004-10-06 10:11:36.000000000 +0900
+++ xmbserial.c 2004-10-06 10:16:59.000000000 +0900
@@ -181,9 +181,8 @@
*/
static struct xmb_serial xmbrs_table[] = {
{ 0, (XPAR_CONSOLE_UART_BASEADDR), IRQBASE, ASYNC_BOOT_AUTOCONF }, /* ttyS0 */
-#ifdef CONFIG_MICROBLAZE_DEBUG_UART
- { 0, (XPAR_DEBUG_UART_BASEADDR), IRQBASE+1, ASYNC_BOOT_AUTOCONF } /* ttyS1 */
-#endif
+ { 0, (XPAR_SECOND_UART1_BASEADDR), IRQBASE+2, ASYNC_BOOT_AUTOCONF }, /* ttyS1 */
+ { 0, (XPAR_SECOND_UART2_BASEADDR), IRQBASE+3, ASYNC_BOOT_AUTOCONF } /* ttyS2 */
};
#define NR_PORTS (sizeof(xmbrs_table) / sizeof(struct xmb_serial))
@@ -389,13 +388,22 @@
*/
void xmbrs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
- struct xmb_serial *info;
+ struct xmb_serial *info = NULL;
unsigned int isr;
volatile unsigned int *uartp;
+ int i;
- info = &xmbrs_table[(irq - IRQBASE)];
- uartp = (volatile unsigned int *) info->addr;
+ for(i = 0 ; i < NR_PORTS ; i++){
+ if(xmbrs_table[i].irq == irq){
+ info = &xmbrs_table[i];
+ }
+ }
+ if(!info){
+ printk("invalied irq happen, no : %d\n", irq);
+ return;
+ }
+ uartp = (volatile unsigned int *) info->addr;
isr = uartp[XUL_STATUS_REG_OFFSET/4];
/* Grab any valid chars */
@@ -1464,6 +1472,7 @@
switch (info->line) {
case 0:
case 1:
+ case 2:
break;
default:
printk("SERIAL: don't know how to handle UART %d interrupt?\n",
-----------------------------------------------------------
また、このIRQと割り込みで実行したい関数を関連付けたい場合は、
request_irq()で追加したIRQ No.と関数を指定する、
という事であっていますでしょうか?
以上です。よろしくお願いいたします。
凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹
Heartland・Data Co., システム設計部
上村真人 (Kamimura Masato)
HomePage: http://www.hldc.co.jp/
E-mail Add: email@hidden
栃木県足利市富士見町24-1
TEL:0284-41-1159 / FAX:0284-41-3491
凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸凹凸
suzaku メーリングリストの案内