Project

General

Profile

Revision 29

minor changes and comments

View differences:

lab2/lab2.c
37 37

  
38 38
int(timer_test_time_base)(uint8_t timer, uint32_t freq) {
39 39
    if (timer_set_frequency(timer, freq)) return 1;
40
  return 0;
40
    return 0;
41 41
}
42 42

  
43 43
extern int no_interrupts;
44 44

  
45 45
int(timer_test_int)(uint8_t time) {
46
    const uint32_t frequency = 60; // Frequency asummed at 60Hz
46
    const int frequency = 60; // Frequency asummed at 60Hz
47 47
    int ipc_status, r;
48 48
    message msg;
49 49
    uint8_t hook = 0;
50 50
    no_interrupts = 0;
51
    timer_subscribe_int(&hook);
51
    if (timer_subscribe_int(&hook)) return 1;
52 52
    int irq_set = BIT(hook);
53 53
    while (time) {
54 54
        /* Get a request message. */
......
61 61
                case HARDWARE: /* hardware interrupt notification */
62 62
                    if (msg.m_notify.interrupts & irq_set) { /* subscribed interrupt */
63 63
                        timer_int_handler();
64
                        if (!(no_interrupts % frequency)) {
64
                        if (!(no_interrupts % frequency)) { /* second elapsed */
65 65
                            timer_print_elapsed_time();
66 66
                            time--;
67 67
                        }
......
74 74
            /* no standart message expected: do nothing */
75 75
        }
76 76
    }
77
    timer_unsubscribe_int();
78
  return 0;
77
    if (timer_unsubscribe_int()) return 1;
78
    return 0;
79 79
}
lab2/timer.c
22 22
        case 0: write_cmd |= TIMER_SEL0; break;
23 23
        case 1: write_cmd |= TIMER_SEL1; break;
24 24
        case 2: write_cmd |= TIMER_SEL2; break;
25
        default: return 1;               break;
25
        default: return 1;
26 26
    }
27 27
    //Change both LSB and MSB
28 28
    write_cmd |= TIMER_LSB_MSB;
......
39 39
        case 0: timer_port = TIMER_0; break;
40 40
        case 1: timer_port = TIMER_1; break;
41 41
        case 2: timer_port = TIMER_2; break;
42
        default: return 1;            break;
42
        default: return 1;
43 43
    }
44 44
    uint8_t lsb = 0, msb = 0;
45
    /* Split the 16 bits word in two bytes */
45 46
    if (util_get_LSB(counter_init, &lsb)) return 1;
46 47
    if (util_get_MSB(counter_init, &msb)) return 1;
47 48

  
49
    /* Write the 8 LSB of the counter */
48 50
    if (sys_outb(timer_port, lsb)) return 1;
51
    /* Write the 8 MSB of the counter */
49 52
    if (sys_outb(timer_port, msb)) return 1;
50 53

  
51 54
    return 0;
......
54 57
int hook_id;
55 58

  
56 59
int (timer_subscribe_int)(uint8_t *bit_no) {
60
    if(bit_no == NULL) return 1;
57 61
    hook_id = 2;
58
    if(bit_no == NULL) return 1;
59 62
    *bit_no = hook_id;
63
    /* Subscribe Timer 0 Interrupts */
60 64
    return sys_irqsetpolicy(TIMER0_IRQ, IRQ_REENABLE, &hook_id);
61 65
}
62 66

  
63 67
int (timer_unsubscribe_int)() {
68
    /* Unsubscribe Timer 0 Interrupts */
64 69
    if(sys_irqrmpolicy(&hook_id)) return 1;
65 70
    return 0;
66 71
}
......
80 85
        case 0: read_port = TIMER_0; break;
81 86
        case 1: read_port = TIMER_1; break;
82 87
        case 2: read_port = TIMER_2; break;
83
        default: return 1;           break;
88
        default: return 1;
84 89
    }
85 90
    if(util_sys_inb(read_port, st)) return 1;
86 91
    return 0;
......
91 96
    uint8_t in_mode;
92 97
    switch(field){
93 98
        case tsf_all:
94
            conf.byte = st;
99
            conf.byte = st; /* Full Status Byte */
95 100
            break;
96 101
        case tsf_initial:
102
            /* Counter Initial Value Loading Mode */
97 103
            in_mode = (st & TIMER_INMODE_MASK) >> TIMER_INMODE_POS;
98 104
            switch(in_mode){
99 105
                case 0: conf.in_mode = INVAL_val    ; break; //000
100 106
                case 1: conf.in_mode = LSB_only     ; break; //001
101 107
                case 2: conf.in_mode = MSB_only     ; break; //010
102 108
                case 3: conf.in_mode = MSB_after_LSB; break; //011
103
                default: return 1; break;
109
                default: return 1;
104 110
            }
105 111
            break;
106 112
        case tsf_mode:
113
            /* Counting Mode */
107 114
            conf.count_mode = (st & TIMER_MODE_MASK)>>TIMER_MODE_POS;
108 115
            if(conf.count_mode == TIMER_MODE_2ALT || conf.count_mode == TIMER_MODE_3ALT)
109 116
                conf.count_mode &= TIMER_MODE_RED2;
110 117
            break;
111 118
        case tsf_base:
119
            /* Representation of Counter Initial Value */
112 120
            conf.bcd = st & TIMER_BCD;
113 121
            break;
114
        default: return 1; break;
122
        default: return 1;
115 123
    }
116 124
    if(timer_print_config(timer, field, conf)) return 1;
117 125
    return 0;

Also available in: Unified diff