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

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

?? uart.c

?? 三星 s3c6400測試代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:


/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : uart.c
*  
*	File Description : This file implements the API functon for UART.
*
*	Author : Woojin,Kim
*	Dept. : AP Development Team
*	Created Date : 2007/01/16
*	Version : 0.1 
* 
*	History
*	- Creat debug function (InitDebug,Putc,Getc,Getkey)(Haksoo,Kim 2006/11/08) 
*	- Creat Full function (Woojin,Kim 2007/01/16)
*  
**************************************************************************************/

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"
#include "uart.h"
#include "sysc.h"
#include "gpio.h"
#include "intc.h"
#include "dma.h"

#define UART_OFFSET		0x400

#define UART0_BASE		(UART_REGS *)(UART_BASE)
#define UART1_BASE		(UART_REGS *)(UART_BASE+UART_OFFSET)
#define UART2_BASE		(UART_REGS *)(UART_BASE+UART_OFFSET*2)
#define UART3_BASE		(UART_REGS *)(UART_BASE+UART_OFFSET*3)
#define UART_BUF 		(0x51000000)
//#define UART_BUF 		(DefaultDownloadAddress + 0x20000)
#define FIFO_DEBUG_BUF (0x51202000)


#define TX_FIFO_RESET		(1<<2)
#define RX_FIFO_RESET	(1<<1)
#define TX_INT_TYPE		(1<<9) // 0:pulse 1:level(6400 should be level)
#define RX_INT_TYPE		(1<<8) // 0:pulse 1:level(6400 should be level)

#define RX_TIMEOUT_EN	(1<<7) // 0:disable 1:enable, disable for FIFO test
#define RX_ERR_INT_EN	(1<<6) // 0:disable 1:enable
#define RTS_ACTIVE		(1) // In normal mode, nRTS signal  0:low, 1:High

#define BIT_UART_MODEM	(1<<3)
#define BIT_UART_TXD		(1<<2)
#define BIT_UART_ERROR	(1<<1)
#define BIT_UART_RXD		(1)


#define DMA_BUF_LEN  8  // for rx
#define TX_END_CHAR	NULL
#define RX_END_CHAR	'\r'

static	DMAC 	oUARTDma;


/////////
// Global variables
static UART_CON	g_AUartCon[5] = {{115200,0,0,0,0,0,3,0,0,1,1,1,1,1,1}
								, {115200,0,0,0,0,0,3,0,0,1,1,1,1,1,1}
								, {115200,0,0,0,0,0,3,0,0,1,1,1,1,1,1}
								, {115200,0,0,0,0,0,3,0,0,1,1,1,1,1,1}
								, {115200,0,0,0,0,0,3,0,0,1,1,1,1,1,1}}; 
						// control property per each channel. 4th data is defualt value for initialize

		     		
static volatile u8 g_AisTxDone[4] = {0, 0, 0, 0};
static volatile u8 g_AisRxDone[4] = {0, 0, 0, 0};
u8 *g_pUartTxStr[4];
u8 *g_pUartRxStr[4];
u8 *g_pUartBuf;

volatile u32 *g_pFifoDebug  = (u32 *)FIFO_DEBUG_BUF; //temporary for fifo count test
volatile u32 g_uFcnt = 0;
volatile u32 g_uOpClock=0;

static UART_REGS *g_pUartDebugRegs;


//////////
// Function Name : UART_InitDebugCh
// Function Description : This function initializes a certain uart ch. for debugging console
// Input : NONE 
// Output : NONE
// Version : 
void UART_InitDebugCh(u8 ch, u32 uBaudRate)
{
	UART_SetConfig(ch,0,1,1,4,1,2,1,uBaudRate,1,1,1,1);
	UART_Open(ch);
	return;
}


//////////
// Function Name : UART_Putc
// Function Description : This function write character data to uart debugging ch
// Input : NONE 
// Output : NONE
// Version : 
void UART_Putc(char data)
{
	u32 temp;

	if(data=='\n')
	{
		while(1)
		{
			temp = Inp32(&g_pUartDebugRegs->rUtrStat);
			temp&=0x2;
			if(temp)
				break;
		}
//		Delay(10);
		Outp8(&g_pUartDebugRegs->rUtxh,'\r');
	}
	while(1)
	{
		temp = Inp32(&g_pUartDebugRegs->rUtrStat);
		temp&=0x02;
		if(temp)
			break;
	}
//	Delay(10);
	Outp8(&g_pUartDebugRegs->rUtxh,data);
	
	return;
}


//////////
// Function Name : UART_TxEmpty
// Function Description : This function Hold Uart Tx until FIFO empty
// Input : NONE 
// Output : NONE
// Version : 
void UART_TxEmpty(void)
{

	u32 temp32;

	while(1)
	{
		temp32 = Inp32(&g_pUartDebugRegs->rUtrStat);		
		temp32&=0x04;
		if(temp32)
			break;
	}
	
 	
}



//////////
// Function Name : UART_Getc
// Function Description : This function read character data from uart debugging ch
// Input : NONE 
// Output : temp8, character data received through uart
// Version : 
s8 UART_Getc( void)
{
	u32 temp32;
	char temp8;
	while(1)
	{
		temp32 = Inp32(&g_pUartDebugRegs->rUtrStat);		
		temp32&=0x01;
		if(temp32)
			break;
	}
	temp8 = Inp8(&g_pUartDebugRegs->rUrxh);
	return temp8;
}


//////////
// Function Name : UART_GetKey
// Function Description : This function read character data from uart debugging ch if there is received data
// Input : NONE 
// Output : temp8 or 0, character data received through uart or 0
// Version : 
s8 UART_GetKey( void)
{
	u32 temp32;
	char temp8;

	temp32 = Inp32(&g_pUartDebugRegs->rUtrStat);
	if(temp32 & 0x1)
	{
		temp8 = Inp8(&g_pUartDebugRegs->rUrxh);
		return temp8;
	}
	else
		return 0;
}



//////////
// Function Name : UART_GetIntNum
// Function Description : Input a number(hex, dec) from UART
// Input : NONE 
// Version : 
// added by rb1004

s32 UART_GetIntNum(void)
{
    u8 str[32];
	
    UART_GetString((s8 *)str);
    return Str2Int((s8 *)str);
}


//////////
// Function Name : UART_GetString
// Function Description : Input a string from UART
// Input :  
// Version : 
// added by rb1004
void UART_GetString(s8 *pStr)
{
    u8 *pStrOrg;
    u8 c;

    pStrOrg = (u8 *)pStr;
	
    while ((c= UART_Getc())!='\r')
    {
 		if (c=='\b') {
 		    if ((int)pStrOrg < (int)pStr) {
 				 UART_PutString("\b \b");
 				pStr--;
 		    }
 		}
 		else {
 		    *pStr++ = c;
 		     UART_Putc(c);
 		}
    }
	
    *pStr = '\0';
     UART_Putc('\n');
}


//////////
// Function Name : UART_PutString
// Function Description : Transmit a string through UART
// Input :  
// Version : 
// added by rb1004
void UART_PutString(const s8 *string)
{
    while(*string)
		UART_Putc(*string++);
}


//////////
// Function Name : Str2Int
// Function Description : convert string to digit.
// Input :  
// Version : 
// added by rb1004
static s32 Str2Int(s8 *string)
{
    s32 base     = 10;
    s32 minus    = 0;
    s32 result   = 0;
    s32 lastIndex;
    s32 i;

    if(string[0]=='-')
    {
        minus = 1;
        string++;
    }

    if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
    {
        base    = 16;
        string += 2;
    }

    lastIndex = strlen((const char *)string) - 1;

    if(lastIndex<0)
        return -1;

    if(string[lastIndex]=='h' || string[lastIndex]=='H' )
    {
        base = 16;
        string[lastIndex] = 0;
        lastIndex--;
    }

    if(base==10)
    {
        //result = atoi(string); // atoi conversion not working properly //trb 051011
		/* Alternate implementation for atoi */
        result = 0;
        for(i = 0; i<=lastIndex; i++){
			result = result * 10 + string[i] - 0x30;
       	}
        result = minus ? (-1*result):result;
    }
    else
    {
        for(i=0;i<=lastIndex;i++)
        {
            if(isalpha(string[i]))
            {
                if(isupper(string[i]))
                    result = (result<<4) + string[i] - 'A' + 10;
                else
                    result = (result<<4) + string[i] - 'a' + 10;
            }
            else
                result = (result<<4) + string[i] - '0';
        }
        result = minus ? (-1*result):result;
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////


//////////
// Function Name : UART_Config
// Function Description : This function set up UART by user's choice
// Input : NONE 
// Output : NONE
// Version : v0.1
u8 UART_Config(void)
{
	u8 cCh;
	s32 iNum = 0;

	volatile UART_CON *pUartCon;
	

	g_uOpClock = 0;	

	// Select Channel
	printf("Note : [D] mark means default value. If you press ENTER key, default value is selected.\n");
	printf("Select Channel(0~3) [D=0] : ");

	cCh = (u8)GetIntNum();
	if ( cCh>3 )	cCh = 0; // default uart 0
		
	pUartCon = &g_AUartCon[cCh];	

	printf("\n\nConnect PC[COM1 or COM2] and UART%d of S3C6400 with a serial cable for test!!! \n", cCh);
	
	
	//Set Other Options
	printf("\nSelect Other Options\n 0. Nothing[D]  1.Send Break Signal  2. Loop Back Mode  \n Choose : ");
	switch(GetIntNum())
	{		
		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(GetIntNum())
	{		
		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(GetIntNum())
	{
		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 \n Choose : ");
	switch(GetIntNum())
	{		
		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. EXT_CLK0(pwm)	3. EXT_CLK1(EPLL/MPLL) \n Choose : ");
	switch (GetIntNum())
	{
	case 2 :
		pUartCon->cOpClock = 1;
		// connect CLKOUT and UEXTCLK
		printf("\nInput PWM EXT_CLK by Pulse Generater\n");
		printf("How much CLK do you input through the pwmECLK?");
		printf("Mhz : ");
		g_uOpClock = GetIntNum()*1000000;
		GPIO_SetFunctionEach(eGPIO_F,eGPIO_13,2);		
		break;

	case 3 :
		pUartCon->cOpClock = 3;
		printf("\nSelect Clock SRC\n 1.EPLL  2.MPLL \n Choose: ");
			switch(GetIntNum())
				{
					case 1:
						SYSC_SetPLL(eEPLL,32,1,1,0);   //EPLL=192Mhz
						SYSC_ClkSrc(eEPLL_FOUT);
						SYSC_ClkSrc(eUART_MOUTEPLL);
						SYSC_CtrlCLKOUT(eCLKOUT_EPLLOUT,0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合在线电影| 欧美va亚洲va在线观看蝴蝶网| 久久色成人在线| 国产一区二区三区久久久 | 中文字幕在线不卡国产视频| 成人涩涩免费视频| 国产精品久久国产精麻豆99网站| 国产精品12区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲免费伊人电影| 欧美日韩一区二区电影| 成人午夜激情片| 在线亚洲免费视频| 奇米一区二区三区av| 91视视频在线观看入口直接观看www | 国产成人三级在线观看| 亚洲美女一区二区三区| 激情六月婷婷综合| 亚洲精品菠萝久久久久久久| 国产日本欧洲亚洲| 中文字幕亚洲欧美在线不卡| 一区二区三区欧美| 亚洲国产精品av| 中文在线免费一区三区高中清不卡| 一区二区三区四区蜜桃| 久久免费看少妇高潮| 欧美在线高清视频| av一本久道久久综合久久鬼色| 91蝌蚪porny成人天涯| 高清不卡一区二区| 欧美日本在线观看| 精品剧情v国产在线观看在线| 国产精品每日更新在线播放网址 | 欧美日韩视频不卡| 欧美一区二区三区啪啪| 日韩久久久久久| 久久久亚洲综合| 欧美激情一区二区| 亚洲欧美激情插| 懂色av一区二区三区免费观看| 色偷偷久久人人79超碰人人澡| 制服丝袜激情欧洲亚洲| 综合久久久久久| 精品一区二区三区在线播放| 91激情五月电影| 国产精品色哟哟网站| 天天亚洲美女在线视频| 国产成人午夜精品5599| 日韩一区欧美一区| 五月婷婷色综合| 欧美在线你懂的| 在线亚洲+欧美+日本专区| 欧美精品一区二区不卡| caoporm超碰国产精品| 国产亚洲综合性久久久影院| 日韩电影一区二区三区四区| 国产女同性恋一区二区| 狠狠色综合日日| 久久久亚洲高清| 国产成人激情av| 久久精品这里都是精品| 大美女一区二区三区| 一区二区成人在线视频| 日韩欧美国产麻豆| 无吗不卡中文字幕| 国产欧美日韩另类视频免费观看| 国产乱对白刺激视频不卡| 欧美日韩国产在线播放网站| 青青青爽久久午夜综合久久午夜| 日韩欧美成人午夜| 国产成人综合网| 日韩中文字幕1| 国产视频一区二区在线观看| jlzzjlzz欧美大全| 亚洲一区在线看| 欧美色成人综合| 国产激情一区二区三区四区| 亚洲国产欧美另类丝袜| 日韩女优制服丝袜电影| 99免费精品视频| 亚洲欧洲国产专区| 国产一区二区三区久久悠悠色av| 欧美aaaaaa午夜精品| 精品国产露脸精彩对白| 国产成人aaaa| 东方aⅴ免费观看久久av| 亚洲高清免费视频| 日本一区二区动态图| 337p粉嫩大胆噜噜噜噜噜91av| av中文字幕不卡| 亚洲国产日韩综合久久精品| 一区二区中文字幕在线| 欧美男生操女生| 日韩精品国产精品| 国产一区二区在线影院| 激情久久五月天| 久久综合综合久久综合| 亚洲欧美日韩国产综合| 亚洲成av人片一区二区三区| 欧美视频你懂的| 日本视频在线一区| 日本在线不卡视频一二三区| 欧美一区二区三区爱爱| 日本高清不卡一区| 欧美一区二区三区四区久久| 亚洲欧洲色图综合| 亚洲精品一区二区三区影院| 国产欧美日韩久久| 综合久久综合久久| 国产福利一区二区三区视频 | 免费三级欧美电影| 99re这里只有精品6| 国产精品一区在线观看乱码| 波多野结衣一区二区三区| 亚洲欧美综合网| 亚洲成人黄色影院| 国产91露脸合集magnet| 国产盗摄视频一区二区三区| 欧美群妇大交群的观看方式| 国产精品久久久一区麻豆最新章节| 亚洲欧美自拍偷拍色图| 日本女优在线视频一区二区| 日韩三区在线观看| 一区二区欧美在线观看| 韩国在线一区二区| 久久品道一品道久久精品| 美腿丝袜一区二区三区| 日韩精品影音先锋| 开心九九激情九九欧美日韩精美视频电影 | 91在线视频观看| 91精品午夜视频| 夜夜夜精品看看| 欧美一区二区播放| 日韩欧美美女一区二区三区| 中文子幕无线码一区tr| 欧美日韩一卡二卡三卡 | 亚洲欧洲日韩在线| 不卡av在线网| 欧美日韩免费一区二区三区| 一区二区三区免费观看| 欧美日本在线一区| 国产乱子伦一区二区三区国色天香| 日韩精品最新网址| 7777精品伊人久久久大香线蕉完整版| 蜜臀91精品一区二区三区| 91麻豆精品91久久久久久清纯| 精品久久久久久久久久久久久久久| 亚洲电影视频在线| 日韩一区二区三区精品视频| 韩国视频一区二区| 婷婷丁香激情综合| 在线成人免费观看| 91麻豆swag| 色综合久久久久久久| 美腿丝袜一区二区三区| 亚洲自拍偷拍网站| 亚洲第一成年网| 精品裸体舞一区二区三区| 日韩欧美国产1| 欧美日韩高清一区二区不卡| 成人性生交大片免费看中文网站| 亚洲国产一区二区三区青草影视| 久久久www成人免费无遮挡大片| 91视频在线看| 成人综合婷婷国产精品久久蜜臀| 日本美女一区二区| 亚洲黄网站在线观看| 亚洲影院久久精品| 亚洲va欧美va人人爽| 亚洲超丰满肉感bbw| 亚洲欧洲99久久| 国产女主播一区| 亚洲午夜三级在线| 国产精品毛片高清在线完整版| 中文字幕不卡的av| 欧美视频日韩视频| 国产精品女主播av| 国产精品二区一区二区aⅴ污介绍| 日韩欧美一卡二卡| 亚洲另类色综合网站| 亚洲视频一区二区在线观看| 亚洲欧美激情小说另类| 久久99国产精品麻豆| 国产一区二区在线看| 国产精品一区二区久久精品爱涩| 欧美日韩午夜影院| 欧美日韩国产美| 日本一区二区高清| 欧美日韩一二三| 欧美一级一级性生活免费录像| 亚洲精品视频在线| 国产 日韩 欧美大片| 欧美日韩aaaaa| 午夜精品福利一区二区三区蜜桃| 日本道色综合久久| 综合电影一区二区三区| 中文字幕一区二区三区在线播放 | 日韩午夜在线观看视频| 久久久国产精品午夜一区ai换脸| 国产剧情av麻豆香蕉精品|