示例#1
0
/* check the IRQ lines for pending interrupts */
void m6800_cpu_device::CHECK_IRQ_LINES()
{
	// TODO: IS3 interrupt

	if (m_nmi_pending)
	{
		if(m_wai_state & M6800_SLP)
			m_wai_state &= ~M6800_SLP;

		m_nmi_pending = FALSE;
		enter_interrupt("M6800 '%s' take NMI\n",0xfffc);
	}
	else
	{
		if( m_irq_state[M6800_IRQ_LINE] != CLEAR_LINE )
		{   /* standard IRQ */
			if(m_wai_state & M6800_SLP)
				m_wai_state &= ~M6800_SLP;

			if( !(CC & 0x10) )
			{
				enter_interrupt("M6800 '%s' take IRQ1\n",0xfff8);
				standard_irq_callback(M6800_IRQ_LINE);
			}
		}
		else
			if( !(CC & 0x10) )
				m6800_check_irq2();
	}
}
示例#2
0
void USART3_IRQHandler()
{
	__IO int i;
	__IO u32_t sr;
	int need_sched = 0;
	
	enter_interrupt();

	sr = USART3->SR;
	if( sr & (1L<<5))  //rxne
	{
		i = USART3->DR;
	}
	if( sr & (1L<<6))  //txe
	{
		if(u3_send.sending.val)
		{
			need_sched = uart3_send_next();
		}
		else
		{
			USART_ClearITPendingBit(USART3, USART_IT_TC);
		}
	} 
	
	exit_interrupt(need_sched);
}
示例#3
0
void USART1_IRQHandler()
{
	__IO u32_t sr;
	uint8_t data;
	int need_sched = 0;

	enter_interrupt();
	
 	sr = USART1->SR;
#if UART1_USE_DMA
	if(handle_uart1_rcv())
		need_sched = 1;
#else
	if( sr & (1L<<5))  //rxne
	{
		data = USART1->DR;
		uart0_read_data(&data, 1);
	}
	if( sr & (1L<<6))  //txe
	{
		if(u1_send.sending.val)
		{
			need_sched = uart1_send_next();
		}
		else
		{
			USART_ClearITPendingBit(USART1, USART_IT_TC);
		}
	} 
#endif
	
	exit_interrupt(need_sched);
}
示例#4
0
void DMA2_Stream7_IRQHandler()  //发送中断
{	
	uint32_t irq_flag;
	enter_interrupt();

	DMA_Cmd(DMA2_Stream7, DISABLE);
	NVIC_DisableIRQ(DMA2_Stream7_IRQn);
	irq_flag = local_irq_save(); 

	if(DMA_GetFlagStatus(DMA2_Stream7, DMA_FLAG_TEIF7))
	{
		
		p_err("uart dma err");
	}

	DMA_ITConfig(DMA2_Stream7, DMA_IT_TC | DMA_IT_TE | DMA_IT_HT,DISABLE);
	DMA_ClearFlag(DMA2_Stream7, DMA_FLAG_TCIF7 | DMA_FLAG_TEIF7 | DMA_FLAG_HTIF7 | DMA_FLAG_DMEIF7 | DMA_FLAG_HTIF7);
   
	u1_send.cnt = DMA2_Stream7->NDTR;   //取剩余字数,应该为0
	local_irq_restore(irq_flag);
	USART_DMACmd(USART1, USART_DMAReq_Tx, DISABLE);
	p_dbg("u_send irq\n");
	wake_up(u1_send.wait);   //唤醒等待线程
	
	exit_interrupt(1);
}
示例#5
0
//extern led_scan(void);
void  SysTick_Handler (void)
{
	static int cnt = 0;
	enter_interrupt();

	tick_ms++;
//	led_scan();
	if(cnt++ >= 10)
	{
		jiffies++;
		cnt = 0;
		OSTimeTick();                                /* Call uC/OS-II's OSTimeTick()                       */
		exit_interrupt(1);                           
		return;
	}
	exit_interrupt(0);
}
示例#6
0
void USBH_OTG_ISR_Handler()
{
	USB_OTG_GINTSTS_TypeDef gintsts;
	uint32_t retval = 0;
	USB_OTG_CORE_HANDLE *pdev = &USB_OTG_Core;

	enter_interrupt();

	gintsts.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTSTS);
	gintsts.d32 &= USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTMSK);
	if (!gintsts.d32)
	{
		exit_interrupt(0);
		return ;
	}

	if (gintsts.b.rxstsqlvl)
	{
		gintsts.b.rxstsqlvl = 0;
		USB_OTG_USBH_handle_rx_qlvl_ISR(pdev);
	}

	if (gintsts.b.nptxfempty)
	{
		gintsts.b.nptxfempty = 0;
		USB_OTG_USBH_handle_nptxfempty_ISR(pdev);
	}

	if (gintsts.b.hcintr)
	{
		gintsts.b.hcintr = 0;
		retval = USB_OTG_USBH_handle_hc_ISR(pdev);
	}

	if (!gintsts.d32)
		goto end;

	if (gintsts.b.sofintr)
	{
		USB_OTG_USBH_handle_sof_ISR(pdev);
	}

	if (gintsts.b.ptxfempty)
	{
		USB_OTG_USBH_handle_ptxfempty_ISR(pdev);
	}

	if (gintsts.b.portintr)
	{
		USB_OTG_USBH_handle_port_ISR(pdev);
	}

	if (gintsts.b.disconnect)
	{
		USB_OTG_USBH_handle_Disconnect_ISR(pdev);

	}

	if (gintsts.b.incomplisoout)
	{
		USB_OTG_USBH_handle_IncompletePeriodicXfer_ISR(pdev);
	}

	if (gintsts.b.datafsusp)
	{

	}

end: 
	exit_interrupt(retval);
}