⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 基于SPMC75的NNAD_Flash K9F1208的驱动程式序,对一些需要存海量数据的单片机应用场合有用.
💻 C
字号:

//========================================================================
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
//             (C) COPYRIGHT 2001 SUNPLUS TECHNOLOGY CO.
//                    ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================================

//========================================================================
// Filename: UART.c
// Author: Lianshu  Mou (email: Lianshu@sunnorth.com.cn)
// Date: 2004/08/05
// Description: 
//
// Reference:
// Revision:
//      2004/08/05      First version
//========================================================================
#include "Spmc70_regs.h"
#include "mcMACRO.h"
#include "Queue.h"

unsigned int RXD_Buffer[50];
FIFO_QUEUE  RXD_Data_Buffer = 
{
	RXD_Buffer,
	RXD_Buffer + sizeof(RXD_Buffer) - 1,
	RXD_Buffer,
	RXD_Buffer
};

unsigned int Data_Buffer[6];

int RXD_Head = 0;
int NEW_BMP_flag = 0;
int NEW_TXT_flag = 0;
void Daly_Time(int Time);
//****************************************************************************************************
// UART_IRQ中断服务  UART_IRQ
// 设计者: 牟联树
// 描  述: 串行通信中断服务
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
void IRQ3(void) __attribute__ ((ISR));
void IRQ3(void)
{
	unsigned int Temp,Data_Temp;
	int i;
    if(P_UART_Status->B.UARTRIF)						//判断是接收还是发关中断
    {	//接收中断
    	P_UART_Status->B.UARTRIF = 1;
    	Temp = P_UART_RxBuf->W;
    	
    	Data_Temp = Data_Buffer[0];						//数据队列,指令缓冲区
    	for(i=0;i<5;i++)
    		Data_Buffer[i] = Data_Buffer[i+1];
    	Data_Buffer[5] = Temp;
    	
    	switch(RXD_Head)
    	{
    		case 0: if((Data_Buffer[0] == '$')&&(Data_Buffer[1] == 'B')&&(Data_Buffer[2] == 'M')\
    				&&(Data_Buffer[3] == 'P')&&(Data_Buffer[4] == 0xd)&&(Data_Buffer[5] == 0xa))
    				{	//图形数据开始,图形数据接收初始化
    					NEW_BMP_flag = 1;
    					RXD_Head = 2;
    					FIFO_Reset_Queue(&RXD_Data_Buffer);
    				}
    				else if((Data_Buffer[0] == '$')&&(Data_Buffer[1] == 'T')&&(Data_Buffer[2] == 'X')\
    						&&(Data_Buffer[3] == 'T')&&(Data_Buffer[4] == 0xd)&&(Data_Buffer[5] == 0xa))
    				{	//文本文件开始,文本数据接收初始化
    					NEW_TXT_flag = 1;
    					RXD_Head = 1;
    					for(i=0;i<6;i++)
    						Data_Buffer[i] = 0;
    					Data_Temp = 0;
    					FIFO_Reset_Queue(&RXD_Data_Buffer);
    				}
    		break;
			case 1: if(NEW_TXT_flag > 0)
    				{	//接收字符串数据(字符串)
    					if(Data_Temp >= ' ') FIFO_Push_Queue(&RXD_Data_Buffer,Data_Temp);
    					else if((Data_Temp == 0xd)&&(Data_Buffer[0] == 0xa))
    						FIFO_Push_Queue(&RXD_Data_Buffer,0xff);	//换行符
    				}
    		break;
    		case 2: if((Data_Temp == '0')&&(Data_Buffer[0] == 'x'))
    				{	//接收BMP图档数据(字符串)
    					if(Data_Buffer[1] >= 'A') Temp = Data_Buffer[1] - '7';
    					else Temp = Data_Buffer[1] - '0';
    					Temp = (Temp << 4)&0xf0;
    					if(Data_Buffer[2] >= 'A') Temp |= Data_Buffer[2] - '7';
    					else Temp |= Data_Buffer[2] - '0';
    					FIFO_Push_Queue(&RXD_Data_Buffer,Temp);
    				}
    		break;
    		default: break;
    	}
    	if((Data_Buffer[0] == '$')&&(Data_Buffer[1] == 'E')&&(Data_Buffer[2] == 'N')\
    	&&(Data_Buffer[3] == 'D')&&(Data_Buffer[4] == 0xd)&&(Data_Buffer[5] == 0xa))
    	{	//传输结束命令
    		NEW_BMP_flag = 0;
    		NEW_TXT_flag = 0;
    		RXD_Head = 0;
    	}
    }
}

//=============================================================
// ----Function: void UART_Init(void);
// -Description: 系统定时服务的分中断处理函数
// --Parameters: None
// -----Returns: None
// -------Notes: 
//=============================================================
void UART_Init(void)
{
	P_IOA_Dir->B.bit12 = 0;
	P_IOA_Attrib->B.bit12 = 1;
	P_UART_Ctrl->W = 0;
	P_UART_Ctrl->B.UARTREN = 1;
	P_UART_Ctrl->B.UARTRIEN = 1;
	P_UART_BaudRateH->W = 0xff;
	P_UART_BaudRateL->W = 0xe6;
	FIFO_Reset_Queue(&RXD_Data_Buffer);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -