Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00084 #include <dev/irqreg.h>
00085
00086 #if defined(MCU_AT90CAN128) || defined(MCU_ATMEGA2560) || defined(MCU_ATMEGA2561)
00087 #define INT_MASK_REG TIMSK1
00088 #define INT_STATUS_REG TIFR1
00089 #define INT_ENABLE_BIT ICIE1
00090 #define INT_STATUS_BIT ICF1
00091 #define INT_PRIORITY 10
00092 #else
00093 #define INT_MASK_REG TIMSK
00094 #define INT_STATUS_REG TIFR
00095 #define INT_ENABLE_BIT TICIE1
00096 #define INT_STATUS_BIT ICF1
00097 #define INT_PRIORITY 10
00098 #endif
00099
00104
00105 static int AvrTimer1CaptIrqCtl(int cmd, void *param);
00106
00107 IRQ_HANDLER sig_INPUT_CAPTURE1 = {
00108 #ifdef NUT_PERFMON
00109 0,
00110 #endif
00111 NULL,
00112 NULL,
00113 AvrTimer1CaptIrqCtl
00114 };
00115
00131 static int AvrTimer1CaptIrqCtl(int cmd, void *param)
00132 {
00133 int rc = 0;
00134 unsigned int *ival = (unsigned int *) param;
00135 int_fast8_t enabled = bit_is_set(INT_MASK_REG, INT_ENABLE_BIT);
00136
00137
00138 cbi(INT_MASK_REG, INT_ENABLE_BIT);
00139
00140 switch (cmd) {
00141 case NUT_IRQCTL_INIT:
00142 enabled = 0;
00143 case NUT_IRQCTL_CLEAR:
00144
00145 outb(INT_STATUS_REG, _BV(INT_STATUS_BIT));
00146 break;
00147 case NUT_IRQCTL_STATUS:
00148 if (bit_is_set(INT_STATUS_REG, INT_STATUS_BIT)) {
00149 *ival = 1;
00150 } else {
00151 *ival = 0;
00152 }
00153 if (enabled) {
00154 *ival |= 0x80;
00155 }
00156 break;
00157 case NUT_IRQCTL_ENABLE:
00158 enabled = 1;
00159 break;
00160 case NUT_IRQCTL_DISABLE:
00161 enabled = 0;
00162 break;
00163 case NUT_IRQCTL_GETPRIO:
00164 *ival = INT_PRIORITY;
00165 break;
00166 #ifdef NUT_PERFMON
00167 case NUT_IRQCTL_GETCOUNT:
00168 *ival = (unsigned int) sig_INPUT_CAPTURE1.ir_count;
00169 sig_INPUT_CAPTURE1.ir_count = 0;
00170 break;
00171 #endif
00172 default:
00173 rc = -1;
00174 break;
00175 }
00176
00177
00178 if (enabled) {
00179 sbi(INT_MASK_REG, INT_ENABLE_BIT);
00180 }
00181 return rc;
00182 }
00183
00187 #ifdef __IMAGECRAFT__
00188 #pragma interrupt_handler SIG_INPUT_CAPTURE1:iv_TIMER1_CAPT
00189 #endif
00190 NUTSIGNAL(SIG_INPUT_CAPTURE1, sig_INPUT_CAPTURE1)
00191
00192
00193