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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? avrxbufferedserial.c

?? AVR典型實(shí)例.rar
?? C
字號(hào):
/*
	AvrXBufferedSerial.c

	Sample code for fully buffered interrupt driven serial I/O for the
	AVR processor.  Uses the AvrXFifo facility.

	Author: Larry Barello (larry@barello.net)

	Revision History:
	09-13-2005	- Initial version

*/

//------------------------------------------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>
#define _AVRXSERIALIO_C_
#include "AvrXSerialIo.h"

#if USART_CHANNELS & CHANNEL_0

AVRX_DECL_FIFO(Rx0Buf, RX0_BUFSZ);
AVRX_DECL_FIFO(Tx0Buf, TX0_BUFSZ);

void InitSerial0(uint16_t ubrr)
{
// Two USARTs, not shared
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega64__) | defined(__AVR_ATcan128__)
	UBRR0L = ubrr;
	UBRR0H = (uint8_t)(ubrr>>8);
	UCSR0A = (BAUDX == 8)?(1<<U2X):0;
	UCSR0B = ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE));
	UCSR0C = ((1<<UCSZ1) | (1<<UCSZ0));

// Dual USART, old shared UCSRC & UBRRH
#elif defined(__AVR_ATmega162__) | defined(__AVR_ATmega161__)
	UBRR0L = ubrr;
	UBRR0H = (uint8_t)(ubrr>>8);
	UCSR0A = (BAUDX == 8)?(1<<U2X):0;
	UCSR0B = ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE));
#	ifdef (__AVR_ATmega162__)
	UCSR0C = (1<<URSEL0) | (1<<UCSZ1) | (1<<UCSZ0));
#	endif

// One UART (note the missing C register)
#elif defined(__AVR_ATmega163__)
	UBRR   = ubrr;
	UBRRHI = (uint8_t)(ubrr>>8);
	UCSRA  = (BAUDX == 8)?(1<<U2X):0;
	UCSRB  = ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE));

// One UART, (Classic)
#elif defined(__AVR_AT90S4414__) | defined(__AVR_AT90S8515__)| defined(__AVR_AT90S8535__)
	UBRR	= ubrr;
	UCR		= ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE) | (1<<UDRIE));
#	define UCSRB UCR

// One USART, (C register shared)
#elif defined(__AVR_ATmega8__)   | defined(__AVR_ATmega16__)  | defined(__AVR_ATmega32__)  | \
	  defined(__AVR_ATmega323__) | defined(__AVR_ATmega8515__)| defined(__AVR_ATmega8535__)
	UBRRL = ubrr;
	UBRRH = (uint8_t)(ubrr>>8);
	UCSRA = (BAUDX == 8)?(1<<U2X):0;
	UCSRB = ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE));
	UCSRC = ((1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0));

// One USART, (C register not shared)
#elif defined(__AVR_ATmega169__) | defined(__AVR_ATmega165__) | defined(__AVR_IOtn2313__)
	UBRRL = ubrr;
	UBRRH = (uint8_t)(ubrr>>8);
	UCSRA = (BAUDX == 8)?(1<<U2X):0;
	UCSRB = ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE));
	UCSRC = ((1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0));
#else
#   ERROR Dont know about that CPU!
#endif
#ifndef UCSRB
#   define UCSRB UCSR0B
#endif
#ifndef UDR
#	define UDR UDR0
#endif
	AVRX_INIT_FIFO(Rx0Buf);
	AVRX_INIT_FIFO(Tx0Buf);
}

int put_c0(char c)	// Non blocking output
{
	int retc;
	retc = AvrXPutFifo(Tx0Buf, c);
	UCSRB |= (1<<UDRIE);
	return retc;
}

int put_char0( char c)	// Blocking output
{
	AvrXWaitPutFifo(Tx0Buf, c);
	UCSRB |= (1<<UDRIE);
	return 0;
}


int get_c0(void)	// Non blocking, return status outside of char range
{
	int retc = AvrXPullFifo(Rx0Buf);
	return retc;
}

int get_char0(void)	// Blocks waiting for something
{
	return AvrXWaitPullFifo(Rx0Buf);
}
// We don't care if the buffer is full.  Just signal we got one.
// The task may attempt one extra time to get data out of an empyt
// buffer (getc(), but so what.  Eventually it will block waiting
// for another character to be received.

#if defined(SIG_UART_RECV) && !defined(SIG_UART0_RECV)
#  define SIG_UART0_RECV SIG_UART_RECV		// This covers old single UART chips
#  define SIG_UART0_DATA SIG_UART_DATA
#endif

AVRX_SIGINT(SIG_UART0_RECV)
{
    IntProlog();
    UCSRB &= ~(1<<RXCIE);	// Disable Rx interrupt
    sei();					// Allow other interrupt activity to occur
	AvrXPutFifo(Rx0Buf, UDR);// This resets the Rx Interrupt
	UCSRB |= (1<<RXCIE);	// Re-enable.
	Epilog();
}

AVRX_SIGINT(SIG_UART0_DATA)
{
    IntProlog();
    UCSRB &= ~(1<<UDRIE);			// Disable UDRE interrupt
    sei();							// Allow other stuff to happen
	int c = AvrXPullFifo(Tx0Buf);	// Return -1 if empty (enables interrupts)
	if (c >= 0)						// Tricky tight code: only checking sign
	{
		UDR = c;
		UCSRB |= (1<<UDRIE);
	}
	Epilog();
}
#endif	// USART_CHANNELS & CHANNEL_0
//------------------------------------------------------------------------
#if USART_CHANNELS & CHANNEL_1

AVRX_DECL_FIFO(Rx1Buf, RX1_BUFSZ);
AVRX_DECL_FIFO(Tx1Buf, TX1_BUFSZ);

void InitSerial1(uint16_t ubrr)
{
// Two USARTs, not shared
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega64__) | defined(__AVR_ATcan128__)
	UBRR1L = ubrr;
	UBRR1H = (uint8_t)(ubrr>>8);
	UCSR1A = (BAUDX == 8)?(1<<U2X):0;
	UCSR1B = ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE));
	UCSR1C = ((1<<UCSZ1) | (1<<UCSZ0));

// Dual USART, old shared UCSRC & UBRRH
#elif defined(__AVR_ATmega162__) | defined(__AVR_ATmega161__)
	UBRR1L = ubrr;
	UBRR1H = (uint8_t)(ubrr>>8);
	UCSR1A = (BAUDX == 8)?(1<<U2X):0;
	UCSR1B = ((1<<TXEN) | (1<<RXEN) | (1<<RXCIE));
#	ifdef (__AVR_ATmega162__)	// No C register on the 161
	UCSR1C = (1<<URSEL0) | (1<<UCSZ1) | (1<<UCSZ0);
#	endif
#else
#   ERROR Unknown CPU or CPU does not support two USARTs
#endif
	AVRX_INIT_FIFO(Rx1Buf);
	AVRX_INIT_FIFO(Tx1Buf);
}

int put_c1(char c)	// Non blocking output
{
	int retc;
	retc = AvrXPutFifo(Tx1Buf, c);
	UCSR1B |= (1<<UDRIE);
	return retc;
}

int put_char1( char c)	// Blocking output
{
	AvrXWaitPutFifo(Tx1Buf, c);
	UCSR1B |= (1<<UDRIE);
	return 0;
}

int get_c1(void)	// Non blocking, return status outside of char range
{
	int retc = AvrXPullFifo(Rx1Buf);
	return retc;
}

int get_char1(void)	// Blocks waiting for something
{
	return AvrXWaitPullFifo(Rx1Buf);
}
// We don't care if the buffer is full.  Just signal we got one.
// The task may attempt one extra time to get data out of an empyt
// buffer (getc(), but so what.  Eventually it will block waiting
// for another character to be received.

AVRX_SIGINT(SIG_UART1_RECV)
{
    IntProlog();
    UCSR1B &= ~(1<<RXCIE);	// Disable Rx interrupt
    sei();					// Allow other interrupt activity to occur
	AvrXPutFifo(Rx1Buf, UDR1);// This resets the Rx Interrupt
	UCSR1B |= (1<<RXCIE);	// Re-enable.
	Epilog();
}

AVRX_SIGINT(SIG_UART1_DATA)
{
    IntProlog();
    UCSR1B &= ~(1<<UDRIE);			// Disable UDRE interrupt
    sei();							// Allow other stuff to happen
	int c = AvrXPullFifo(Tx1Buf);	// Return -1 if empty (enables interrupts)
	if (c >= 0)						// Tricky tight code: only checking sign
	{
		UDR1 = c;
		UCSR1B |= (1<<UDRIE);
	}
	Epilog();
}
#endif	// USART_CHANNELS & CHANNEL_1

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月综合激情婷婷六月色窝| 亚洲三级电影全部在线观看高清| 午夜精品久久久久久久久| 91亚洲国产成人精品一区二三| 国产精品日日摸夜夜摸av| 国产成人免费视频网站| 国产一区视频网站| 国产精品久久久久aaaa| 色婷婷香蕉在线一区二区| 亚洲电影一区二区| 亚洲精品在线三区| 国产999精品久久| 亚洲男帅同性gay1069| 7777女厕盗摄久久久| 精品一二三四区| 国产精品久久久久桃色tv| 91小视频免费看| 人人爽香蕉精品| 国产精品拍天天在线| 在线观看国产一区二区| 九九精品一区二区| 成人欧美一区二区三区视频网页 | 国产精品拍天天在线| 日本二三区不卡| 精品无人码麻豆乱码1区2区| 国产精品国产三级国产三级人妇 | 欧洲色大大久久| 日本亚洲三级在线| 国产精品入口麻豆原神| 欧美喷潮久久久xxxxx| 国产精选一区二区三区| 亚洲精品一二三| 久久综合九色综合97婷婷| 日本韩国视频一区二区| 精品一区二区日韩| 亚洲一区二区三区免费视频| 久久一二三国产| 欧美日韩一二三区| 成人蜜臀av电影| 久久精品国内一区二区三区| 亚洲精品中文字幕乱码三区| 精品国产三级a在线观看| 欧美亚洲国产一区在线观看网站| 国产在线观看免费一区| 偷窥少妇高潮呻吟av久久免费| 亚洲国产精品精华液2区45| 777a∨成人精品桃花网| 日本精品一级二级| 成人av在线一区二区| 黄一区二区三区| 视频一区二区三区在线| 依依成人精品视频| 中文字幕第一页久久| 欧美成人猛片aaaaaaa| 欧美日韩mp4| 欧美亚洲国产一区二区三区va| 成人短视频下载 | 99精品在线观看视频| 久久精品国产77777蜜臀| 亚洲高清中文字幕| 中文字幕色av一区二区三区| 欧美成人伊人久久综合网| 欧美日韩国产一级| 精品视频全国免费看| 国产欧美日韩中文久久| 精品国内二区三区| 欧美一区二区三区视频免费播放| 欧美日韩成人在线| 欧美日韩不卡一区| 欧美精品三级在线观看| 欧美日韩亚洲高清一区二区| 91蜜桃在线免费视频| 91亚洲男人天堂| 99综合影院在线| 色婷婷一区二区三区四区| 99精品视频在线免费观看| 91香蕉视频mp4| 91在线观看污| 色婷婷国产精品| 欧美性三三影院| 色老综合老女人久久久| 在线观看成人小视频| 一本大道久久a久久精二百| 在线免费视频一区二区| 欧美日韩电影一区| 日韩欧美国产一区二区在线播放| 精品欧美乱码久久久久久| 久久久久亚洲综合| 国产精品嫩草影院av蜜臀| 国产精品三级av在线播放| 亚洲黄色av一区| 日本91福利区| 国产乱码精品一区二区三区av| 国产成人福利片| 一本色道a无线码一区v| 欧美日韩一区二区三区不卡| 欧美精品乱码久久久久久| 日韩视频免费直播| 国产三级精品三级在线专区| 国产精品白丝在线| 亚洲国产视频直播| 极品少妇xxxx精品少妇| 99久久久国产精品| 欧美日本高清视频在线观看| 欧美mv日韩mv国产网站| 中文字幕在线一区二区三区| 亚洲第一精品在线| 国产精品一二一区| 色综合久久综合网欧美综合网| 欧美日韩黄色一区二区| 久久久不卡网国产精品一区| 亚洲欧美日韩国产综合在线| 婷婷成人激情在线网| 国产黄色精品视频| 在线观看亚洲精品| 欧美精品一区二区三区四区| 亚洲人成网站在线| 国产中文字幕精品| 在线观看视频一区二区 | 亚洲欧洲色图综合| 午夜av一区二区三区| 一本一道波多野结衣一区二区| 国产日韩精品一区二区三区 | 色综合天天综合色综合av| 欧美视频一区二| 97久久精品人人做人人爽50路| 精品日韩99亚洲| 久久99久久99| 欧美激情资源网| 不卡av免费在线观看| 一区二区三区欧美日| 91成人免费网站| 亚洲免费观看高清完整版在线观看熊| 亚洲高清免费观看高清完整版在线观看| 一区二区三区四区精品在线视频| 午夜精品福利一区二区蜜股av| 婷婷一区二区三区| 国产成人在线视频网址| 91黄色免费网站| 国产精品毛片久久久久久久| 九色|91porny| 欧美一级精品大片| 亚洲乱码精品一二三四区日韩在线| 国产九色sp调教91| 日韩免费高清av| 婷婷国产在线综合| 欧美午夜寂寞影院| 日韩美女视频19| www.欧美日韩| 久久久www免费人成精品| 日韩va亚洲va欧美va久久| 欧美中文字幕一二三区视频| 国产精品久久久久久久久果冻传媒 | 无吗不卡中文字幕| 在线观看亚洲专区| 亚洲日本成人在线观看| 成人深夜视频在线观看| 国产无人区一区二区三区| 国产一区在线不卡| 久久综合九色综合欧美亚洲| 老司机免费视频一区二区三区| 欧美日韩精品一区视频| 亚洲一区二区三区在线播放| 91久久精品国产91性色tv| 亚洲欧洲日本在线| av成人免费在线| 综合久久一区二区三区| 不卡的av网站| 中文字幕一区二区三区蜜月| www.在线欧美| 最新欧美精品一区二区三区| 色综合久久久久综合体桃花网| 亚洲天堂av一区| 91看片淫黄大片一级在线观看| 亚洲激情男女视频| 欧美视频三区在线播放| 日韩和的一区二区| 精品捆绑美女sm三区| 激情欧美一区二区| 国产精品―色哟哟| 91浏览器入口在线观看| 亚洲高清免费一级二级三级| 6080国产精品一区二区| 激情小说亚洲一区| 国产精品天天看| 91福利精品第一导航| 日韩精品欧美精品| 精品国产91洋老外米糕| 成人白浆超碰人人人人| 亚洲乱码日产精品bd| 欧美一卡二卡三卡| 成人黄色777网| 亚洲成人免费av| 日韩久久久精品| 成年人午夜久久久| 日韩成人伦理电影在线观看| 精品电影一区二区| 色系网站成人免费| 久久精品国产**网站演员| 韩国精品主播一区二区在线观看|