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

📄 814xappprogramv1.0.c

📁 本代码是串口扩展芯片GM814X在 Arm9—usos上使用的实例
💻 C
字号:
/***********************************************************
 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数据缓存

void ClrCS(void);     //置814X片选有效
void SetCS(void);      //置814X片选无效
unsigned char SPITransmit(unsigned char c);  //MCU 的SPI接口发送1 Byte 数据并接收1 Byte 数据

/***********************************************************
 Function:  Delay
 Describe:  Time delay
 Input:     int  formated time
 Output:           void
***********************************************************/
void Delay(unsigned int nTime)
{
    while(--nTime) {;}
}  

/***********************************************************
 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 int cTempHigh,cTempLow;
    unsigned int RevData;
    
    ClrCS();    //置814x片选有效
    Delay(5);         //延时时间参考814x数据手册的要求     
    cTempHigh=SPITransmit(chigh);      //向814X发送高位数据
    cTempLow=SPITransmit(clow);        //向814X发送低位数据
    Delay(5);       //延时时间参考814x数据手册的要求 		
    SetCS();    //置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(5);
    return RevData;
}

/***********************************************************
 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,bit 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,bit 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
***********************************************************/
void ManageRevData(unsigned int rdata)    
{
    unsigned  int cTemp;
    unsigned  char Flag_R;
    unsigned  char Flag_T;
    
    cTemp =rdata;
    if(cTemp&0x8000)     //判断R标志
        {Flag_R=1;}
    cTemp =rdata;
    if(cTemp&0x4000)     //判断T标志
        {Flag_T = 1;}

    if(Flag_R)
    	{
            cTemp =rdata>>12;		
            switch(cTemp&0x03)    //判断接收数据来自哪一个子串口
        		{
            		case 0:
                        Revbuff1=rdata&0xff;
            			break;
                	case 1:				
                        Revbuff2=rdata&0xff;
            			break;
            		case 2:
                        Revbuff3=rdata&0xff;
            			break;
            		case 3:
                        Revbuff4=rdata&0xff;
            			break;
                	default:
                		break;	
        		}
            Flag_R=0;
    	}
    
    if(Flag_T)
    	{
            cTemp =rdata>>10;		
            switch(cTemp&0x03)   //判断哪一个子串口发送FIFO为空
        		{
            		case 0:
                		Flag1_T=1;
            			break;
                	case 1:				
                		Flag2_T=1;
            			break;
            		case 2:
                		Flag3_T=1;
            			break;
            		case 3:
                		Flag4_T=1;
            			break;
                	default:
                		break;	
        		}
            Flag_T=0;
    	}
}
        				
void main()       //主函数
{
    unsigned char m,i,s[10];
    U16 Dout;
    int a[2];
    unsigned char j[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
    COM_Init();
    LCD_Init();
    while(1)
    {
        for(i=0;i<9;i++)
        {

            m=j[i];
            Dout=SendTo814X(0x48,m);
            delay(2000);
        }


    }
}






⌨️ 快捷键说明

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