- 论坛徽章:
- 0
|
附上主要源代码:
---------------------------------------------------------------------------------------------------------------------- static struct miscdevice stk_gpio_dev =
- {
- MISC_DYNAMIC_MINOR,
- "stk_gpio",
- &stk_gpio_fops,
- };
- //-----------------------Zhuqing added it here.......-------------------------//
- void send_signal_handle(void)
- {
- int flag_judge;
-
- flag_judge = flag & (0x0f);
- switch (flag_judge)
- {
- case 0x01:
- {
- flag &= (0xfe);
- printk("--- lock on\n");
- gpio_write_bit(GPIO_5_PORT,IPC3_ALARMEN_BIT,1);
- gpio_write_bit(GPIO_7_PORT,IPC3_WALARMOUT_2_BIT,1);
- msleep(200);
- gpio_write_bit(GPIO_7_PORT,IPC3_WALARMOUT_2_BIT,0);
- printk("--- clear alarm on\n");
- break;
-
- }
- case 0x02:
- {
- flag &= (0xfd);
- printk("--- lock off \n");
- gpio_write_bit(GPIO_5_PORT,IPC3_ALARMEN_BIT,1);
- gpio_write_bit(GPIO_7_PORT,IPC3_WALARMOUT_1_BIT,1);
- msleep(200);
- gpio_write_bit(GPIO_7_PORT,IPC3_WALARMOUT_1_BIT,0);
- printk("--- clear alarm on\n");
- break;
- }
- case 0x04:
- {
- flag &= (0xfc);
- printk("--- SOS on \n");
- gpio_write_bit(GPIO_7_PORT,IPC3_WALARMOUT_0_BIT,1);
- msleep(200);
- gpio_write_bit(GPIO_7_PORT,IPC3_WALARMOUT_0_BIT,0);
- printk("--- clear alarm on\n");
- break;
- }
- default:break;
- }
- mod_timer(&stk_gpio_timer, jiffies + HZ/10);
- }
- static irqreturn_t interrupt_handle(int irq, char *dev_id)
- {
-
- //Disable the interrupt, because these interrupt can not be interruptted again before them being handled//
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_0_BIT,INTERRUPT_DISABLE);
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_1_BIT,INTERRUPT_DISABLE);
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_2_BIT,INTERRUPT_DISABLE);
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_3_BIT,INTERRUPT_DISABLE);
- //----------------------------The End----------------------------//
-
- //gpio_write_bit(GPIO_7_PORT,IPC3_WALARMOUT_2_BIT,1);
- wa0 = gpio_read_bit(GPIO_5_PORT ,IPC3_WALARMIN_0_BIT);
- wa2 = gpio_read_bit(GPIO_5_PORT ,IPC3_WALARMIN_2_BIT);
- wa1 = gpio_read_bit(GPIO_5_PORT ,IPC3_WALARMIN_1_BIT);
- wa3 = gpio_read_bit(GPIO_5_PORT ,IPC3_WALARMIN_3_BIT);
- temp = (wa3 << 3) |(wa2 << 2) | (wa1 << 1) |(wa0 << 0);
-
-
- switch (temp)
- {
- case IPC3_LOCKON_STATUS:
- {
- flag |= (0x01);
- break;
-
- }
- case IPC3_LOCKOFF_STATUS:
- {
- flag |= (0x02);
- break;
- }
- case IPC3_SOS_STATUS:
- {
- flag |= (0x04);
- break;
- }
- default:break;
- }
- //clear the interrupt
- writel(0xff, (HI_SYS_GPIO+(GPIO_5_PORT) * GPIO_SPACE_SIZE + GPIO_IC));
- //Open the interrupt again
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_0_BIT,INTERRUPT_ENABLE);
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_1_BIT,INTERRUPT_ENABLE);
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_2_BIT,INTERRUPT_ENABLE);
- //gpio_IE_set_bit(GPIO_5_PORT,IPC3_WALARMIN_3_BIT,INTERRUPT_ENABLE);
- //----------------------------The End----------------------------//
- return IRQ_RETVAL(1);
- }
复制代码- static int gpio_interrupt_init(void)
- {
-
- gpio_interrupt_reg_init();
- int err = 0;
- err = request_irq(GPIO_IRQ, &interrupt_handle, SA_SHIRQ, "stk_gpio", &stk_gpio_dev);
- printk("the request_irq return numble is %d\n",err);
- if (err != 0)
- {
- printk("gpio_interrupt_init() fail!\n");
- goto gpio_interrupt_init_fail;
- }
-
- return 0;
- gpio_interrupt_init_fail: misc_deregister(&stk_gpio_dev);
- free_irq(GPIO_IRQ, &stk_gpio_dev);
- return 0;
-
- }
- //----------------------------------The End--------------------------------//
- static int __init stk_gpio_init(void)
- {
- int ret;
- unsigned int tmp;
- ret = misc_register(&stk_gpio_dev);
- if (ret)
- {
- printk(GPIO_DEVICE_NAME " can't register major number\n");
- return ret;
- }
- // gpio_remap();
- gpio_init();
- stk_gpio_timer_init();
- add_timer(&stk_gpio_timer);
- gpio_interrupt_init();//Zhuqing added it here.......
- printk("stk gpio control Driver v1.0\n");
- return 0;
- }
- static void __exit stk_gpio_exit(void)
- {
-
- //del_timer_sync(&stk_gpio_timer);
- misc_deregister(&stk_gpio_dev);
- //gpio_unmap();
-
-
- //disable_irq(GPIO_IRQ); //Zhuqing added it here......
- free_irq(GPIO_IRQ, &stk_gpio_dev);//Zhuqing added it here......
-
- }
复制代码 谢谢了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|