user_irq.c

00001 #include <sys/mman.h>
00002 #include <native/task.h>
00003 #include <native/intr.h>
00004 
00005 #define IRQ_NUMBER 7  /* Intercept interrupt #7 */
00006 #define TASK_PRIO  99 /* Highest RT priority */
00007 #define TASK_MODE  0  /* No flags */
00008 #define TASK_STKSZ 0  /* Stack size (use default one) */
00009 
00010 RT_INTR intr_desc;
00011 
00012 RT_TASK server_desc;
00013 
00014 void irq_server (void *cookie)
00015 
00016 {
00017     for (;;) {
00018 
00019        /* Wait for the next interrupt on channel #7. */
00020        err = rt_intr_wait(&intr_desc,TM_INFINITE);
00021 
00022        if (!err) {
00023            /* Process interrupt. */
00024        }
00025     }
00026 }
00027 
00028 int main (int argc, char *argv[])
00029 
00030 {
00031     int err;
00032 
00033     mlockall(MCL_CURRENT|MCL_FUTURE);
00034 
00035     /* ... */
00036 
00037     err = rt_intr_create(&intr_desc,"MyIrq",IRQ_NUMBER,0);
00038 
00039     /* ... */
00040 
00041     err = rt_task_create(&server_desc,
00042                          "MyIrqServer",
00043                          TASK_STKSZ,
00044                          TASK_PRIO,
00045                          TASK_MODE);
00046     if (!err)
00047         rt_task_start(&server_desc,&irq_server,NULL);
00048 
00049     /* ... */
00050 }
00051 
00052 void cleanup (void)
00053 
00054 {
00055     rt_intr_delete(&intr_desc);
00056     rt_task_delete(&server_desc);
00057 }

Generated on Mon Mar 24 18:02:40 2008 for Xenomai API by  doxygen 1.5.3