コード例 #1
0
ファイル: kintr0.c プロジェクト: Undrizzle/yolanda
static cyg_uint32 isr0(cyg_vector_t vector, cyg_addrword_t data)
{
    CYG_UNUSED_PARAM(cyg_addrword_t, data);

    cyg_interrupt_acknowledge(vector);
    return 0;
}
コード例 #2
0
/*Handler d'IT*/
cyg_uint32 dev_linux_com0_isr(cyg_vector_t vector, cyg_addrword_t data)
{
   /*Blocage d'une IT similaire tant que la DSR ne sait pas exécutée*/
   cyg_interrupt_mask(vector);
   u_int32 _usart_csr;
   u_int32 _usart_imr;
   if(_linux_uart_s0_loaded) {
      do {
         send_order_r('R', US_CSR, &_usart_csr);
         send_order_r('R', US_IMR, &_usart_imr);
         if((_usart_csr&IER_MASK_RCV)==IER_MASK_RCV) {
            //dev_linux_com0_read(_linux_uart_s0_desc_rd, uart_0_rcv_buffer, 1);
            dev_linux_com0_rcv();
         }
         if((_usart_csr&IER_MASK_SND)==IER_MASK_SND) {
            dev_linux_com0_snd();
         }
      } while((_usart_csr & _usart_imr & (IER_MASK_RCV)) ||
              (_usart_csr & _usart_imr & (IER_MASK_SND)) );
   }
   /*ACK de l'IT au CPU*/
   cyg_interrupt_acknowledge(vector);
   /*Informe kernel d'exécuter DSR*/
   return(CYG_ISR_HANDLED | CYG_ISR_CALL_DSR);
}
コード例 #3
0
ファイル: i2clib.c プロジェクト: LucidOne/Rovio
void Int_Handler_FastI2C(void)
#endif
{	
	unsigned int intst;
	intst=inpw(REG_FastSerialBusStatus);

	if ((intst&0x00000002)==0x02)
	{	
//k07055-1		if (_i2c_IrqHandlerTable[0]!=0)
//k07055-1			_i2c_IrqHandlerTable[0]();

		intst=inpw(REG_FastSerialBusStatus)|0x02;
		outpw(REG_FastSerialBusStatus,intst);

		++i2c_I2C_INT_CNT;
//		printf ("i2c_I2C_INT_CNT = %d\n", i2c_I2C_INT_CNT);

		if (_i2c_IrqHandlerTable[0]!=0)	//k07055-1
		_i2c_IrqHandlerTable[0]();		//k07055-1

//#ifdef OPT_FastI2C_INT_TEST
//		cntFastI2C=cntFastI2C+1;
//#endif	//OPT_FastI2C_INT_TEST
	}
#ifdef ECOS
	cyg_interrupt_acknowledge (vector);	//k01105-1

	return CYG_ISR_HANDLED;
#endif	//ECOS
}
コード例 #4
0
cyg_uint32 dev_at91sam9261_isr(cyg_vector_t vector, cyg_addrword_t data)
{
   volatile unsigned int spi_sr;

   cyg_interrupt_mask(vector);

   // le driver est il deja charge?
   if (dev_at91sam9261_spi_loaded)
   {
      //lecture du registre d'etat pour connaitre l'origine de l'IT
      spi_sr = *AT91C_SPI0_SR;

      //est ce une it de fin d'emission?
      if (spi_sr & AT91C_SPI_ENDTX)
      {
         // desactivation de l'emetteur et du récepteur
         *AT91C_SPI0_PTCR = AT91C_PDC_RXTDIS| AT91C_PDC_TXTDIS;
         //desactivation de l'it ENDTX
         *AT91C_SPI0_IDR = AT91C_SPI_ENDTX;
      }
   }

   //ACK de l'IT au CPU
   cyg_interrupt_acknowledge(vector);
   //appel du DSR
   return(CYG_ISR_HANDLED | CYG_ISR_CALL_DSR);
}
コード例 #5
0
ファイル: IpcamReset.c プロジェクト: LucidOne/Rovio
cyg_uint32 Reset_INT_Handler(cyg_vector_t vector, cyg_addrword_t data)
{
   /* clear GPIO interrupt state */
   //diag_printf("state: %08x\n", inpw(REG_GPIO_IS));
    Reset_Int_ISR_MP4EVB_Board();
	cyg_interrupt_acknowledge(vector);
    return CYG_ISR_HANDLED;
}
コード例 #6
0
/*-------------------------------------------
| Name:_kinetis_uart_isr
| Description:
| Parameters:
| Return Type:
| Comments:
| See:
---------------------------------------------*/
cyg_uint32 _kinetis_uart_x_isr(cyg_vector_t vector, cyg_addrword_t data) {
    cyg_interrupt_mask(vector);
    cyg_interrupt_acknowledge(vector);

    _kinetis_uart_stat.isr++;

    return CYG_ISR_HANDLED | CYG_ISR_CALL_DSR;
}
コード例 #7
0
cyg_uint32 dev_at91sam9261_uart_isr(cyg_vector_t vector, cyg_addrword_t data) {

   cyg_interrupt_mask(vector);

   dev_at91sam9261_uart_x_interrupt((board_inf_uart_t*)data);

   cyg_interrupt_acknowledge(vector);
   //Informe kernel d'exécuter DSR
   return(CYG_ISR_HANDLED | CYG_ISR_CALL_DSR);
}
コード例 #8
0
/*-------------------------------------------
| Name       : dev_at91sam9260_uart1_isr
| Description:
| Parameters : None
| Return Type: None
| Comments   : -
| See        : -
---------------------------------------------*/
cyg_uint32 dev_at91sam9260_uart1_isr(cyg_vector_t vector, cyg_addrword_t data)
{
   cyg_interrupt_mask(vector);
   unsigned int usart_csr;
   unsigned int recv_intr_cond  = 0;
   unsigned int trans_intr_cond = 0;

   board_inf_uart_t *p_inf_uart;
   AT91S_USART        *p_adr;


   p_inf_uart = (board_inf_uart_t *)ofile_lst[desc_uart1].p;
   p_adr      = (AT91S_USART*)p_inf_uart->base_adr;

   // if device is loaded
   if (p_inf_uart->loaded) {
      do {
         usart_csr = p_adr->US_CSR;

         if (p_inf_uart->o_flag & O_RDONLY) {
            // Overrun Error
            if ((usart_csr & 0x00000020) == 0x00000020) {
               // Reset status bits, reset rx/tx.
               p_adr->US_CR = AT91C_US_RSTSTA;
            }

            // Receiver byte per byte
            if ((usart_csr & 0x01) == 0x01) {                                 // RXRDY
               //receive fifo
               dev_at91sam9260_uart_x_fifo_rcv(desc_uart1);
            }
            recv_intr_cond  = usart_csr & (p_adr->US_IMR) & (0x00000001);
         }
         //
         if (p_inf_uart->o_flag & O_WRONLY) {
            // TXRDY
            if (((usart_csr & 0x00000002) == 0x00000002) && (p_inf_uart->XMIT)) {
               //Transmission (per byte)
               dev_at91sam9260_uart_x_snd(desc_uart1);
            }
            trans_intr_cond = ( (p_inf_uart->XMIT) && (usart_csr & (p_adr->US_IMR) & (0x00000002)));
         }
      } while ( recv_intr_cond || trans_intr_cond );
   }
   // Timer Value initialization for Read
   p_inf_uart->inter_char_timer = p_inf_uart->ttys_termios.c_cc[VTIME];

   //ACK de l'IT au CPU
   cyg_interrupt_acknowledge(vector);
   //Informe kernel d'ex�cuter DSR
   return(CYG_ISR_HANDLED | CYG_ISR_CALL_DSR);
}
コード例 #9
0
// This DSR handles the board insertion
static void
cf_detect_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
{
    unsigned long new_state = *SA11X0_GPIO_PIN_LEVEL;
    struct cf_slot *slot = (struct cf_slot *)data;
    if ((new_state & SA1110_GPIO_CF_DETECT) == SA1110_GPIO_CF_PRESENT) {
        slot->state = CF_SLOT_STATE_Inserted;
    } else {
        slot->state = CF_SLOT_STATE_Removed;  // Implies powered up, etc.
    }
    cyg_interrupt_acknowledge(SA1110_CF_DETECT);
    cyg_interrupt_unmask(SA1110_CF_DETECT);
}
コード例 #10
0
cyg_uint32 dev_linux_eth_isr(cyg_vector_t vector, cyg_addrword_t data) {
   //Blocage d'une IT similaire tant que la DSR ne sait pas exécutée
   cyg_interrupt_mask(vector);
   //
   if(data==OPS_READ) {
      dev_linux_eth_rcv();
   }
   if(data==OPS_WRITE) {
      dev_linux_eth_snd();
   }

   //ACK de l'IT au CPU
   cyg_interrupt_acknowledge(vector);
   //Informe kernel d'exécuter DSR
   return(CYG_ISR_HANDLED | CYG_ISR_CALL_DSR);
}
コード例 #11
0
ファイル: app.c プロジェクト: rbsn/FAU-EZS
cyg_uint32
keyb_isr_handler(cyg_vector_t vector, cyg_addrword_t data)
{
	cyg_interrupt_acknowledge(vector);
	// Read Keyboard status
	cyg_uint8 kbstat, code = 0;
	HAL_READ_UINT8( KBSTATPORT, kbstat ); 
	// If Data available, read them -> implicitly acknowledges interrupt on hardware side!
	if( (kbstat & 0x01) != 0 ){
		HAL_READ_UINT8( KBDATAPORT, code );
		g_keycode = code;
		// Only resume thread, if there is a new keycode.
		return CYG_ISR_CALL_DSR | CYG_ISR_HANDLED;
	}
	return CYG_ISR_HANDLED;
}
コード例 #12
0
ファイル: cap.c プロジェクト: LucidOne/Rovio
void capIntHandler(void)
#endif
{
	UCHAR ucBuf;
#ifdef ECOS
	cyg_interrupt_mask(vector);
#endif
	_cap_uFrame=_cap_uFrame+1;
	if(inpw(REG_CAPFuncEnable)&0x10)
	{//Dual Buffer enable 
		if(inpw(REG_CAPFuncEnable)&0x40)
		{//will use the buffer 0 for VPOST & JPEG 
			outpw(REG_CAPFuncEnable,inpw(REG_CAPFuncEnable)&0xffffff9F);
			 ucBuf=0;
		}
		else
		{//will use the buffer 1 for VPOST & JPEG 
			outpw(REG_CAPFuncEnable,inpw(REG_CAPFuncEnable)|0x00000060);
			ucBuf=1;
		}
	}
	//Call back to the function written by user.
	outpw(REG_CAPFuncEnable,inpw(REG_CAPFuncEnable));	
#ifndef ECOS
	if(CapIntHandlerTable[0]!=0)
	{
		UCHAR ucfr;
		ucfr=(inpw(REG_CAPFuncEnable)&0x04) ? TRUE:FALSE;
		CapIntHandlerTable[0](ucBuf,ucBuf,ucfr, FALSE);
	}
#endif
#ifdef ECOS
	cyg_interrupt_acknowledge(vector);	//important
	return CYG_ISR_CALL_DSR;
#endif	
}
コード例 #13
0
// Serial I/O - low level interrupt handler (ISR)
static cyg_uint32 ra305x_timer0_isr(cyg_vector_t vector, cyg_addrword_t data)
{
    cyg_interrupt_mask(CYGNUM_HAL_INTERRUPT_TIMER0);
    cyg_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_TIMER0);
    return CYG_ISR_CALL_DSR;  // Cause DSR to be run
}
コード例 #14
0
cyg_uint32 dev_at91sam9261_uart_dbg_isr(cyg_vector_t vector, cyg_addrword_t data) {
   cyg_interrupt_mask(vector);
   unsigned int usart_csr;
   unsigned int recv_intr_cond  = 0;
   unsigned int trans_intr_cond = 0;

   board_inf_uart_t *p_inf_uart;
   AT91_REG         *p_adr;

   desc_t desc_r;
   desc_t desc_w;

   p_inf_uart = (board_inf_uart_t *)ofile_lst[desc_uart_dbg].p;
   p_adr      = (AT91_REG *)p_inf_uart->base_adr;

   desc_r = p_inf_uart->desc_r;
   desc_w = p_inf_uart->desc_w;

   // if device is loaded
   if (p_inf_uart->loaded) {
      do {
         usart_csr = *(p_adr+US_CSR);

         if( (desc_r>=0) && (ofile_lst[desc_r].oflag & O_RDONLY) ) {
            // Overrun Error
            if ((usart_csr & 0x00000020) == 0x00000020) {
               // Reset status bits, reset rx/tx.
               *(p_adr+US_CR)  = AT91C_US_RSTSTA;                          // old value 0x00000100;
            }

            // Receiver byte per byte
            if ((usart_csr & 0x01) == 0x01)                                  // RXRDY
            {
               //receive fifo
               dev_at91sam9261_uart_dbg_x_fifo_rcv(desc_uart_dbg);
            }
            recv_intr_cond  = usart_csr & *(p_adr+US_IMR) & (0x00000001);
         }
         //
         if( (desc_w>=0) && (ofile_lst[desc_w].oflag & O_WRONLY) ) {
            // TXRDY
            if (((usart_csr & 0x00000002) == 0x00000002) && (p_inf_uart->XMIT)) {
               //Transmission (per byte)
               //dev_at91sam9261_uart_x_snd(desc);
               dev_at91sam9261_uart_dbg_x_snd(desc_uart_dbg);
            }
            //
            trans_intr_cond = ( (p_inf_uart->XMIT) &&
                                (usart_csr & *(p_adr+US_IMR) & (0x00000002)));
         }
      } while ( recv_intr_cond || trans_intr_cond );
   }
   // Timer Value initialization for Read
   p_inf_uart->inter_char_timer=ttys_termios.c_cc[VTIME];

   //*AT91C_AIC_EOICR = 0; // Signal end of interrupt to AIC.
   //ACK de l'IT au CPU
   cyg_interrupt_acknowledge(vector);
   //Informe kernel d'exécuter DSR
   return(CYG_ISR_HANDLED | CYG_ISR_CALL_DSR);
}