//***************************************************************************
//
// Author(s)...: Pashgan http://ChipEnable.Ru
//
// Target(s)...: ATMega8535
//
// Compiler....: IAR EWA 5.11A
//
// Description.: 滔甥閑� USART/UART � 蜻鼻獵順� 蛭繆曉�
//
// Data........: 3.01.10
//
//***************************************************************************
#include "usart.h"
//影蜥褓� 溫� 擋鼓義粵�� � 頑頜羨粵�� 頜綑權痢慷 usart`a
#define EnableRxInt() UCSRB |= (1<<RXCIE);
#define DisableRxInt() UCSRB &= (~(1<<RXCIE));
#define EnableTxInt() UCSRB |= (1<<TXCIE);
#define DisableTxInt() UCSRB &= (~(1<<TXCIE));
//閱擇滓�慷 蛭繆�
static volatile unsigned char usartTxBuf[SIZE_BUF];
static unsigned char txBufTail = 0;
static unsigned char txBufHead = 0;
static volatile unsigned char txCount = 0;
//頜徹憧癮 蛭繆�
static volatile unsigned char usartRxBuf[SIZE_BUF];
static unsigned char rxBufTail = 0;
static unsigned char rxBufHead = 0;
static volatile unsigned char rxCount = 0;
//慚摟廓鞅頑甕� usart`a
void USART_Init(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
UCSRA |= (1 << U2X);
#else
UCSRA &= (~(1 << U2X));
#endif
UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); //擋鼓. 頜綑權 頜� 頜徹慮 � 閱擇滓鞣, 擋鼓 頜徹影, 擋鼓 閱擇滓鞣.
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //擋髡綑 縛蝴� 8 擋鼓�溜�
}
//______________________________________________________________________________
//隆頊擋麴綏 蜻領摺綁錳� 縊徵蝓蝴 閱擇滓�稞� 蛭繆擋
unsigned char USART_GetTxCount(void)
{
return txCount;
}
//"諄摧琯�" 閱擇滓�慷 蛭繆�
void USART_FlushTxBuf(void)
{
txBufTail = 0;
txCount = 0;
txBufHead = 0;
}
//頡慮麴綏 縊徵蝓 � 蛭繆�, 慚摟態樽綏 熱闐餃 閱擇滓鞣
void USART_PutChar(unsigned char sym)
{
//綁鞅 憐溴鼻 usart 篛螂蝠粵 � �� 閱撼癮 縊徵蝓
//震羅� 稞� 頜�憐 � 擇媲羲� UDR
if(((UCSRA & (1<<UDRE)) != 0) && (txCount == 0)) UDR = sym;
else {
if (txCount < SIZE_BUF){ //綁鞅 � 蛭繆擇 羨� 綁靦 慮羲�
usartTxBuf[txBufTail] = sym; //頡慮麴粳 � 獗廈 縊徵蝓
txCount++; //慚蜥粳粵錚樽粳 膳綏鞣� 縊徵蝓蝴
txBufTail++; //� 慚滇蜴 避褓錶 蛭繆擋
if (txBufTail == SIZE_BUF) txBufTail = 0;
}
}
}
//縯璀甕� 頡興閤��� 羲曉蝕 頡 usart`�
void USART_SendStr(unsigned char * data)
{
unsigned char sym;
while(*data){
sym = *data++;
USART_PutChar(sym);
}
}
//螂擋菔霍慢 頜綑權痢�� 頡 頑閑橘粵斡 閱擇滓鞣
#pragma vector=USART_TXC_vect
__interrupt void usart_txc_my(void)
{
if (txCount > 0){ //綁鞅 蛭繆� 獗 餓羲蝗
UDR = usartTxBuf[txBufHead]; //頑震興鈇粳 � UDR 縊徵蝓 愿 蛭繆擋
txCount--; //擭粵鱟琯� 膳綏鞣� 縊徵蝓蝴
txBufHead++; //慚蜥粳粵錚樽粳 慚滇蜴 廈餃順 蛭繆擋
if (txBufHead == SIZE_BUF) txBufHead = 0;
}
}
//______________________________________________________________________________
//隆頊擋麴綏 蜻領摺綁錳� 縊徵蝓蝴 熱錨��孃鍥� � 頜徹憧衛 蛭繆擇
unsigned char USART_GetRxCount(void)
{
return rxCount;
}
//"諄摧琯�" 頜徹憧癮 蛭繆�
void USART_FlushRxBuf(void)
{
DisableRxInt(); //頑頜羨琯� 頜綑權痢徹 頡 頑閑樹粵斡 頜徹影
rxBufTail = 0;
rxBufHead = 0;
rxCount = 0;
EnableRxInt();
}
//餾粵徹 蛭繆擋
unsigned char USART_GetChar(void)
{
unsigned char sym;
if (rxCount > 0){ //綁鞅 頜徹憧癮 蛭繆� 獗 餓羲蝗
sym = usartRxBuf[rxBufHead]; //頜諄摘痞� 愿 獗廈 縊徵蝓
rxCount--; //擭粵鱟摘� 膳綏鞣� 縊徵蝓蝴
rxBufHead++; //慚蜥粳粵錚曉鈇靦 慚滇蜴 廈餃順 蛭繆擋
if (rxBufHead == SIZE_BUF) rxBufHead = 0;
return sym; //閑曆檔� 頜諄摘痢磋� 縊徵蝓
}
return 0;
}
//頜綑權痢徹 頡 頑閑橘粵斡 頜徹影
#pragma vector=USART_RXC_vect
__interrupt void usart_rxc_my(void)
{
if (rxCount < SIZE_BUF){ //綁鞅 � 蛭繆擇 羨� 綁靦 慮羲�
usartRxBuf[rxBufTail] = UDR; //膳摘痞� 縊徵蝓 愿 UDR � 蛭繆�
rxBufTail++; //戴粱摺摘� 慚滇蜴 避褓錶 頜徹憧蝶� 蛭繆擋
if (rxBufTail == SIZE_BUF) rxBufTail = 0;
rxCount++; //戴粱摺摘� 膳綏鞣� 頜慚�靜� 縊徵蝓蝴
}
}
driver_usart.rar_ring buffer
版权申诉
31 浏览量
2022-09-20
18:32:58
上传
评论
收藏 11KB RAR 举报
朱moyimi
- 粉丝: 61
- 资源: 1万+
最新资源
- 2022NOC软件创意编程赛项真题python小学高年级-决赛(有解析)
- mathml转换latex需要的xsl文件
- 2022NOC软件创意编程赛项真题图形化小学高年级-决赛赛(有解析)
- gbase驱动下载gbase-connector-java-8.3.81.53驱动下载
- 2022NOC软件创意编程赛项真题图形化小学低年级-决赛赛(有解析)
- InsightFace从青铜到王者,超大规模人脸识别的优雅解法
- python后端开发spider框架详解
- 基于 STM32 与 ESP8266 的智能家居系统源码.zip
- 毕业设计:基于SSM的mysql-个性化点餐配送系统(源码 + 数据库 + 说明文档)
- 基于matlab的鱼苗计数识别(GUI界面).zip代码57
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0