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

📄 2410_8141.c

📁 本代码是串口扩展芯片GM814X在 Arm9—usos上使用的实例
💻 C
📖 第 1 页 / 共 2 页
字号:
//spi功能

#define	SPI8141_GLOBALS
#include "config.h"
    int TEMP;	

 struct
	     { 
	         int  n;
		  int Baut;
		  unsigned char Par;
		  unsigned char Stop_bit;
	     }Comm[4]; //定义两个结构体,分别表示温度与湿度
/***********************************************************
 Name:		814XAppProgram.c
 Descibe: 	Function package of GM814x's operation
 Version:	       1.0
 Time:		2006.1
 Contents:	Include all operation and function of GM814x
 Copyright:	GMIC 2006
***********************************************************/
unsigned char   Flag1_T;     //814x 串口1发送FIFO空标志
unsigned char   Flag2_T;     //814x 串口2发送FIFO空标志
unsigned char   Flag3_T;     //814x 串口3发送FIFO空标志
unsigned char   Flag4_T;     //814x 串口4发送FIFO空标志
unsigned char   Revbuff1;    //串口1数据缓存
unsigned char   Revbuff2;     //串口2数据缓存
unsigned char   Revbuff3;     //串口3数据缓存
unsigned char   Revbuff4;     //串口4数据缓存
unsigned char   RevFLAG1;    //串口1数据接收标志
unsigned char   RevFLAG2;     //串口2数据接收标志
unsigned char   RevFLAG3;     //串口3数据接收标志
unsigned char   RevFLAG4;     //串口4数据接收标志
/***********************************************************
 Function:	Delay
 Describe:	Time delay
 Input:		int  formated time
 Output:	       void
***********************************************************/
void Delay_SPI(unsigned int nTime)
{
     long ctime;
	ctime= nTime;
	while(--ctime) {;}
}  

/***********************************************************
 Function:	SendTo814X
 Describe:	send 2 byte to 814x and receive 2 byte from 814x
 Input:		2 byte to be send
 Output:	       2 byte read from 814x
***********************************************************/
unsigned int SendTo814X(unsigned char chigh,unsigned char clow)	
{
	unsigned char cTempHigh,cTempLow;
	unsigned int RevData;
	
	ClrCS_8141();    //置814x片选有效
	Delay_SPI(1);         //延时时间参考814x数据手册的要求     
	cTempHigh=SPITransmit(chigh);      //向814X发送高位数据
	cTempLow=SPITransmit(clow);        //向814X发送低位数据
	Delay_SPI(1);		//延时时间参考814x数据手册的要求 		
	SetCS_8141();    //置814x片选无效
	RevData=(cTempHigh<<8) | cTempLow;
	return RevData;      //返回从814x读出的数据
}

/***********************************************************
 Function:	Gm814XShutdown
 Describe:	Shutdown the chip
 Input:		void
 Output:	       void
***********************************************************/
void Gm814XShutdown(void)	
{
	SendTo814X(0xe0,0x00);
}

/***********************************************************
 Function:	Gm814XWakeup
 Describe:	Wakeup the chip
 Input:		void
 Output:	       void
***********************************************************/
void Gm814XWakeup(void)	
{
	SendTo814X(0xc0,0x00);
}

/***********************************************************
 Function:	Write814xConfig
 Describe:	Set the configure register of 814x 
 Input:		COM number and configure data
 Output:	       2 byte read from 814x
***********************************************************/
unsigned int Write814xConfig(unsigned char n,unsigned char high,unsigned char low)   //n 表示设置的串口号,high表示给配置寄存器的高位字节(低三位有效),low表示给配置寄存器的低位字节
{
	unsigned char ch;
	unsigned int RevData;
	
	high=high&0x07;
	ch= 0xc0 | (n<< 3);
	high=high|ch;	
	RevData=SendTo814X(high,low);   //向指定的串口功能设置寄存器写配置
	Delay_SPI(5);
	return RevData;
}
/***********************************************************
 Function:	Spi_Config
 Describe:	Set the Com Para of 814x 
 Input:		COM number and configure data
                     n:0--485
                        1--RS232
                     Baut :5--2400
                              4--4800
                              3--9600
                              2--19200
                              1--38400
                     Par:0--None
                           0x50--Even
                           0x40--ODD
                     Stop_Bit:0--1
                                  1--1.5
                                  2--2
                                  This Para is ignored if the Delay_Time is enough.
 Output:	       2 byte read from 814x
***********************************************************/
unsigned int Spi_Config(unsigned char n,unsigned char Baut,unsigned char Par,unsigned char Stop_bit)   
{

	unsigned int RevData;
	unsigned char low;
	int index;
	switch (Baut)
	{
		case 5:
		{
			low=0x05 | Par;
			
		}break;
		case 4:
		{
			low=0x04 | Par;
		}break;
		case 3:
		{
			low=0x03| Par;
		}break;
		case 2:
		{
			low=0x02 | Par;
		}break;
	       case 1:
		{
			low=0x01 | Par;
		}
       }
       RevData = Write814xConfig(n,0x00,low);
	 index=(int)n;
	Comm[index].n=(int)n;
	Comm[index].Baut=(int)Baut;
	Comm[index].Par=Par;
	Comm[index].Stop_bit=Stop_bit;
	return RevData;	 
}


/***********************************************************
 Function:	SendTo_485(unsigned char Data);
 Describe:	read out the configure register data  
 Input:		COM number 
 Output:	       configure register data
***********************************************************/
unsigned int SendToRS485(unsigned char Data)
{          
            unsigned int TEMP;
	     RS485T_nR_S();
            TEMP=SendDataToCom(0,Data,0);//发送数据
            Delay_SPI(2500*Comm[0].Baut);  
	     RS485T_nR_R();
	     return TEMP;
}

/***********************************************************
 Function:	unsigned char RevToData(void);
 Describe:	read out the configure register data  
 Input:		 
 Output:	       0   数据错误
                     1   数据正确
***********************************************************/
unsigned char RevToData(void)
{         
           unsigned int TEMP;
	    unsigned char Comm;
           TEMP= SendTo814X(0,0);
           Comm=ManageRevData(TEMP); 
	    return Comm;
}

/***********************************************************
 Function:	SendTo_232(unsigned char Data);
 Describe:	read out the configure register data  
 Input:		COM number 
 Output:	       configure register data
***********************************************************/
unsigned int SendToRS232(unsigned char Data)
{        
           unsigned int TEMP;
          TEMP=SendDataToCom(1,Data,0);//发送数据
          //Delay_SPI(2000*Comm[1].Baut  );  
	  return TEMP;
}
/***********************************************************
 Function:	Read814xConfig
 Describe:	read out the configure register data  
 Input:		COM number 
 Output:	       configure register data
***********************************************************/
unsigned int Read814xConfig(unsigned char n)     //n表示串口号
{
	unsigned char ch;
	unsigned int RevData;

	ch = 0x40 | (n<< 3);
	RevData=SendTo814X(ch,0x00);    
	return RevData;     //读出指定串口的功能设置寄存器内容
}

/***********************************************************
 Function:	ReadTFIFOState
 Describe:	read all transmit FIFO status
 Input:		void
 Output:	       TFIFO state data
***********************************************************/
unsigned int ReadTFIFOState(void)     
{
	unsigned int RevData;
	
	RevData=SendTo814X(0x60,0x00);  
	return RevData;     
	//同时读出所有发送FIFO状态
}
/***********************************************************
 Function:	SendDataToCom
 Describe:	send data to UART Com and read out the data of receive FIFO
 Input:		COM number and data to be send
 Output:	       RFIFO data
***********************************************************/
unsigned int SendDataToCom(unsigned char n,unsigned char c,char Pt)
   //n表示串口号,c为需要发送的数据,Pt为第九位数据
{
	unsigned char ch;
	unsigned int RevData;

	if(Pt)
		ch=0x81;
	else
		ch=0x80;
	ch=ch| (n<< 3);
	RevData=SendTo814X(ch,c);  
	return RevData;       //向指定串口发送数据并读出接收FIFO数据
}

/***********************************************************
 Function:	SendToAllCom
 Describe:	send data to all UART Com and read out the data of receive FIFO
 Input:		data to be send
 Output:	       RFIFO data
***********************************************************/
unsigned int SendToAllCom(unsigned char c,char Pt) 
  //c为需要发送的数据,Pt为第九位数据
{
	unsigned char ch;
	unsigned int RevData;

	if(Pt)
		ch=0xa1;
	else
		ch=0xa0;
	RevData=SendTo814X(ch,c);    
	return RevData;      //向所有串口发送数据并读出接收FIFO数据
}

/***********************************************************
 Function:	ReadRFIFOData
 Describe:	read out the data of receive FIFO
 Input:		void
 Output:	       RFIFO data
***********************************************************/
unsigned int  ReadRFIFOData(void)
{
	unsigned int RevData;
	
	RevData=SendTo814X(0x00,0x00);    
	return RevData;      // 读出接收FIFO数据
}

/***********************************************************
 Function:	Managerevdata
 Describe:	Analyse the data received from 814X 
 Input:		void
 Output:	       void
***********************************************************/
unsigned char ManageRevData(unsigned int rdata)    
{
	unsigned  int cTemp;
	unsigned  char Flag_R;
	unsigned  char Flag_T;
	
	cTemp =rdata;
	if(cTemp&0x8000)     //判断R标志
		{Flag_R=1;}
	else
	    return 0;	
	cTemp =rdata;
	if(cTemp&0x4000)     //判断T标志
		{Flag_T = 1;}

	if(Flag_R)
		{

⌨️ 快捷键说明

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