hallo2
[des2015.git] / mart / ex10 / ex10dmaster.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 #define SAMPLES 10000
15
16 RT_TASK task;
17 RTIME times[SAMPLES];
18
19 void taskf(void *arg)
20 {
21 RT_INTR intr;
22 rt_printf("Succes creation: %d\n", rt_intr_create(&intr, "lpt1 handler", LPT1IRQ, I_PROPAGATE));
23 rt_task_set_periodic(NULL, TM_NOW, 1e5);
24 rt_printf("Sending\n");
25
26 unsigned int i;
27 for(i = 0; i<SAMPLES; i++){
28 times[i] = rt_timer_read();
29 rt_printf("Set bit to 0\n");
30 outb(inb(0x378) & 0xEF, 0x378);
31 rt_printf("Set bit to 1\n");
32 outb(inb(0x378) | 0x01, 0x378);
33 rt_printf("Wait for interrupt\n");
34 rt_intr_wait(&intr, TM_INFINITE);
35 times[i] = rt_timer_read()-times[i];
36 rt_task_wait_period(NULL);
37 }
38
39 FILE *file;
40 file = fopen("ex10d.csv", "w");
41 for(i = 0; i<SAMPLES; i++){
42 fprintf(file, "%u,%llu\n", i, times[i]);
43 }
44 fclose(file);
45 rt_printf("Done, you can press CRTL+C now\n");
46 }
47
48 int main(int argc, char* argv[])
49 {
50 rt_print_auto_init(1);
51 mlockall(MCL_CURRENT | MCL_FUTURE);
52
53 ioperm(0x37A, 1, 1);
54 ioperm(0x378, 1, 1);
55 outb(inb(0x37A) | 0x01, 0x37A);
56 // outb(inb(0x378) | 0x01, 0x378);
57
58 rt_task_create(&task, "task", 0, 50, 0);
59 rt_task_start(&task, &taskf, 0);
60
61 pause();
62 outb(inb(0x37A) & 0xEF, 0x37A);
63 }