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

📄 test_uart2_485.c

📁 优龙电子ARM2410实验箱RS485-------RS485通讯实验.
💻 C
字号:
/****************************************************************************
【文  件  名  称】Test_Uart2_485.c
【功  能  描  述】FS2410XP教学平台实验程序
【程  序  版  本】3.0
【创建及创建日期】优龙公司/2005-XX-XX
【修改及修改日期】2005-5-23
****************************************************************************/
//头文件定义
#include "def.h"
#include "2410addr.h"
#include "config.h"
#include "board.h"

#define	En485Tx()	(rGPEDAT |= 1<<13)
#define	En485Rx()	(rGPEDAT &= ~(1<<13))

/********************************************************************
Function name: set_io
Parameter    : void
Description	 : 将相应的GPIO设置为TXD2,RXD2
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
static __inline void set_io(void)
{
    rGPHCON &= ~(0xf<<12);
    rGPHCON |= 0xa<<12;		//TXD2,RXD2
    rGPHUP  |= 3<<6;		//Uart port pull-up disable

	rGPGCON &= ~((3<<4)|(3<<12));
	rGPGCON |= (1<<4)|(1<<12);
	rGPGDAT &= ~(1<<2);
	rGPGDAT |= 1<<6;
	
	rGPECON &= ~(3<<26);
	rGPECON |= 1<<26;
	En485Rx();
}

/********************************************************************
Function name: reset_io
Parameter    : void
Description	 : void
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
static __inline void reset_io(void)
{
    rGPHCON |= 0xf<<12;		//RTS1, CTS1
}

/********************************************************************
Function name: Test_Uart2_485
Parameter    : void
Description	 : RS485通讯实验
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
void Test_Uart2_485(void)
{
	U16 m ;
	unsigned char data;
	U32 baud;
	
	printf("485 通讯实验, please select baud rate\n1: 9600\n2: 19200\n3: 57600\n4: 115200\n");
	
	
	while(1) {
		m = getch();
		if(m>='1'&&m<='4')
			break;
		if(m==ESC_KEY)
			return;
	}
	
	m=4;
	
	set_io();
	
	switch(m) {

	case '1':
		baud = 9600;
		break;
	
	case '2':
		baud = 19200;
		break;

	case '3':
		baud = 57600;
		break;

	default:
		baud = 115200;
	}
	
	printf("set UART2 baud rate to %d\n", baud);
	printf("Please connect the RS485<->RS232 \n");

	rUFCON2 = 0x0;
    rULCON2 = 0x3;
    rUCON2  = 0x245;
	rUBRDIV2 = ((int)(GetMasterClock()/16./baud + 0.5) -1);
	data='s';
   
    while(1)
    {
		En485Tx();					//Enable RS485 data Trasmit
		while(!(rUTRSTAT2 & 0x4)); //Wait until THR is empty.
		WrUTXH2(data);
		Delay(1);
		En485Rx();				//Enable RS485 data Receive
		while((rUTRSTAT2&0x1)==0x0);//Wait receive data
		data=RdURXH2(); //Receive data ready
		Delay(1);
    }
    
    reset_io();

}
/*****************************************************************/

⌨️ 快捷键说明

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