亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? w90p710_aic.c

?? 基于中斷的串口驅動~~~~~~~~~~~~~~~~~~
?? C
字號:
/****************************************************************************
 *				北京科銀京成技術有限公司 版權所有
 *
 * 		Copyright (C) 2000-2006 CoreTek Systems Inc. All Rights Reserved.
 ***************************************************************************/

/*
 * 修改記錄:
 *
 *
 */

/**
 * @file 	W90p710_aic.c
 * @brief
 *	<li>功能:實現各功能函數。 </li>
 * @date
 */

/**************************** 引用部分 *****************************************/
#include "W90P710_BSP.H"
#include "W90P710_REG.H"
#include "W90p710_aic.h"
#include "driver_buffer.h"

/*************************** 前向聲明部分 ****************************************/


/*************************** 串口中斷聲明部分 ****************************************/
//中斷狀態定義
#define RLS  0x6
#define RDA  0x4
#define TOUT 0xC
#define THRE 0x2

//UART0_ISR
#define UART0_FIFO_SIZE 16		//串口硬件提供的FIFO大小
extern DBuffer Uart0_RXDBuf;	//接收緩沖區
extern DBuffer Uart0_TXDBuf;	//發送緩沖區

//UART1_ISR
#define UART1_FIFO_SIZE 16
extern DBuffer Uart1_RXDBuf;
extern DBuffer Uart1_TXDBuf;

/*************************** 鍵盤中斷聲明部分 ****************************************/
extern DBuffer Keypad_DBuf;		//鍵盤緩沖區

/**************************** 定義部分 *****************************************/
typedef void (*PFNCT)(void);

//用于設備中斷處理的函數指針數組
PFNCT ISR[31]={
		W90P710_WDT_INT_ISR,
		W90P710_nIRQ0_INT_ISR,
		W90P710_nIRQ1_INT_ISR,
		W90P710_nIRQ2_INT_ISR,
		W90P710_nIRQ3_INT_ISR,
		W90P710_AC97_INT_ISR,
		W90P710_LCD_INT_ISR,
		W90P710_RTC_INT_ISR,
		W90P710_UART0_INT_ISR,
		W90P710_UART1_INT_ISR,
		W90P710_UART2_INT_ISR,
		W90P710_UART3_INT_ISR,
		W90P710_T0_INT_ISR,
		W90P710_T1_INT_ISR,
		W90P710_USBH0_INT_ISR,
		W90P710_USBH1_INT_ISR,
		W90P710_EMCTX_INT_ISR,
		W90P710_EMCRX_INT_ISR,
		W90P710_GDMA0_INT_ISR,
		W90P710_GDMA1_INT_ISR,
		W90P710_SD_INT_ISR,
		W90P710_USBD_INT_ISR,
		W90P710_SC0_INT_ISR,
		W90P710_SC1_INT_ISR,
		W90P710_I2C0_INT_ISR,
		W90P710_I2C1_INT_ISR,
		W90P710_SSP_INT_ISR,
		W90P710_PWM_INT_ISR,
		W90P710_KPI_INT_ISR,
		W90P710_PS2_INT_ISR,
		W90P710_IRQ45_INT_ISR
	};


/**************************** 實現部分 *****************************************/


//開啟某中斷
void  W90P710_AIC_EnableInt(int vector)
{
	//定義掩碼局部變量
	unsigned int mask;

	//判斷中斷號是否越界
    if((vector < INTERRUPT_VECTOR_BEGIN )||(vector > INTERRUPT_VECTOR_END))
    {
		return ;
	}
	
	//用掩碼暫存中斷號
    mask = 1 << vector;

	//關閉所有中斷 
//	REG_UINT32_VALUE(REG_AIC_MDCR) = 0xFFFFFFFE;

    //打開中斷號對應的中斷通道
	REG_UINT32_VALUE(REG_AIC_MECR) = ( mask | REG_UINT32_VALUE(REG_AIC_IMR));
} 


//關閉某中斷
void W90P710_AIC_DisableInt(int vector)			
{
	//定義掩碼局部變量
	unsigned int mask;
	
	//判斷中斷號是否越界
    if((vector < INTERRUPT_VECTOR_BEGIN )||(vector > INTERRUPT_VECTOR_END))
    {
		return ;
	}

	//用掩碼暫存中斷號
    mask = 1 << vector;
    
    //關閉所有中斷 
	REG_UINT32_VALUE(REG_AIC_MDCR) = 0xFFFFFFFE;
    
	//開啟其他中斷
	REG_UINT32_VALUE(REG_AIC_MDCR) = ( ~mask & REG_UINT32_VALUE(REG_AIC_IMR) );
}



//中斷處理函數 第二級:根據中斷號跳轉至相應的設備處理函數
void W90P710_CPU_ISR_Handler()				
{
	int vector;	

	//讀取中斷號
	vector = REG_UINT32_VALUE(REG_AIC_IPER);

	//對中斷號右移處理,因在寄存器中中斷號存儲在[6:0]						
	vector >>= 2;
	
	//跳轉至相應的中斷處理函數,減一是為了對齊數組下標
	if(0 != vector)
	{
		if(REG_UINT32_VALUE(REG_AIC_ISNR) == vector)
		{
			(*ISR[vector-1])();
			//向AIC_EOSCR中寫入任意值,表明中斷處理完成,
			REG_UINT32_VALUE(REG_AIC_EOSCR) = 1;
		}
	}
}


//中斷設備處理函數定義
void	W90P710_WDT_INT_ISR(){return;}
void	W90P710_nIRQ0_INT_ISR(){return;}
void	W90P710_nIRQ1_INT_ISR(){return;}
void	W90P710_nIRQ2_INT_ISR(){return;}
void	W90P710_nIRQ3_INT_ISR(){return;}
void	W90P710_AC97_INT_ISR(){return;}
void	W90P710_LCD_INT_ISR(){return;}
void	W90P710_RTC_INT_ISR(){return;}

void	W90P710_UART0_INT_ISR()
{
	unsigned int IIRvalue;
	unsigned char myChar,irqType,rftls,i,j;
	
	//讀IIR寄存器
	REG_READ_UINT32(REG_UART0_IIR,IIRvalue);
	
	i=(unsigned char)(IIRvalue&(BIT5|BIT6));	//獲取IIR寄存器中RFTLS的設置
	//根據RFTLS的設置給rftls變量賦值
	switch(i)
	{
		case 0: rftls=1;break;
		case 1: rftls=4;break;
		case 2: rftls=8;break;
		case 3: rftls=14;break;
		default: rftls=1;break;
	}	
	irqType=(unsigned char)(IIRvalue&0x0F);	//判斷中斷類型
	
	switch(irqType)
	{
		//RDA、TOUT中斷處理:接收數據
		case RDA:
		case TOUT:
			while(Uart0_RXDBuf.length < Uart0_RXDBuf.size && rftls>0)   //接收緩沖區未滿則接收rftls個數據
			{
				myChar=REG_UINT32_VALUE(REG_UART0_RBR)&0xFF;
				rftls--;
				DBuffer_Write(&Uart0_RXDBuf,myChar);
			}
			if(Uart0_RXDBuf.length == Uart0_RXDBuf.size)
				REG_UINT32_VALUE(REG_UART0_IER)&=~BIT0;	//緩沖區滿則關接收中斷	
			break;
			
		//THRE中斷處理:發送數據	
		case THRE:
			if(Uart0_TXDBuf.length >= UART0_FIFO_SIZE)	//若發送緩沖區數據數多于硬件FIFO長度,則一次先發送FIFO長度個數據
			{
				for(i=0;i<UART0_FIFO_SIZE;i++)
				{
					DBuffer_Read(&Uart0_TXDBuf,&myChar);
					REG_WRITE_UINT32(REG_UART0_THR,(REG_UINT32_VALUE(REG_UART0_THR)&0xFFFFFF00)|myChar);
				}
			}
			else if(Uart0_TXDBuf.length > 0)	//若發送緩沖區數據數小于硬件FIFO長度,則將發送緩沖區的數據一次發送
			{
				j=Uart0_TXDBuf.length;
				for(i=0;i < j;i++)
				{
					DBuffer_Read(&Uart0_TXDBuf,&myChar);
					REG_WRITE_UINT32(REG_UART0_THR,(REG_UINT32_VALUE(REG_UART0_THR)&0xFFFFFF00)|myChar);
				}
			}
			if(Uart0_TXDBuf.length == 0)	//發送緩沖區空則關THRE中斷
				REG_UINT32_VALUE(REG_UART0_IER)&=~BIT1;	
			break;
			
		//RLS及其他:清除錯誤	
		case RLS:
		default:
			REG_READ_UINT32(REG_UART0_LSR,irqType);		//讀LSR清除錯誤
			break;
	}
	return;
}

void	W90P710_UART1_INT_ISR()
{
	unsigned int IIRvalue;
	unsigned char myChar,irqType,rftls,i,j;
	
	REG_READ_UINT32(REG_UART1_IIR,IIRvalue);
	i=(unsigned char)(IIRvalue&(BIT5|BIT6));
	switch(i)
	{
		case 0: rftls=1;break;
		case 1: rftls=4;break;
		case 2: rftls=8;break;
		case 3: rftls=14;break;
		default: rftls=1;break;
	}	
	irqType=(unsigned char)(IIRvalue&0x0F);
	
	switch(irqType)
	{
		case RDA:
		case TOUT:
			while(Uart1_RXDBuf.length < Uart1_RXDBuf.size && rftls>0) 
			{
				myChar=REG_UINT32_VALUE(REG_UART1_RBR)&0xFF;
				rftls--;
				DBuffer_Write(&Uart1_RXDBuf,myChar);
			}
			if(Uart1_RXDBuf.length == Uart1_RXDBuf.size)
				REG_UINT32_VALUE(REG_UART1_IER)&=~BIT0;	//緩沖區滿則關接收中斷	
			break;
			
		case THRE:
			if(Uart1_TXDBuf.length >= UART1_FIFO_SIZE)
			{
				for(i=0;i< UART1_FIFO_SIZE;i++)
				{
					DBuffer_Read(&Uart1_TXDBuf,&myChar);
					REG_WRITE_UINT32(REG_UART1_THR,(REG_UINT32_VALUE(REG_UART1_THR)&0xFFFFFF00)|myChar);
				}
			}
			else if(Uart1_TXDBuf.length > 0)
			{
				j = Uart1_TXDBuf.length;
				for(i=0;i < j;i++)
				{
					DBuffer_Read(&Uart1_TXDBuf,&myChar);
					REG_WRITE_UINT32(REG_UART1_THR,(REG_UINT32_VALUE(REG_UART1_THR)&0xFFFFFF00)|myChar);
				}
			}
			if(Uart1_TXDBuf.length == 0)
				REG_UINT32_VALUE(REG_UART1_IER)&=~BIT1;	
			break;
			
		case RLS:
		default:
			REG_READ_UINT32(REG_UART1_LSR,irqType);
			break;
	}
	return;
}
void	W90P710_UART2_INT_ISR(){return;}
void	W90P710_UART3_INT_ISR(){return;}
void	W90P710_T0_INT_ISR()
{
/*	static volatile int i=0;
	i++;
	printf("Timer0 Interrupted\t%d\ttimes!\n\r",i);
	REG_UINT32_VALUE(REG_TISR) |= BIT1;*/
	return;
}
void	W90P710_T1_INT_ISR()
{
/*	static volatile int i=0;
	i++;
	printf("Timer1 Interrupted\t%d\ttimes!\n\r",i);
	REG_UINT32_VALUE(REG_TISR) |= BIT2;*/
	return;
}
void	W90P710_USBH0_INT_ISR(){return;}
void	W90P710_USBH1_INT_ISR(){return;}
void	W90P710_EMCTX_INT_ISR(){return;}
void	W90P710_EMCRX_INT_ISR(){return;}
void	W90P710_GDMA0_INT_ISR(){return;}
void	W90P710_GDMA1_INT_ISR(){return;}
void	W90P710_SD_INT_ISR(){return;}
void	W90P710_USBD_INT_ISR(){return;}
void	W90P710_SC0_INT_ISR(){return;}
void	W90P710_SC1_INT_ISR(){return;}
void	W90P710_I2C0_INT_ISR(){return;}
void	W90P710_I2C1_INT_ISR(){return;}
void	W90P710_SSP_INT_ISR(){return;}
void	W90P710_PWM_INT_ISR(){return;}
void	W90P710_KPI_INT_ISR()
{
	unsigned int  status;
	unsigned char myChar;
	
	REG_READ_UINT32(REG_KPISTATUS,status);
	myChar=(unsigned char)(status&0x7F);
	DBuffer_Write(&Keypad_DBuf,myChar);	
	return;
}
void	W90P710_PS2_INT_ISR(){return;}
void	W90P710_IRQ45_INT_ISR(){return;}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米精品一区二区三区在线观看一 | 老司机午夜精品| 欧美日本高清视频在线观看| 亚洲一区二区三区在线| 欧美精选午夜久久久乱码6080| 亚洲福中文字幕伊人影院| 欧美福利一区二区| 精品综合免费视频观看| 国产欧美日韩在线| 色婷婷国产精品| 亚洲午夜一区二区三区| 欧美成人高清电影在线| 国产精品 日产精品 欧美精品| 国产精品久线在线观看| 欧美日韩久久一区| 国产美女主播视频一区| 国产精品伦理一区二区| 欧美综合亚洲图片综合区| 麻豆国产精品一区二区三区 | 国产一区二区三区久久久 | 综合久久国产九一剧情麻豆| 色94色欧美sute亚洲13| 美女视频网站黄色亚洲| 国产精品乱码人人做人人爱| 欧美日韩中字一区| 国产精一区二区三区| 一区二区三区不卡视频在线观看| 欧美一区二区三区小说| 成人av影视在线观看| 亚洲18色成人| 国产精品免费av| 日韩一区二区三区观看| 色综合天天综合网国产成人综合天| 五月综合激情日本mⅴ| 精品蜜桃在线看| 91黄色免费观看| 成人亚洲精品久久久久软件| 天天做天天摸天天爽国产一区| 国产农村妇女毛片精品久久麻豆| 欧美日韩免费一区二区三区| 成人免费视频视频在线观看免费| 天天综合色天天| 亚洲精品美国一| 国产色产综合产在线视频| 欧美一区二区女人| 欧美又粗又大又爽| 成人深夜福利app| 久久99精品久久久| 视频一区中文字幕| 亚洲综合视频在线| 亚洲色图一区二区| 国产日韩欧美一区二区三区乱码 | 欧美三级日韩三级国产三级| 国产成人亚洲综合a∨猫咪| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲欧美日本在线| 国产精品情趣视频| 国产亚洲va综合人人澡精品| 日韩亚洲欧美成人一区| 欧美视频你懂的| 色狠狠一区二区| 色综合中文综合网| 成人中文字幕合集| 国产精品自拍一区| 韩国av一区二区| 久久精品国产澳门| 九色porny丨国产精品| 另类中文字幕网| 久久超碰97人人做人人爱| 蜜桃av一区二区三区电影| 天天射综合影视| 日产国产欧美视频一区精品| 性做久久久久久免费观看欧美| 依依成人综合视频| 亚洲国产欧美在线人成| 一区二区激情小说| 亚洲成在人线免费| 日韩高清中文字幕一区| 日韩av电影免费观看高清完整版| 图片区小说区区亚洲影院| 午夜日韩在线观看| 裸体一区二区三区| 激情丁香综合五月| 国产a级毛片一区| 不卡的电影网站| 在线观看成人小视频| 欧美欧美欧美欧美| 日韩精品一区二区三区在线 | voyeur盗摄精品| 在线一区二区三区四区五区| 欧美特级限制片免费在线观看| 欧美三区在线视频| 欧美大片一区二区| 亚洲国产成人午夜在线一区 | 天天操天天色综合| 奇米亚洲午夜久久精品| 国产精品1区2区3区| 成a人片国产精品| 欧美三级在线视频| 日韩欧美一区二区久久婷婷| 久久女同性恋中文字幕| 亚洲丝袜另类动漫二区| 亚洲一区二区三区精品在线| 免费成人你懂的| 成人激情文学综合网| 色欧美日韩亚洲| 日韩精品一区二区三区视频在线观看| 久久综合一区二区| 亚洲精品免费一二三区| 久久99国产精品久久99 | 蜜乳av一区二区三区| 成人白浆超碰人人人人| 精品视频999| 久久久久久久综合狠狠综合| 亚洲猫色日本管| 久久99精品国产91久久来源| 色综合久久久久综合体| 欧美xxxxx牲另类人与| 亚洲精品午夜久久久| 久久精品国产第一区二区三区| 99精品国产视频| 精品国精品自拍自在线| 亚洲欧美日韩国产另类专区| 久久精品久久综合| 在线一区二区视频| 亚洲国产精品传媒在线观看| 日韩精彩视频在线观看| 91香蕉国产在线观看软件| 精品日韩一区二区| 亚洲成av人片一区二区三区| 豆国产96在线|亚洲| 欧美一级二级三级乱码| 亚洲激情图片qvod| 粉嫩13p一区二区三区| 日韩欧美一区二区久久婷婷| 亚洲精品videosex极品| 粗大黑人巨茎大战欧美成人| 日韩一级免费观看| 亚洲一级电影视频| 99精品久久99久久久久| 国产午夜精品理论片a级大结局 | 久久99久久99精品免视看婷婷| 日本丰满少妇一区二区三区| 欧美国产精品劲爆| 精品综合免费视频观看| 欧美精品日韩综合在线| 亚洲欧美另类综合偷拍| 成人丝袜视频网| 久久久激情视频| 国精产品一区一区三区mba视频| 777奇米成人网| 香蕉成人伊视频在线观看| 91麻豆swag| 亚洲欧美国产三级| 不卡高清视频专区| 中文字幕一区在线| 成人高清免费观看| 中文字幕乱码日本亚洲一区二区| 国内精品第一页| 日韩精品一区二区三区视频播放| 日韩电影在线看| 欧美一级视频精品观看| 蜜桃久久精品一区二区| 欧美一区二区三区在线看| 日本成人在线看| 欧美一区二区三区性视频| 人人狠狠综合久久亚洲| 日韩视频免费直播| 久久www免费人成看片高清| 欧美va亚洲va| 国产精品资源网| 国产精品电影一区二区| 一本色道**综合亚洲精品蜜桃冫| 国产精品成人一区二区艾草 | 中文字幕va一区二区三区| 成人黄色在线网站| 中文在线资源观看网站视频免费不卡| 国产jizzjizz一区二区| 中文字幕一区在线观看视频| 色香蕉久久蜜桃| 香蕉成人啪国产精品视频综合网| 777a∨成人精品桃花网| 久久精品国产精品亚洲红杏| 久久老女人爱爱| 91亚洲精品一区二区乱码| 亚洲一区在线视频| 日韩一区二区三区av| 国产九色sp调教91| 亚洲欧美国产高清| 91精品国产免费久久综合| 国产综合色在线| 亚洲欧美日韩综合aⅴ视频| 精品视频1区2区| 国产一区二区三区不卡在线观看 | 成人黄色综合网站| 一区二区三区在线播| 日韩一级免费一区| av色综合久久天堂av综合| 亚洲一二三专区| 国产亚洲欧美一级|