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

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

?? upsd_uart.c

?? uPSD Device Driver Files
?? C
字號:
/*------------------------------------------------------------------------------
uPSD_UART.C

uPSD Serial IO Device Driver Functions
08/2002 Ver 0.1 - Initial Version

Copyright 2002 STMicroelectrons Inc.

This example demo code is provided as is and has no warranty,
implied or otherwise.  You are free to use/modify any of the provided
code at your own risk in your applications with the expressed limitation
of liability (see below) so long as your product using the code contains
at least one uPSD products (device).

LIMITATION OF LIABILITY:   NEITHER STMicroelectronics NOR ITS VENDORS OR 
AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF USE, LOSS OF DATA,
INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS AGREEMENT OR
OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
------------------------------------------------------------------------------*/
#pragma optimize(8,size)

//-------------- header files for UPSD -----------------
#include "upsd3200.h"
#include "upsd_hardware.h"
#include "upsd_uart.h"

/* --------------- UART0 --------------------------- */
xdata char tbuf [TBUF_SIZE];					//Data Buffer for UART0 Transmitter
xdata char rbuf [RBUF_SIZE];					//Data Buffer for UART0 Receiver
static xdata unsigned char t_in = 0;			//no. of data to be transimitted
static xdata unsigned char t_out = 0;			//no. of data transmitted
static xdata unsigned char t_disabled = 0;		// dsiabled bit to disable UART0 transmision

static xdata unsigned char r_in = 0;			//no. of data to be received
static xdata unsigned char r_out = 0;			//no. of data received

/* --------------- UART1 --------------------------- */
xdata char tbuf1 [TBUF_SIZE];					//Data Buffer for UART1 Transmitter
xdata char rbuf1 [RBUF_SIZE];					//Data Buffer for UART1 Receiver
static xdata unsigned char t_in1 = 0;			//no. of data to be transimitted
static xdata unsigned char t_out1 = 0;			//no. of data transmitted
static xdata unsigned char t_disabled1 = 0;		// dsiabled bit to disable UART1 transmision

static xdata unsigned char r_in1 = 0;			//no. of data to be received
static xdata unsigned char r_out1 = 0;			//no. of data received

/*------------------------------------------------------------------------------*/
//             UART 0 Interrupt service routine
/* ---------------------------------------------------------------------------- */
static void uPSD_uart0_isr (void) interrupt SIO_VECTOR using 2				
{
	/*------------------------------------------------
	Received data interrupt.
	------------------------------------------------*/

	if (RI != 0)
  	{
  		RI = 0;

  		if ((r_in + 1) != r_out)
    		rbuf [r_in++] = SBUF;
  	}

	/*------------------------------------------------
	Transmitted data interrupt.
	------------------------------------------------*/
	if (TI != 0)
 	 {
 		TI = 0;

  		if (t_in != t_out)
    		SBUF = tbuf [t_out++];
  		else t_disabled = 1;
  	}

}

/*------------------------------------------------------------------------------*/
//             UART 1 Interrupt service routine
/* ---------------------------------------------------------------------------- */
static void uPSD_uart1_isr (void) interrupt SIO1_VECTOR using 2		
{
/*------------------------------------------------
Received data interrupt.
------------------------------------------------*/
if ( (SCON2 & 0x01) != 0)
  {
  	SCON2 &= 0xFE;				//RI = 0;

  	if ((r_in1 + 1) != r_out1)
    	rbuf1 [r_in1++] = SBUF2;
  }

/*------------------------------------------------
Transmitted data interrupt.
------------------------------------------------*/
if ( (SCON2 & 0x02)  != 0)
  {
  	SCON2 &= 0xFD;				//TI = 0;

  	if (t_in1 != t_out1)
    	SBUF2 = tbuf1 [t_out1++];
  		else   	t_disabled1 = 1;
  }

}

/*------------------------------------------------------------------------------*/
/*                       UART0 & UART1 subroutines                              */
/* -----------------------------------------------------------------------------*/
// uart_no = 0 (uart0) else uart1 assumed
// timer_no = 0 (Timer 1) else Timer2 is assumed
unsigned int uPSD_UART_Timer (unsigned char uart_no, unsigned int baudrate, unsigned char timer_no)
{
	unsigned char baud_ratio;
	unsigned int timer_reg_value;
	bit ea_value;

	ea_value = EA;								// save EA state

	EA = 0;                             		// Disable Interrupts 
	
	if (uart_no)								//UART1
		{
		/*------------------------------------------------
		Clear transmit interrupt and buffer.
		------------------------------------------------*/
		SCON2 &= 0xFD;				  			// TI = 0: clear transmit interrupt 
		t_in1 = 0;			    				// empty transmit buffer 
		t_out1 = 0;
		t_disabled1 = 1;			    		// disable transmitter
		}
	else
	{									    //UART0
		/*------------------------------------------------
		Clear transmit interrupt and buffer.
		------------------------------------------------*/
		TI = 0;				    			// clear transmit interrupt 
		t_in = 0;			    			// empty transmit buffer 
		t_out = 0;
		t_disabled = 1;			    		// disable transmitter 

	}

	

	if ( (PCON & 0x80) )						// baud_ratio depends upon SMOD in PCON register: 
												// SMOD =1 : baud_ratio = 2,else buad_ratio = 1
		baud_ratio = 0x02 ;
		else baud_ratio = 0x01;
	
	if (!timer_no )								//uart_timer_ch=0: TIMER1; else TIMER2
		{
		/*------------------------------------------------
		Set timer 1 up as a baud rate generator.
		------------------------------------------------*/
		TR1 = 0;			    				// stop timer 1
		ET1 = 0;			    				// disable timer 1 interrupt 

		//timer_reg_value  = (unsigned char) (256 - (OSC * baud_ratio/ (32L * 12L * baudrate)));
		timer_reg_value  = (unsigned char) (256 - ( (FREQ_OSC * baud_ratio * 125L)/ (48L * baudrate)));

		}
	else {
		
				/*------------------------------------------------
				Set timer 2 up as a baud rate generator.
				------------------------------------------------*/
				TR2 = 0;			    		// stop timer 2 
				ET2 = 0;			    		// disable timer 2 interrupt 

			//	timer_reg_value = (unsigned int) (65536 - (OSC / (32L * baudrate)));
				timer_reg_value = (unsigned int) (65536 - ( (FREQ_OSC * 125L) / (4L * baudrate)));

		  }

	EA = ea_value;  							// return EA value
	return (timer_reg_value);

}

//=====================================================================
// uPSD_UART_Init - Initialize uart and set up timer for baud rate
// serial_info=[serial_mode,mp_en,receive_en,bit9_en,timer_ch,serial_ch]
//======================================================================
void upsd_init_serial(unsigned char serial_info,unsigned int timer_value)
{
	unsigned char serial_ch;			//serial_info[0]	
	unsigned char timer_ch;				//serial_info[2:1]
	unsigned char bit9_en;				//serial_info[3]
	unsigned char receive_en;			//serial_info[4]
	unsigned char mp_en;				//serial_info[5]
	unsigned char serial_mode;			//serial_info[7:6]
	unsigned char scon_buff;			//serial_info[7:4]

	serial_ch = serial_info & 0x01;		//serial comm. channel:0- UART0; 1-UART1
	timer_ch = serial_info & 0x06;		//timer channel is used to be baudrate generator: 
										//00-fixed baudrate;
										//01-TIMER1;
										//10- TIMER2

	bit9_en = serial_info & 0x08;		//9th data bit enable
										//0--9th data bit 0 (disable)
										//1--9th data bit 1 (enable)
	receive_en = serial_info & 0x10;	//receive enable:
										//1-- enable reception
										//0--disable reception (transmit enable)

	mp_en = serial_info & 0x20;			//multiprocess enable
	
	serial_mode = serial_info & 0xC0;	//serial comm. mode: 
										//00-mode0;
										//01-mode1;
										//10-mode2;
										//11- mode3
	
	scon_buff = serial_info & 0xF8;	
	

	// setup baud rate geneartor for UARTX in mode 1 & 3
	if (serial_mode & 0x40)
	{
		/*Timer x is being used to generate baud rates.*/
     		if (timer_ch == 0x02)			// Timer1
		{
			TMOD &= ~0xF0;			    // clear timer 1 mode bits 
			TMOD |= 0x20;			    // put timer 1 into MODE 2 
     			TH1 = timer_value;
     			TR1 = 1;            /*TCON.6*/
		}
		if (timer_ch == 0x04)			// Timer 2
		{
					
			RCAP2L = timer_value;
			RCAP2H = (timer_value >>8);
			if (serial_ch == 0) T2CON = 0x34;
			else PCON |= 0xC0;				//set RCLK1 & TCLK1
			TR2 = 1;
		}
	}

	// intial UARTx Registers     	
	if (serial_ch)						//UART1
	{
		SCON2 = scon_buff; 
 		IEA |= 0x10;	 				// ES1 = 1; IEA.4     
     		SCON2 &= 0xFE;					// RI1 = 0; SCON1.0     
	}
	else							//UART0
	{
		SCON = scon_buff;
     		ES = 1;            			//IE.4     
     		RI = 0;              		//SCON.0	
	}
	EA = 1;                             // Enable Interrupts
}


/*------------------------------------------------------------------------------*/
char uPSD_UART_Putchar (char c,bit uart_ch)
{
	/*------------------------------------------------
		If the buffer is full, return an error value.
	------------------------------------------------*/
	if ((TBUF_SIZE - uPSD_UART_Tbuflen(uart_ch)) <= 2)
  	return (-1);

	/*------------------------------------------------
		Add the data to the transmit buffer.  If the
		transmit interrupt is disabled, then enable it.
	------------------------------------------------*/
	EA = 0;                         	// Disable Interrupts 


if (uart_ch)
	{									//   UART1  
	
		tbuf1 [t_in1++] = c;

		if (t_disabled1)				// if transmitter is disabled
  			{
  			t_disabled1 = 0;

  			SCON2 |= 0x02;				// TI = 1; enable  it 
  			}


	}

	else {								//   UART0  
	
		tbuf [t_in++] = c;

		if (t_disabled)					// if transmitter is disabled 
  			{
  			t_disabled = 0;
  			TI = 1;						// enable it
  			}

	
		}

		EA = 1;                         // Enable Interrupts 

		return (0);

}

/*------------------------------------------------------------------------------*/
char uPSD_UART_Getchar (bit uart_ch)
{
char c;

if (uPSD_UART_Rbuflen (uart_ch) == 0)
  return (-1);

EA = 0;                         		// Disable Interrupts 
if (uart_ch) c=rbuf1[r_out1++];			// UART1              
	else c = rbuf [r_out++];			// UART0              
EA = 1;                         		// Enable Interrupts 

return (c);
}

/*------------------------------------------------------------------------------*/
unsigned char uPSD_UART_Rbuflen (bit uart_ch)
{
unsigned char rbuflen;

if (uart_ch)	rbuflen = r_in1 - r_out1;
	else rbuflen=r_in - r_out;
return (rbuflen);
}

/*------------------------------------------------------------------------------*/
unsigned char uPSD_UART_Tbuflen (bit uart_ch)
{
unsigned char tbuflen;

if (uart_ch) tbuflen = t_in1 - t_out1;
	else tbuflen = t_in - t_out;

return (tbuflen);
}
/*----------------------------------------------------------------------------- */



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美第一区| 日韩一区二区三区电影| 精品一区二区三区免费观看| 亚洲激情图片qvod| 亚洲日本在线看| 中文字幕综合网| 亚洲美女一区二区三区| 一区二区三区在线视频观看| 亚洲欧美自拍偷拍| 亚洲男人电影天堂| 亚洲小说春色综合另类电影| 亚洲香肠在线观看| 捆绑变态av一区二区三区| 六月婷婷色综合| 久久福利视频一区二区| 国产麻豆精品在线观看| 99久久精品国产观看| 日本韩国视频一区二区| 欧美福利视频导航| 久久久一区二区| 亚洲日本免费电影| 轻轻草成人在线| 国产精品538一区二区在线| 成人av在线资源网站| 91麻豆123| 91精品国产乱| 国产精品全国免费观看高清| 一区二区三区在线免费观看| 免费人成精品欧美精品| 国产福利精品一区二区| 色999日韩国产欧美一区二区| 制服丝袜亚洲播放| 久久精品视频免费| 亚洲国产精品视频| 成人免费看的视频| 日韩视频一区二区三区在线播放 | 欧美日韩国产影片| 日韩精品一区二区三区四区视频 | 欧美精品一区二区三区蜜臀| 日韩理论片在线| 精品一区二区三区免费视频| 91麻豆自制传媒国产之光| 日韩欧美黄色影院| 亚洲精品欧美专区| 国产乱码精品1区2区3区| 欧美男生操女生| 1024成人网| 狠狠色综合日日| 欧美精品在线观看一区二区| 中文在线一区二区| 国内成人自拍视频| 91精品久久久久久蜜臀| 亚洲欧美综合在线精品| 国产一区在线视频| 欧美一级二级在线观看| 一区二区三区精品在线观看| 丰满亚洲少妇av| 精品国产电影一区二区| 七七婷婷婷婷精品国产| 欧美一a一片一级一片| 国产精品免费av| 国产成人av一区二区三区在线 | 精品亚洲成a人在线观看| 欧美无人高清视频在线观看| 国产精品婷婷午夜在线观看| 激情五月婷婷综合| 日韩欧美亚洲国产另类| 婷婷成人综合网| 欧美日韩国产一级片| 亚洲国产成人高清精品| 91福利在线免费观看| 亚洲欧美国产高清| 色婷婷精品大在线视频| 1区2区3区精品视频| 91丨porny丨最新| 最新国产成人在线观看| 99久久免费国产| 亚洲欧美视频在线观看| 色激情天天射综合网| 亚洲一区二区视频在线| 欧美日韩中字一区| 日韩高清在线一区| 欧美成人激情免费网| 国产在线精品一区二区| 国产午夜精品福利| 91毛片在线观看| 亚洲成人黄色影院| 欧美一级国产精品| 国产激情一区二区三区桃花岛亚洲| 久久久综合激的五月天| 99久久精品情趣| 亚洲成av人片在线| 欧美www视频| 99视频国产精品| 亚洲一区二区黄色| 欧美电影免费观看高清完整版| 老司机免费视频一区二区三区| 久久久久久**毛片大全| 91国产视频在线观看| 美女在线视频一区| 国产精品色一区二区三区| 色欧美乱欧美15图片| 麻豆91在线看| 欧美高清在线精品一区| 欧美少妇bbb| 精东粉嫩av免费一区二区三区| 国产精品污www在线观看| 欧美三日本三级三级在线播放| 日本在线不卡一区| 中文字幕中文在线不卡住| 欧美日韩情趣电影| 国产精品99久久久久久久女警| 亚洲色图第一区| 日韩欧美国产wwwww| 99国产精品99久久久久久| 日韩专区中文字幕一区二区| 欧美激情自拍偷拍| 777精品伊人久久久久大香线蕉| 国产精品资源网| 亚洲精品ww久久久久久p站| 精品久久久网站| 欧美午夜精品一区二区蜜桃 | 国产精品久久久久天堂| 69久久夜色精品国产69蝌蚪网| 顶级嫩模精品视频在线看| 视频一区中文字幕国产| 综合欧美一区二区三区| 欧美xxxx老人做受| 在线不卡免费欧美| 一本色道**综合亚洲精品蜜桃冫| 精品一区二区三区香蕉蜜桃| 午夜欧美视频在线观看| 椎名由奈av一区二区三区| 国产午夜精品久久久久久久| 制服丝袜国产精品| 欧美午夜电影网| 色狠狠色狠狠综合| 成人夜色视频网站在线观看| 国产乱人伦偷精品视频不卡| 日韩精品每日更新| 午夜精品久久久久久久蜜桃app| 亚洲欧洲av另类| 国产精品传媒入口麻豆| 国产欧美日韩精品a在线观看| 日韩三级伦理片妻子的秘密按摩| 欧美日韩美女一区二区| 在线观看日韩av先锋影音电影院| 99久久婷婷国产综合精品电影| 国产ts人妖一区二区| 国产原创一区二区三区| 国产一区二区毛片| 国产乱码精品一品二品| 国产成人8x视频一区二区| 国产成人av影院| 成人精品电影在线观看| 成人av影视在线观看| av亚洲精华国产精华精| 91在线视频观看| 色婷婷精品久久二区二区蜜臂av| 一本色道久久综合亚洲91| 欧美综合一区二区三区| 欧美亚洲国产bt| 4438x亚洲最大成人网| 日韩美一区二区三区| 精品国产污污免费网站入口 | 欧美男人的天堂一二区| 欧美日韩国产小视频在线观看| 欧美日韩精品欧美日韩精品一综合| 欧美三级视频在线观看| 欧美精品色综合| 精品成人a区在线观看| 国产亚洲精品资源在线26u| 中文字幕在线一区| 亚洲精品高清在线| 日本亚洲免费观看| 国产黄人亚洲片| 在线亚洲人成电影网站色www| 欧美日韩成人综合在线一区二区| 日韩欧美一区中文| 国产精品少妇自拍| 日韩精品亚洲专区| 久久99国产精品久久99果冻传媒| 国产精品91xxx| 欧美人与禽zozo性伦| 精品国产一区二区精华| 日韩美女视频一区二区| 日韩综合一区二区| 91亚洲国产成人精品一区二区三 | 91精品国产综合久久精品性色 | aaa国产一区| 欧美一区二区三区性视频| 国产欧美日韩精品在线| 午夜视频久久久久久| 成年人午夜久久久| 日韩你懂的在线播放| 亚洲男同性恋视频| 成人精品gif动图一区| 日韩欧美中文一区二区| 亚洲欧美电影一区二区| 韩国三级电影一区二区|