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
00086 #include <dev/irqreg.h>
00087
00092
00093 static int AvrUart0RxIrqCtl(int cmd, void *param);
00094
00095 IRQ_HANDLER sig_UART0_RECV = {
00096 #ifdef NUT_PERFMON
00097 0,
00098 #endif
00099 NULL,
00100 NULL,
00101 AvrUart0RxIrqCtl
00102 };
00103
00119 static int AvrUart0RxIrqCtl(int cmd, void *param)
00120 {
00121 int rc = 0;
00122 unsigned int *ival = (unsigned int *) param;
00123 int_fast8_t enabled = bit_is_set(UCR, RXCIE);
00124 uint8_t bval;
00125
00126
00127 cbi(UCR, RXCIE);
00128
00129 switch (cmd) {
00130 case NUT_IRQCTL_INIT:
00131 enabled = 0;
00132 case NUT_IRQCTL_CLEAR:
00133
00134 bval = inb(UDR);
00135 bval = inb(UDR);
00136 break;
00137 case NUT_IRQCTL_STATUS:
00138 if (bit_is_set(USR, RXC)) {
00139 *ival = 1;
00140 } else {
00141 *ival = 0;
00142 }
00143 if (enabled) {
00144 *ival |= 0x80;
00145 }
00146 break;
00147 case NUT_IRQCTL_ENABLE:
00148 enabled = 1;
00149 break;
00150 case NUT_IRQCTL_DISABLE:
00151 enabled = 0;
00152 break;
00153 case NUT_IRQCTL_GETPRIO:
00154 *ival = 16;
00155 break;
00156 #ifdef NUT_PERFMON
00157 case NUT_IRQCTL_GETCOUNT:
00158 *ival = (unsigned int) sig_UART0_RECV.ir_count;
00159 sig_UART0_RECV.ir_count = 0;
00160 break;
00161 #endif
00162 default:
00163 rc = -1;
00164 break;
00165 }
00166
00167
00168 if (enabled) {
00169 sbi(UCR, RXCIE);
00170 }
00171 return rc;
00172 }
00173
00174 #if defined(SIG_UART0_RECV) || defined(iv_USART0_RX)
00175
00179 #ifdef __IMAGECRAFT__
00180 #pragma interrupt_handler SIG_UART0_RECV:iv_USART0_RX
00181 #endif
00182 NUTSIGNAL(SIG_UART0_RECV, sig_UART0_RECV)
00183 #elif defined(SIG_USART0_RECV)
00184
00185 NUTSIGNAL(SIG_USART0_RECV, sig_UART0_RECV)
00186
00187 #else
00188
00192 #ifdef __IMAGECRAFT__
00193 #pragma interrupt_handler SIG_UART_RECV:iv_UART_RX
00194 #endif
00195 NUTSIGNAL(SIG_UART_RECV, sig_UART0_RECV)
00196 #endif
00197