📄 gm8125.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 + -