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

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

?? uart.c

?? 三星 s3c6400測試代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
			*g_pFifoDebug++ = (Inp32(&pUartRegs->rUfStat)>>8)&0x3f;
			*g_pFifoDebug = 0;
			
			while (!(Inp32(&pUartRegs->rUfStat )& (1<<14)) && (*g_pUartTxStr[ch] != TX_END_CHAR)) 	//until tx fifo full or end of string
				Outp32(&pUartRegs->rUtxh , *g_pUartTxStr[ch]++);

			if(*g_pUartTxStr[ch] == TX_END_CHAR) 
			{
				*(g_pUartTxStr[ch]+1) = NULL;
				g_AisTxDone[ch] = 1;	

				uTemp = Inp32(&pUartRegs->rUintM);
				uTemp |= BIT_UART_TXD;
				Outp32(&pUartRegs->rUintM , uTemp);
//				pUartRegs->rUintM |= (BIT_UART_TXD);
				return;
			}
			else 
			{
				uTemp = Inp32(&pUartRegs->rUintM);
				uTemp &= ~( BIT_UART_TXD);
				Outp32(&pUartRegs->rUintM , uTemp);
//				pUartRegs->rUintM &= ~(BIT_UART_TXD);
			}
		}
		else // 0 : fifo disable
		{
			if (*g_pUartTxStr[ch] != TX_END_CHAR)
			{
				Outp32(&pUartRegs->rUtxh , *g_pUartTxStr[ch]++);
				uTemp = Inp32(&pUartRegs->rUintM);
				uTemp &= ~( BIT_UART_TXD);
				Outp32(&pUartRegs->rUintM , uTemp);
//				pUartRegs->rUintM &= ~(BIT_UART_TXD);
			}
			else
			{
				*(g_pUartTxStr[ch]+1) = NULL;
				g_AisTxDone[ch] = 1;	
				return;
			}
		}
	}

	// Rx ISR	
	if (Inp32(&pUartRegs->rUintP) & BIT_UART_RXD)
	{
		uTemp = Inp32(&pUartRegs->rUintM);
		uTemp |= BIT_UART_RXD;
		Outp32(&pUartRegs->rUintM , uTemp);
		Outp32(&pUartRegs->rUintSp , BIT_UART_RXD);
		Outp32(&pUartRegs->rUintP , BIT_UART_RXD);

		if (pUartRegs->rUfCon & 1) // 1 : fifo enable 
		{
			// for debugging fifo 
			*g_pFifoDebug++ = ++g_uFcnt;
			*g_pFifoDebug++ = (Inp32(&pUartRegs->rUfCon)>>4)&3;
			*g_pFifoDebug++ = (Inp32(&pUartRegs->rUfStat))&0x3f;
			*g_pFifoDebug = 0;


			while (Inp32(&pUartRegs->rUfStat )& 0x3f) 	//until rx fifo count 0
			{
				*g_pUartRxStr[ch] = (u8)(Inp32(&pUartRegs->rUrxh));
				*g_pUartRxStr[ch]++;
//				printf("%c", *g_pUartRxStr[ch]++);
			}	

			if(*(g_pUartRxStr[ch]-1) == RX_END_CHAR) 
			{
				*g_pUartRxStr[ch] = NULL;
				g_AisRxDone[ch] = 1;	

				uTemp = Inp32(&pUartRegs->rUintM);
				uTemp |= ( BIT_UART_RXD);
				Outp32(&pUartRegs->rUintM , uTemp);
				
//				pUartRegs->rUintM |= (BIT_UART_RXD);
				return;
			}
			else 
			{
				uTemp = Inp32(&pUartRegs->rUintM);
				uTemp &= ~( BIT_UART_RXD);
				Outp32(&pUartRegs->rUintM , uTemp);
				
//				pUartRegs->rUintM &= ~(BIT_UART_RXD);
			}
		}
		else // 0 : fifo disable
		{
			tempChar = (u8)(Inp32(&pUartRegs->rUrxh));
			if (tempChar != RX_END_CHAR)
			{
//				printf("%c", tempChar);
				*g_pUartRxStr[ch]++ = tempChar;
			}
			else 
			{
				*g_pUartRxStr[ch] = NULL;
//			    	printf("\n");
				g_AisRxDone[ch] = 1;
				return;
			}

			uTemp = Inp32(&pUartRegs->rUintM);
			uTemp &= ~( BIT_UART_RXD);
			Outp32(&pUartRegs->rUintM , uTemp);
//			pUartRegs->rUintM &= ~(BIT_UART_RXD);
		}
	}

	// Modem UART ISR	
	if ((Inp32(&pUartRegs->rUintP ))& BIT_UART_MODEM)
	{

		uTemp = Inp32(&pUartRegs->rUintM);
		uTemp |= BIT_UART_MODEM;
		Outp32(&pUartRegs->rUintM , uTemp);
		Outp32(&pUartRegs->rUintSp , BIT_UART_MODEM);
		Outp32(&pUartRegs->rUintP , BIT_UART_MODEM);


		// Implementation for modem uart
		printf("Modem Int Occured!\n");

			uTemp = Inp32(&pUartRegs->rUintM);
			uTemp &= ~( BIT_UART_MODEM);
			Outp32(&pUartRegs->rUintM , uTemp);

//		pUartRegs->rUintM &= ~(BIT_UART_MODEM);
	}

	// unknown UART interrupt 
	if (Inp32(&pUartRegs->rUintP )& ~(BIT_UART_MODEM|BIT_UART_TXD|BIT_UART_ERROR|BIT_UART_RXD))
		printf("UARTx sub INT - unknown sub interrupt!!\n");


}



//////////
// Function Name : Isr_Dma
// Function Description : This is Uart DMA request ISR which operates DMA request
// Input : NONE
// Output : NONE
// Version : v0.1

void __irq Isr_Dma(void) // only one for test
{

	u32 uStatus;
	u32 uConfig;
	u32 uRegTmp;
	u32 uRegTmp2;	
	u8 ch;
	u32 uCnt;
	
	INTC_Disable(NUM_DMA0);


	uStatus = DMAC_IntStatus(&oUARTDma);
	
	if (uStatus&0x1)    // Tx
	{

		DMACH_Stop(&oUARTDma);
		DMACH_ClearIntPending(&oUARTDma);
		DMACH_ClearErrIntPending(&oUARTDma);

		uConfig = DMACH_Configuration(&oUARTDma);
		ch = ((uConfig & 0x3c0)>>6)>>1;	//find UART ch fr request src

		g_AisTxDone[ch] = 1;

	}
	

	else if (uStatus&0x2)    // Rx
	{
		DMACH_Stop(&oUARTDma);

		DMACH_ClearIntPending(&oUARTDma);
		DMACH_ClearErrIntPending(&oUARTDma);

		uConfig = DMACH_Configuration(&oUARTDma);
		ch = (((uConfig & 0x1e)>>1)-1)>>1;	//find UART ch fr request src



		for (uCnt=0; uCnt<DMA_BUF_LEN; uCnt++)
			*g_pUartRxStr[ch]++ = *g_pUartBuf++;


		if ( *(g_pUartRxStr[ch]-1) == RX_END_CHAR )
		{
			g_AisRxDone[ch] = 1;
			*g_pUartRxStr[ch] = NULL; // added null after rx string

		}
		else
		{
			
			DMACH_ClearIntPending(&oUARTDma);
			DMACH_ClearErrIntPending(&oUARTDma);


			uRegTmp = DMACH_ReadDstAddr(&oUARTDma);
			uRegTmp+=1;
			uRegTmp2 = DMACH_ReadSrcAddr(&oUARTDma);			// next SrcAddress
			DMACH_AddrSetup(DMA_B,uRegTmp2,uRegTmp,&oUARTDma);
			DMACH_SetTransferSize(8,&oUARTDma);					// set TransferSize
			DMACH_Start(&oUARTDma);			

		}

	}

	INTC_Enable(NUM_DMA0);
	INTC_ClearVectAddr();			

}





//////////
// Function Name : UART_SetConfig
// Function Description : This function set up UART by pre-defined value (input)
// Input :
//		Channel(0~3)
//		Other Options 0. Nothing[D]  1.Send Break Signal  2. Loop Back Mode
//		Parity Mode 1. No parity[D] 2. Odd 3. Even 4. Forced as '1' 5. Forced as '0'
//		Number of Stop Bit 1. One stop bit per frame[D] 2. Two stop bit per frame
//		Word Length 1. 5bits 2. 6bits 3. 7bits 4. 8bits
//		Operating Clock 1. PCLK[D]	2. UEXTCLK	3. PLL
//            PLL selection  1.EPLL    2.MPLL
//		External Interface Type 1. UART[D]   2. IrDA mode
//		Baudrate (ex 9600, 115200[D], 921600)
//		Operating Mode 1. Interrupt[D]	2. DMA
//		FIFO Mode (Tx/Rx[byte]) 1. no FIFO[D]  2. Empty/1  3. 16/8   4. 32/16  5. 48/32
//		AFC Mode 1. Disable[D]	2. Enable
//		nRTS trigger level(byte) 1. 63[D]   2. 56   3. 48   4. 40   5. 32   6. 24   7. 16   8. 8
// Output : NONE
// Version : v0.1
// default UART channel setting is UART_SetConfig(0,0,1,1,4,1,2,1,115200,1,1,1,1)

u8 UART_SetConfig(u8 cCh, u32 uBreakorLoop,u32 uParity,u32 uNumStop,u32 uWordLength,u32 uOpCLK,u32 uSelPLL, 
				u32 uExtIFtype,u32 uBaudrate,u32 uSelOpmode,u32 uSelFIFO,u32 uSelAFC,u32 uRTSLvL)
{

	volatile UART_CON *pUartCon;

	pUartCon = &g_AUartCon[cCh];	

	
	//Set Other Options
//	printf("\nSelect Other Options\n 0. Nothing[D]  1.Send Break Signal  2. Loop Back Mode  \n Choose : ");
	switch(uBreakorLoop)
	{		
		default : 	
					pUartCon->cSendBreakSignal = 0x0;
					pUartCon->cLoopTest = 0x0;
					break;
					
		case 1 :		
					pUartCon->cSendBreakSignal = 1;	
					return cCh;
					
					
		case 2 :	 	
					pUartCon->cLoopTest = 1;		
					break;		
	}		
	
	
	//Set Parity mode
//	printf("\nSelect Parity Mode\n 1. No parity[D] 2. Odd 3. Even 4. Forced as '1' 5. Forced as '0' \n Choose : ");
	switch(uParity)
	{		
		default : 	
			pUartCon->cParityBit = 0;		
			break;
		case 2 : 		
			pUartCon->cParityBit = 4;
			break;
		case 3 :		
			pUartCon->cParityBit = 5;
			break;
		case 4 :		
			pUartCon->cParityBit = 6;
			break;
		case 5 :		
			pUartCon->cParityBit = 7;
			break;
	}
	//Set the number of stop bit	
//	printf("\n\nSelect Number of Stop Bit\n 1. One stop bit per frame[D] 2. Two stop bit per frame");
	switch(uNumStop)
	{
		default : 	
			pUartCon->cStopBit = 0;
			break;
			
		case 2 : 		
			pUartCon->cStopBit = 1;
			break;		
	}
	//Set Word Length	
//	printf("\n\nSelect Word Length\n 1. 5bits 2. 6bits 3. 7bits 4. 8bits[D] \n Choose : ");
	switch(uWordLength)
	{		
		case 1 :		
			pUartCon->cDataBit = 0;
			break;
		case 2 :		
			pUartCon->cDataBit = 1;
			break;
		case 3 :		
			pUartCon->cDataBit = 2;		
			break;	
		default :		
			pUartCon->cDataBit = 3;
			break;
	}
	
	
	// Set Operation clock
//	printf("\n\nSelect Operating Clock\n 1. PCLK[D]	2. UEXTCLK	3. EPLL \n Choose : ");
	switch (uOpCLK)
	{
	case 2 :
		pUartCon->cOpClock = 1;
//		g_uOpClock=12000000;
		GPIO_SetFunctionEach(eGPIO_F,eGPIO_13,2);		
		// connect CLKOUT and UEXTCLK
//		printf("\nInput PWM EXT_CLK by Pulse Generater\n");
		break;

	case 3 :
		pUartCon->cOpClock = 3;
//		printf("\nSelect Clock SRC\n 1.EPLL  2.MPLL \n Choose: ");
			switch(uSelPLL)
				{
					case 1:
//						SYSC_SetPLL(eEPLL,64,3,1,0);	//EPLL=128Mhz
						SYSC_SetPLL(eEPLL,32,1,1,0);   //EPLL=192Mhz
						SYSC_ClkSrc(eEPLL_FOUT);
						SYSC_ClkSrc(eUART_MOUTEPLL);
//						SYSC_CtrlCLKOUT(eCLKOUT_EPLLOUT,9);  						
						g_uOpClock = CalcEPLL(32,1,1,0);
//						printf("EPLL = %dMhz\n",(g_uOpClock/1000000));
						// use EPLL output clock
						//SetEPLL(42, 1, 2); // Epll output - 96MHz, pll input - 12MHz
						//CLK_SRC	UART_SEL[13]  0:EPLL
						//CLK_DIV2	UART_RATIO[19:16]
						break;
					case 2:							//MPLL
						SYSC_ClkSrc(eMPLL_FOUT);				
						SYSC_ClkSrc(eUART_DOUTMPLL);

						Delay(100);
						g_uOpClock = (u32)g_MPLL/2;
						
//						printf("MPLL = %dMhz\n",(g_uOpClock/1000000));
						// use MPLL output clock
						//CLK_SRC	UART_SEL[13]	  1:MPLL
						//CLK_DIV2	UART_RATIO[19:16]
						break;
					default:							//MPLL
						SYSC_ClkSrc(eMPLL_FOUT);		
						SYSC_ClkSrc(eUART_DOUTMPLL);
						Delay(100);
				
						g_uOpClock =(u32) g_MPLL/2;
						//SetEPLL(42, 1, 2); // Epll output - 96MHz, pll input - 12MHz
						//CLK_SRC	UART_SEL[13]  0:EPLL
						//CLK_DIV2	UART_RATIO[19:16]
						break;									
				}
		break;

	default :
		pUartCon->cOpClock = 0; // PCLK		
		break;
	}

	// Select UART or IrDA 1.0
//	printf("\n\nSelect External Interface Type\n 1. UART[D]   2. IrDA mode\n Choose : ");
	if (uExtIFtype==2)		
		pUartCon->cSelUartIrda = 1; // IrDA mode
	else					
		pUartCon->cSelUartIrda = 0; // IrDA mode

	// Set Baudrate
//	printf("\n\nType the baudrate and then change the same baudrate of host, too.\n");
//	printf(" Baudrate (ex 9600, 115200[D], 921600) : ");
	pUartCon->uBaudrate = uBaudrate;

//	if ((s32)pUartCon->uBaudrate == -1) 
//		pUartCon->uBaudrate = 115200;

	// Select UART operating mode
//	printf("\n\nSelect Operating Mode\n 1. Interrupt[D]	2. DMA\n Choose : ");
	if (uSelOpmode==2)
	{
		pUartCon->cTxMode = 2; // DMA0 mode
		pUartCon->cRxMode = 3; // DMA1 mode
	}
	else
	{	
		pUartCon->cTxMode = 1; // Int mode
		pUartCon->cRxMode = 1; // Int mode
	}

	// Select UART FIFO mode
//	printf("\n\nSelect FIFO Mode (Tx/Rx[byte])\n 1. no FIFO[D]  2. Empty/1  3. 16/8   4. 32/16  5. 48/32 \n Choose : ");

	if ( (uSelFIFO>1)&&(uSelFIFO<6) )
	{
		pUartCon->cEnableFifo = 1;
		pUartCon->cTxTrig = uSelFIFO -2;
		pUartCon->cRxTrig = uSelFIFO -2;
	}
	else 
	{
		pUartCon->cEnableFifo = 0;
	}

	// Select AFC mode enable/disable
//	printf("\n\nSelect AFC Mode\n 1. Disable[D]	2. Enable\n Choose : ");
	if (uSelAFC == 2)
	{
		pUartCon->cAfc = 1; // AFC mode enable
//		printf("Select nRTS trigger level(byte)\n 1. 63[D]   2. 56   3. 48   4. 40   5. 32   6. 24   7. 16   8. 8\n Choose : ");
		
		
		if ( (uRTSLvL>1)&&(uRTSLvL<9) )	
			pUartCon->cRtsTrig = uRTSLvL -1;

		else						
			pUartCon->cRtsTrig = 0; // default 63 byte
	}
	else
	{
		pUartCon->cAfc = 0; // AFC mode disable
	}

	return cCh;
}



//////////
// Function Name : CalcEPLL
// Function Description : This is Uart DMA request ISR which operates DMA request
// Input : NONE
// Output : NONE
// Version : v0.1

u32 CalcEPLL(u32 uMdiv,u32 uPdiv,u32 uSdiv,u32 uKdiv)
{
	float EPLL;

	EPLL=(((uMdiv+(uKdiv/(2<<16)))*FIN)/(uPdiv*(1<<uSdiv)));

	return (u32)EPLL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美丝袜自拍制服另类| 久久精品免费在线观看| 亚洲福利一二三区| 国产亚洲成aⅴ人片在线观看| 99久久精品免费| 久久精品国产网站| 亚洲欧美日韩国产另类专区| 欧美日韩国产三级| av一区二区三区黑人| 蜜桃av一区二区在线观看| 国产精品伦理在线| 日韩免费电影网站| 欧美三区在线观看| heyzo一本久久综合| 精品一区二区三区免费观看 | 午夜精品久久久久久久久久| 欧美激情一区二区三区全黄| 日韩一卡二卡三卡国产欧美| 91麻豆.com| 成人一区二区三区视频| 美国三级日本三级久久99| 一区二区久久久| 国产精品久久久久三级| 国产亚洲1区2区3区| 日韩精品一区在线| 777午夜精品免费视频| 日本乱码高清不卡字幕| av影院午夜一区| 成人国产视频在线观看| 国产一区二三区好的| 日韩av午夜在线观看| 亚洲成人在线观看视频| 一区二区三区中文在线观看| 综合色中文字幕| 国产精品九色蝌蚪自拍| 亚洲国产成人午夜在线一区| 久久精品一区二区三区不卡| 久久精品免费在线观看| 国产人妖乱国产精品人妖| 久久色中文字幕| 久久久青草青青国产亚洲免观| 日韩欧美国产高清| 欧美成人欧美edvon| 欧美videos中文字幕| 日韩丝袜美女视频| 日韩欧美国产小视频| 精品欧美一区二区久久| 精品国产乱码久久久久久图片 | 欧洲日韩一区二区三区| 在线免费观看不卡av| 欧美在线视频你懂得| 欧美夫妻性生活| 欧美一区二区三区思思人| 日韩精品一区二区三区中文精品 | 精品日韩欧美一区二区| 久久综合色天天久久综合图片| 亚洲精品一区二区三区精华液| 国产丝袜美腿一区二区三区| 国产精品麻豆久久久| 亚洲综合丝袜美腿| 免费在线观看日韩欧美| 国产一区二区三区四区五区入口| 国产成人免费视频| 色综合天天综合网天天狠天天| 91黄色小视频| 制服丝袜亚洲网站| 欧美精品一区二区在线播放| 国产精品亲子乱子伦xxxx裸| 一区二区在线观看视频在线观看| 午夜私人影院久久久久| 捆绑调教一区二区三区| www.激情成人| 欧美日韩一区成人| 久久久噜噜噜久久人人看| 亚洲另类在线一区| 日韩高清不卡在线| 成人理论电影网| 欧美日韩久久久一区| 精品人伦一区二区色婷婷| 日韩一区在线看| 亚洲第一主播视频| 国产美女娇喘av呻吟久久| 色综合久久中文字幕| 欧美一区二区视频观看视频| 欧美国产日韩一二三区| 日韩国产精品久久久久久亚洲| 国产老女人精品毛片久久| 91成人免费网站| 久久婷婷国产综合精品青草| 亚洲一卡二卡三卡四卡五卡| 激情成人综合网| 欧美日韩一区二区在线视频| 久久久久久99精品| 五月天激情综合网| 成人app网站| 欧美大片日本大片免费观看| 亚洲美女免费视频| 国产高清久久久久| 日韩欧美中文字幕精品| 亚洲男人电影天堂| 国产成人精品免费在线| 777奇米成人网| 亚洲色图丝袜美腿| 风间由美一区二区三区在线观看| 欧美另类变人与禽xxxxx| 1024成人网色www| 久久99精品国产麻豆婷婷| 欧美性色aⅴ视频一区日韩精品| xnxx国产精品| 日韩黄色在线观看| 日本韩国欧美一区二区三区| 欧美激情在线观看视频免费| 日韩国产精品久久久| 欧美色图第一页| 亚洲视频图片小说| 成人三级伦理片| 精品欧美乱码久久久久久 | 国产精品日韩精品欧美在线| 麻豆国产精品官网| 91精品国产乱码| 婷婷久久综合九色国产成人 | 亚洲第一久久影院| 在线视频综合导航| 亚洲色图欧洲色图| 99re亚洲国产精品| 亚洲色图一区二区三区| jlzzjlzz亚洲日本少妇| 国产精品丝袜在线| 国产一区二区三区免费播放| 日韩欧美在线1卡| 奇米精品一区二区三区在线观看| 精品视频色一区| 偷拍一区二区三区四区| 欧美三级日本三级少妇99| 亚洲综合色在线| 欧美日韩国产片| 天天综合色天天综合| 欧美日韩成人一区| 蜜臀av一区二区三区| 日韩精品一区二区在线观看| 黄色精品一二区| 国产拍欧美日韩视频二区| 国产精品一区二区久久不卡 | 精品国产第一区二区三区观看体验| 日本午夜精品视频在线观看| 日韩小视频在线观看专区| 麻豆精品视频在线观看| 久久影院视频免费| 成人一区二区三区视频| 中文字幕制服丝袜一区二区三区| 不卡的看片网站| 亚洲自拍偷拍图区| 欧美一区二区在线免费观看| 欧美bbbbb| 久久九九99视频| 波多野结衣在线aⅴ中文字幕不卡| 国产精品久久久久毛片软件| 91电影在线观看| 青青草97国产精品免费观看 | 亚洲高清不卡在线观看| 欧美一区二区三区四区在线观看| 久久99热99| 国产精品麻豆久久久| 欧美视频一区二区三区四区| 日本不卡免费在线视频| 久久久久久麻豆| 91国产福利在线| 久久成人综合网| 综合自拍亚洲综合图不卡区| 欧美肥妇毛茸茸| 国产精品一区二区三区四区| 亚洲免费av观看| 欧美一级一区二区| 成人美女在线视频| 视频在线观看91| 久久久久久久综合日本| 色综合久久中文综合久久牛| 日韩成人午夜电影| 国产精品盗摄一区二区三区| 欧美精品在欧美一区二区少妇| 国产麻豆精品视频| 一区二区在线看| 久久亚洲影视婷婷| 欧美最猛性xxxxx直播| 九九九精品视频| 亚洲欧美日韩久久精品| 欧美成人一区二区三区在线观看| jvid福利写真一区二区三区| 日本不卡一二三| 亚洲黄色在线视频| 久久网站热最新地址| 欧美日韩一区视频| 99在线精品一区二区三区| 久久国产精品72免费观看| 一区二区三区日韩精品视频| 久久婷婷国产综合精品青草| 欧美日本高清视频在线观看| 成人免费高清视频| 国产一区在线不卡| 五月激情六月综合|