CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 5920|回复: 0

Cubieboard v1 PIO 中断问题,请大虾给些建议

[复制链接]
发表于 2013-9-30 09:30:28 | 显示全部楼层 |阅读模式
本帖最后由 xingi386 于 2013-9-30 09:34 编辑

万能的网友们,能否帮我看下PIO中断不工作的问题?请给些建议?小弟感激不尽。

        开发环境:

                  硬件:cubieboard v1
                  软件:cubieboard-tv-sdk

        问题描述:

                 我在调试wifi模块,使用spi接口+外部中断,目前spi接口已经OK,但中断却不工作。中断已经注册成功,注册的中断函数从来没有被触发过。
                  我有使用示波器测量过,外部的中断信号是有的,但是中断函数却没有被触发。

                  软件上我确定已经修改了相应的寄存器,具体的代码如请查看下面。

        具体代码:

1、  配置fex文件,我使用的为EINT15。
[spi_wifi_para]
nmc100_wl_irq                  = port : PH15<6><default><default><default>
2、在module_init是进行ioremap

                  gpio_addr = ioremap(PIO_BASE_ADDRESS, PIO_RANGE_SIZE);
                 if(!gpio_addr) {
                  NMI_PRINTF("fail to ioremap pio.\n");
                  return -1;  
                 }
3、  在我的driver probe函数里 初始化 irq
//int ret= 0;
                   #defineNMC1000_IRQ_NAME                "NMC_IRQ"
#defineNMC1000_IRQ_NO                      gpio_int_info[0].port_num //(IRQ_EINT7)
#defineNMC1000_IRQ_MODE                NEGATIVE_EDGE

                   __u32 reg_num = 0;
                   __u32 reg_addr = 0;
                   __u32 reg_val = 0;

                   //config gpio to int mode
                   if(gpio_irq_hdle){
                            gpio_release(gpio_irq_hdle, 2);
                   }
                   gpio_irq_hdle = gpio_request_ex("spi_wifi_para","nmc100_wl_irq");


                   if(!gpio_irq_hdle){
                            ret = -1;
                            PRINT_ER("Failed to request IRQ for GPIO: %d\n",nic->dev_irq_num);
                            return ret;  
                   }



                   gpio_get_one_pin_status(gpio_irq_hdle, gpio_int_info,"nmc100_wl_irq", 1);
                   PRINT_D(INIT_DBG,"%s, %d: gpio_int_info, port = %d, port_num = %d.\n", __func__, __LINE__, \
          gpio_int_info[0].port, gpio_int_info[0].port_num);

                   nic->dev_irq_num = NMC1000_IRQ_NO;


                   reg_num =NMC1000_IRQ_NO%8;         
                   reg_addr = NMC1000_IRQ_NO/8;  
                   reg_val = readl(gpio_addr + int_cfg_addr[reg_addr]);   
                   reg_val &= (~(7 << (reg_num *4)));         
                   reg_val |= (NMC1000_IRQ_MODE << (reg_num * 4));  
                   writel(reg_val,gpio_addr+int_cfg_addr[reg_addr]);

                   //reg_val = readl(gpio_addr+PIO_INT_CFG1_OFFSET);
                   //printk("PIO_INT_CFG1_OFFSET========================================%x", reg_val);

                   //clear the IRQ_EINT7 interrupt pending
                   reg_val = readl(gpio_addr + PIO_INT_STAT_OFFSET);
                   if((reg_val = (reg_val&(1<<(NMC1000_IRQ_NO))))){
                            //print_int_info("==NMC1000_IRQ_NO=\n");            
                            writel(reg_val,gpio_addr + PIO_INT_STAT_OFFSET);
                   }  

                   reg_val = readl(gpio_addr+PIO_INT_CTRL_OFFSET);
                   reg_val |= (1 << NMC1000_IRQ_NO);     
                   writel(reg_val,gpio_addr+PIO_INT_CTRL_OFFSET);


                   udelay(10);

                   ret=request_irq(SW_INT_IRQNO_PIO, isr_uh_routine, IRQF_TRIGGER_LOW|IRQF_SHARED , NMC1000_IRQ_NAME, (void*)nic);//IRQF_TRIGGER_LOW
                   #else
                   ret=request_irq(NMC1000_IRQ_NO, isr_uh_routine,  IRQF_SHARED ,NMC1000_IRQ_NAME, (void*)nic);// IRQF_TRIGGER_LOW
                   #endif


                   if (ret  < 0){            
                                      PRINT_ER("request nmc1000 irq failed\n");
                   }else{
                            PRINT_D(INIT_DBG,"request nmc1000 irq success \n");
                   }


我通过log可以看见request nmc1000 irq success已经被打出来的。之后我有做了测试,我手动将中断的PIO pin接地或接到其他的3.3vpin上,中断函数从来没有被触发过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-5-3 22:33 , Processed in 0.021177 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部