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

📄 rs232_1.c

📁 利用TI54系列DSP的测试仪器的触发运算通信以及时基功能实现的程序
💻 C
字号:
#include "KeyCode.h"
#include "menudat.h"
#include "ASMbasic.h"
#include "MyProcess.h"
#include "SecondRev.h"
#include "screen.h"
#include "menu.h"
#include "SPI.h"


extern volatile unsigned char kscan2;


//@extern unsigned int rd_st_com;

/*
static unsigned int rs232_header[]=
{
0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, //起始帧

0x00, //通道类型*
0x00, //垂直偏转系数*
150,  //位移电压*
0x03, //随机起始地址*
0xe8, //
0x00, //是否反相*

0x00, //扫描时基*
0x01, //触发点水平位置光标*
0x90,//index1
0x00,//是否为Scan*
0x00,//index0
0xff//index
};
*/
#ifndef rs232_header
extern unsigned int *puiglBuffer;
#define rs232_header puiglBuffer

static void GetRS232Head(int *k)
{
	//自定义帧前导字符
	rs232_header[0]=0xaa;
	rs232_header[1]=0x55;
	rs232_header[2]=0xaa;
	rs232_header[3]=0x55;
	rs232_header[4]=0xaa;
	rs232_header[5]=0x55;
	
	//通道类型
	rs232_header[6]=GetStatus(UTIL_MENU, MENUITEM1);
	//垂直偏转系数
	rs232_header[7]=Y_range[rs232_header[6]].Vallevel; 
	//位移电压
	rs232_header[8]=offset0[rs232_header[6]]+12;
	//随机档位下进行抽点的数据起始地址
	rs232_header[9]=0x8002;//@rd_st_com-0x8002;
	rs232_header[10]=rs232_header[9]>>8;
	//是否反相
	rs232_header[11]=GetStatus(rs232_header[6], MENUITEM5);
	//扫描时基
	rs232_header[12]=X_range[0].Vallevel;
	//触发点水平位置光标
	rs232_header[13]=T_range[rs232_header[6]].Vallevel<=0?0:T_range[rs232_header[6]].Vallevel;
	//
	rs232_header[14]=0;//index1>=226?0:1;
	
	rs232_header[16]=0;
	//是否为Scan
	if (ISSCANLEV) 
	{
		rs232_header[15]=1;
		if (NOTISAUTO)
			rs232_header[16]=1;	
	}	
	else 
		rs232_header[15]=0;
	//
	rs232_header[17]=0;//index;
	
	*k=18;
}

static unsigned int *GetRS232Data(int *y)
{
unsigned int *buffer;
	//asm(" rsbx XF");
	if (!(ISSCANLEV && ISAUTO))
	{//在非SCAN方式下
		port22=2+GetStatus(UTIL_MENU, MENUITEM1);
		Delay();
		buffer=(unsigned int *)0x8002;
	}
	else
	{//SCAN档位下
		port22=0;
		buffer=(unsigned int *)0xea00+GetStatus(UTIL_MENU, MENUITEM1)*0x200;
	}
	
    if (ISRANDLEV) 
    	*y=RANDBURST*RANDLENGTH;
    else if (!ISSCANLEV) 
    	*y=2500;
    else if (ISAUTO) 
    	*y=250;
    else 
    	*y=SCANNDEPTH*100;
    return buffer;
}

static void TxReady()
{
int j;
unsigned int temp;

	//Maxim3111的Transmitter准备好?
	do
	{
		//McBSP的Transmitter准备好?
		do
		{
			j=IsTReady();
		} while (j!=2);
		
		DXR12=0;
		for (j=0; j<1000; j++)
			Delay();
		temp=DRR12;
		temp&=0x4000;
	} while (temp==0);
	
	//McBSP的Transmitter准备好?
	do
	{
		j=IsTReady();
	} while (j!=2);
		
}

static void Transmitter()
{
int i, j, k;
unsigned int temp;
unsigned int *ptr;
    //由于RS232数据传输是经过了McBSP->Maxim3111->RS232过程,
	//若以查询方式来传送数据会不稳定,因为数据在McBSP和Maxim3111中的
	//Transmitter必须都准备好,并且对Maxim3111而言,其READY状态的查询都
	//必须向其发送数据来或取;提高波特率可以改善其稳定性,缩短DSP的等待时间.
	
	//帧数据信息部分
	GetRS232Head(&k);
	for (i=0; i<k; i++)
	{
		//Ready?
		TxReady();
		
		//传输数据
		DXR12=0x8000 | (rs232_header[i]&0x00ff);
		for (j=0; j<1000; j++)
			Delay();
		temp=DRR12;
		
		//必要的等待时间
		for (j=0; j<1000; j++)
			Delay();
	}	
	
	//帧数据部分
	ptr=GetRS232Data(&k);
	for (i=0; i<k; i++)
	{
		//Ready?
		TxReady();
		
		//数据传输
		temp=ptr[i];
		temp&=0x00ff;
		DXR12=0x8000 |temp;
		for (j=0; j<1000; j++)
			Delay();
		temp=DRR12;
		
		//必要的等待时间
		for (j=0; j<1000; j++)
			Delay();
		
		//按键退出判别
		asm(" intr 16");
		asm(" ssbx INTM");
		if (kscan2==KC_CH1)	return;
	}
}



void DoRS232()
{
	
	FillRect(0, 0, 240, 320, 1, 1);
	RS232Info(0);
	//禁止dog
	DISWATCHDOG;
	while (1) 
	{
		if (ISKEY(KC_CH1))
    	{
    		//Maxim_init();
    		return;
    	}
    	else if (ISKEY(KC_CH2)) //开始数据传送
		{
			kscan2=0;
			break;
		}
    }
    //使能dog
    ENWATCHDOG;
	RS232Info(1);
	
	//禁止dog
	DISWATCHDOG;
    asm(" ssbx INTM");
    Transmitter();
    asm(" rsbx INTM");
    
    //使能dog
    ENWATCHDOG;
    RS232Info(2);
    
    //禁止dog
	DISWATCHDOG;
   	do;while(kscan2!=KC_CH1);
   	
}
#endif
    
    

⌨️ 快捷键说明

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