| 
 | 
 
#define CPLD_BANK0_BASE (0XE0000000) 
static int __init s3c2410_key_init(void)  
{  
    int ret;  
    // 初始化Bank6设置  
        unsigned int bswcon = inl((unsigned int)S3C2410_BWSCON);  
             bswcon = (bswcon & 0xFFFCFFFF) | 0x00000000;  
             outl(bswcon,(unsigned int)S3C2410_BWSCON);  
             bswcon = inl((unsigned int)S3C2410_BWSCON);  
        注释说初始化bank6,bank6不是27-24吗 
  
             outb(0xFF,0xE0000000+0x02600000);   
        outb(0xF9,0xE0000000+0x02600000); 
             ....... 
static irqreturn_t key_interrupt(int irq, void *dev_id, struct pt_regs *regs)  
{  
  unsigned char vector,tmp;  
    
  vector = inb(CPLD_BANK0_BASE + 0x02200000);                               
  tmp = inb(CPLD_BANK0_BASE + 0x02600000);                                  
  if(0 == (vector & 0x4)){  
    printk("key1\n");  
    outb(tmp | (1<<2), CPLD_BANK0_BASE+0x02600000);     
    inb(CPLD_BANK0_BASE + 0x02600000);  
    outb(tmp & (~(1<<2)), CPLD_BANK0_BASE+0x02600000);   
  }  
  else if(0 == (vector & 0x2)){  
    printk("key2\n");  
    outb(tmp | (1<<1), CPLD_BANK0_BASE+0x02600000);      
    inb(CPLD_BANK0_BASE + 0x02600000);  
    outb(tmp & (~(1<<1)), CPLD_BANK0_BASE+0x02600000);    
  }  
  
  return IRQ_HANDLED;   
} 
 |   
 
 
 
 |