update ex11
[des2015.git] / mart / xenomai / ex09 / ex09b.c
1 #include <stdio.h>
2 #include <signal.h>
3 #include <unistd.h>
4 #include <sys/mman.h>
5 #include <sys/io.h>
6
7 #include <native/task.h>
8 #include <native/timer.h>
9 #include <native/intr.h>
10
11 #include <rtdk.h>
12
13 #define LPT1IRQ 7
14
15 RT_TASK task;
16
17 void lpt1_handler(void *arg)
18 {
19 RT_INTR intr;
20 rt_intr_create(&intr, "lpt1 handler", LPT1IRQ, 0);
21 int bps = 0;
22 while(1){
23 rt_printf("lpt1 interrupt: %d\n",
24 bps += rt_intr_wait(&intr, TM_INFINITE));
25 }
26 }
27
28 int main(int argc, char* argv[])
29 {
30 rt_print_auto_init(1);
31
32 /* setup lpt1 */
33 ioperm(0x37A, 1, 1);
34 unsigned char byte = inb(0x37A);
35 byte |= 0x10;
36 outb(byte, 0x37A);
37
38 mlockall(MCL_CURRENT | MCL_FUTURE);
39
40 rt_task_create(&task, "task", 0, 50, 0);
41 rt_task_start(&task, &lpt1_handler, 0);
42
43 rt_printf("CRTL+C to stop\n");
44 pause();
45
46 /* break down lpt1 */
47 byte = inb(0x37A);
48 byte &= 0xEF;
49 outb(byte, 0x37A);
50 }