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

📄 gm8125.c

📁 多串口驱动
💻 C
字号:
/******************************DIT Ltd,Co Copyright (c)*************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: Gm8125.c
**描        述: μCOS-II下LPC2214的多串口芯片GM8125底层驱动 
**              
********************************************************************************************************/

#include "config.h"

uint8 a;

/*********************************************************************************************************
** 函数名称: GM8125Init
** 功能描述: 初始化GM8125
** 输 入: bps:波特率
**
** 输 出:TRUE  :成功
**        FALSE:失败
** 说明: GM8125Init必须在UART0Init()后才能调用,应该在main()中调用
** 注意:如果不成功要看时序图再作修改
********************************************************************************************************/
uint8 GM8125Init(uint32 bps)
{
//	uint8 Commandbyte;
	//uint8 ReadCommand;
	
	PINSEL0 = 0X00000000;           
	PINSEL1 = 0X00000000; 
	
	//PINSEL0 = (PINSEL0 & 0xf03fffff);           
	//PINSEL1 = (PINSEL1 & 0xffff03ff);   
	/* 每个IO口的方向控制 IO0DIR */
	/* p1.24 - MS,out*/
	/* p1.25 - RST,out*/
	
	/* p0.11 - STADD0,out*/
	/* p0.12 - STADD1,out*/
	/* p0.13 - STADD2,out*/
	
	/* p0.21 - SRADD0,in*/
	/* p0.22 - SRADD1,in*/
	/* p0.23 - SRADD2,in*/
	
	IO0DIR = IO0DIR | GM_STADD0 | GM_STADD1 | GM_STADD2| GM_SRADD0| GM_SRADD1| GM_SRADD2;
	IO1DIR = IO1DIR | GM_RST | GM_MS;
	
	/* 首先复位GM8125 */
	IO1CLR = (IO1CLR | GM_RST);						/* RST = 0 */
	delaytime(100);
	IO1SET = (IO1SET | GM_RST);						/* RST = 1 */
	
    delaytime(1000);									
	
	
    /* 设置GM8125工作在多通道模式下 */
    IO1SET = GM_MS;				/* MS = 0 */ 
	delaytime(1000);
    return TRUE;    
}

/*********************************************************************************************************
** 函数名称: GM8125Putch
** 功能描述: 发送一个字节数据 
** 输 入: SportNum: 多串口中的哪个串口,it's value is 1,2,3,4 or 5
**         Data:发送的数据
** 输 出:无
** 全局变量: 无
** 调用模块: UART0PutChar()
** 注意:如果不成功要看时序图再作修改
********************************************************************************************************/
void GM8125Putch(uint8 SportNum, uint8 Data)
{
	/* when SportNum is invalid value ,we set it to 1 */
	if((SportNum < 1) |(SportNum > 5))
		SportNum = 1;
	/* when SportNum is 1,2 or 3,it's 232 ports,otherwise it's 485 ports */
	if(SportNum < 4)
	{
	  switch(SportNum)  //串口传输
	   {
		case 1:
		/* set STADD2~0 to 001 */
		IO0SET = (IO0SET | GM_STADD0);			/* STADD0 = 1 */
		IO0CLR = (IO0CLR | GM_STADD1);			/* STADD1 = 0 */
		IO0CLR = (IO0CLR | GM_STADD2);			/* STADD2 = 0 */			 
		break;
		case 2:
		/* set STADD2~0 to 010 */
		IO0CLR = (IO0CLR | GM_STADD0);			/* STADD0 = 0 */
		IO0SET = (IO0SET | GM_STADD1);			/* STADD1 = 1 */
		IO0CLR = (IO0CLR | GM_STADD2);			/* STADD2 = 0 */			 
		break;
		case 3:
		/* set STADD2~0 to 011 */
		IO0SET = (IO0SET | GM_STADD0);			/* STADD0 = 1 */
		IO0SET = (IO0SET | GM_STADD1);			/* STADD1 = 1 */
		IO0CLR = (IO0CLR | GM_STADD2);			/* STADD2 = 0 */			 
		break;
	   }
	  delaytime(DELAYTIME2);	
	  UART1_SendByte(Data);
	  delaytime(DELAYTIME1);
	}
   else
	{
	 switch(SportNum)   //485传输
	  {
	    case 4:
	    /* 485 control line is set */
//	    IO0SET = (IO0SET | GM_485LINE1);			/* GM_485LINE1 = 1 */
		/* set STADD2~0 to 100 */
		IO0CLR = (IO0CLR | GM_STADD0);			/* STADD0 = 0 */
		IO0CLR = (IO0CLR | GM_STADD1);			/* STADD1 = 0 */
		IO0SET = (IO0SET | GM_STADD2);			/* STADD2 = 1 */
		delaytime(DELAYTIME2);	
	    UART1_SendByte(Data);
	    /* 485 control line is reset */
//	    IO0CLR = (IO0CLR | GM_485LINE1);			/* GM_485LINE1 = 0 */			 
		break;
	    case 5:
	    /* 485 control line is set */
//	    IO0SET = (IO0SET | GM_485LINE2);			/* GM_485LINE2 = 1 */
		/* set STADD2~0 to 101 */
		IO0SET = (IO0SET | GM_STADD0);			/* STADD0 = 1 */
		IO0CLR = (IO0CLR | GM_STADD1);			/* STADD1 = 0 */
		IO0SET = (IO0SET | GM_STADD2);			/* STADD2 = 1 */
		delaytime(DELAYTIME2);	
	    UART1_SendByte(Data);
	    /* 485 control line is reset */
//	    IO0CLR = (IO0CLR | GM_485LINE2);			/* GM_485LINE2 = 0 */			 
		break;	 
	  }	
   }
}        
/*********************************************************************************************************
** 函数名称: GM8125Write
** 功能描述: 发送多个字节数据 
** 输 入:SportNum: 多串口中的哪个串口 it's value is 1,2,3,4 or 5 
**		  Data:发送数据存储位置
**        NByte:发送数据个数
** 输 出:无
** 全局变量: 无
** 调用模块: UART0Write
********************************************************************************************************/
/*
void GM8125Write(uint8 SportNum, uint8 *Data, uint16 NByte)
{
	// when SportNum is invalid value ,we set it to 1 
	if((SportNum < 1) |(SportNum > 5))
		SportNum = 1;
	// when SportNum is 1,2 or 3,it's 232 ports,otherwise it's 485 ports
	if(SportNum < 4)
	{
	switch(SportNum)
	{
		case 1:
		// set STADD2~0 to 001 
		IO0SET = (IO0SET | GM_STADD0);			// STADD0 = 1 
		IO0CLR = (IO0CLR | GM_STADD1);			// STADD1 = 0 
		IO0CLR = (IO0CLR | GM_STADD2);			// STADD2 = 0 		 
		break;
		case 2:
		// set STADD2~0 to 010 
		IO0CLR = (IO0CLR | GM_STADD0);			// STADD0 = 0 
		IO0SET = (IO0SET | GM_STADD1);			// STADD1 = 1 
		IO0CLR = (IO0CLR | GM_STADD2);			// STADD2 = 0 			 
		break;
		case 3:
		// set STADD2~0 to 011 
		IO0SET = (IO0SET | GM_STADD0);			// STADD0 = 1
		IO0SET = (IO0SET | GM_STADD1);			// STADD1 = 1 
		IO0CLR = (IO0CLR | GM_STADD2);			// STADD2 = 0 		 
		break;
	}
	delaytime(DELAYTIME2);	
	UART0Write(Data, NByte);
	}
	else
	{
	 switch(SportNum)
	 {
	    case 4:
	    // 485 control line is set 
	    IO0SET = (IO0SET | GM_485LINE1);			// GM_485LINE1 = 1 
		// set STADD2~0 to 100 
		IO0CLR = (IO0CLR | GM_STADD0);			// STADD0 = 0 
		IO0CLR = (IO0CLR | GM_STADD1);			// STADD1 = 0 
		IO0SET = (IO0SET | GM_STADD2);			// STADD2 = 1 
		delaytime(DELAYTIME2);	
	    UART0Write(Data, NByte);
	    // 485 control line is reset 
	    IO0CLR = (IO0CLR | GM_485LINE1);			// GM_485LINE1 = 0 		 
		break;
	    case 5:
	    // 485 control line is set 
	    IO0SET = (IO0SET | GM_485LINE2);			// GM_485LINE2 = 1 
		// set STADD2~0 to 101 
		IO0SET = (IO0SET | GM_STADD0);			// STADD0 = 1 
		IO0CLR = (IO0CLR | GM_STADD1);			// STADD1 = 0 
		IO0SET = (IO0SET | GM_STADD2);			// STADD2 = 1 
		delaytime(DELAYTIME2);	
	    UART0Write(Data, NByte);
	    // 485 control line is reset 
	    IO0CLR = (IO0CLR | GM_485LINE2);			// GM_485LINE2 = 0 		 
		break;	 
	}
   }	
}
  */     
/*********************************************************************************************************
** 函数名称: GM8125Getch
** 功能描述: 接收一个字节数据
** 输 入: RcvData:接收的数据存放地址指针 
** 输 出: 多串口中的哪个串口接受了数据
** 全局变量: 无
** 调用模块: UART0Getch
********************************************************************************************************/
uint8 GM8125Getch(uint8 SportNum)
{uint8 RcvData;	
 /* when SportNum is invalid value ,we set it to 1 */
	if((SportNum < 1) |(SportNum > 5))
		SportNum = 1;
	/* when SportNum is 1,2 or 3,it's 232 ports,otherwise it's 485 ports */
	if(SportNum < 4)
	{
	  switch(SportNum)  //串口传输
	   {
		case 1:
		/* set STADD2~0 to 001 */
		IO0SET = (IO0SET | GM_SRADD0);			/* STADD0 = 1 */
		IO0CLR = (IO0CLR | GM_SRADD1);			/* STADD1 = 0 */
		IO0CLR = (IO0CLR | GM_SRADD2);			/* STADD2 = 0 */			 
		break;
		case 2:
		/* set STADD2~0 to 010 */
		IO0CLR = (IO0CLR | GM_SRADD0);			/* STADD0 = 0 */
		IO0SET = (IO0SET | GM_SRADD1);			/* STADD1 = 1 */
		IO0CLR = (IO0CLR | GM_SRADD2);			/* STADD2 = 0 */			 
		break;
		case 3:
		/* set STADD2~0 to 011 */
		IO0SET = (IO0SET | GM_SRADD0);			/* STADD0 = 1 */
		IO0SET = (IO0SET | GM_SRADD1);			/* STADD1 = 1 */
		IO0CLR = (IO0CLR | GM_SRADD2);			/* STADD2 = 0 */			 
		break;
	   }
	  delaytime(DELAYTIME2);	
	  RcvData = UART1_GetByte();
	  delaytime(DELAYTIME1);
	}
   else
	{
	 switch(SportNum)   //485传输
	  {
	    case 4:
	    /* 485 control line is set */
//	    IO0SET = (IO0SET | GM_485LINE1);			/* GM_485LINE1 = 1 */
		/* set STADD2~0 to 100 */
		IO0CLR = (IO0CLR | GM_SRADD0);			/* STADD0 = 0 */
		IO0CLR = (IO0CLR | GM_SRADD1);			/* STADD1 = 0 */
		IO0SET = (IO0SET | GM_SRADD2);			/* STADD2 = 1 */

	    /* 485 control line is reset */
//	    IO0CLR = (IO0CLR | GM_485LINE1);			/* GM_485LINE1 = 0 */			 
		break;
	    case 5:
	    /* 485 control line is set */
//	    IO0SET = (IO0SET | GM_485LINE2);			/* GM_485LINE2 = 1 */
		/* set STADD2~0 to 101 */
		IO0SET = (IO0SET | GM_SRADD0);			/* STADD0 = 1 */
		IO0CLR = (IO0CLR | GM_SRADD1);			/* STADD1 = 0 */
		IO0SET = (IO0SET | GM_SRADD2);			/* STADD2 = 1 */
		delaytime(DELAYTIME2);	
	    RcvData = UART1_GetByte();
	    /* 485 control line is reset */
//	    IO0CLR = (IO0CLR | GM_485LINE2);			/* GM_485LINE2 = 0 */			 
		break;	 
	  }	
   }
  return(RcvData);
}
/*
uint8 GM8125Getch(uint8 *RcvData)
{
	uint8 PortN;
	PortN = (uint8)(((IO0PIN & GM_SRADD_MASK) >>28) &0x000000ff);
	*RcvData = UART1_GetByte();
	return PortN;	
}

*/

void gm8125(void)
{
 GM8125Init(9600);
 UART1_Init ();
 
 delaytime(1000);
 while(1)
  {
   GM8125Putch(1, 'o');
   a=GM8125Getch(1);
   GM8125Putch(1, a);
   
  }
}

⌨️ 快捷键说明

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