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

📄 ps_sony.c

📁 代码用于测试dsp2812的硬件功能
💻 C
字号:
//
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File;
#include "DSP281x_Examples.h"  

volatile struct PSValue ps = { 0x41, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 };

//------------------------------------------------------------------------------
// Funcion:communicate with the sony psx controller;
// sData:data sent;
// gData:data gotten;
//------------------------------------------------------------------------------
Uchar Send_Get(Uchar sData)
{
	Uchar gData = 0,i,temp0;					//从手柄得到的数据;
    
    PS_CLK_DOWN();
    PS_ATT_DOWN();							//时钟和片选信号置低
    for(i=0; i<8; i++)
    {
        gData >>= 1;						//手柄数据低位先发出,故右移
        if(sData & 0x01)				//发送数据,置位CMD信号;
		{
			PS_CMD_UP();
		}
        else
		{
           	PS_CMD_DOWN();
        } 
        delay((Uint32)10); 
        PS_CLK_UP();							//时钟置高 
        delay((Uint32)5); 
		temp0 = PS_DATA_UP();
        if(temp0)			//读取手柄数据
		{
           	gData |= 0x80;
		}
        else
		{
           	gData &= 0x7F;
		} 
        delay((Uint32)5); 
        PS_CLK_DOWN();					//时钟置低
        sData >>= 1;
     }
     PS_CMD_UP();
     return  gData;
}

//------------------------------------------------------------------------------
// Function: read and save the psx controller's data;
//------------------------------------------------------------------------------
void GetPSValue(struct PSValue *value)		//value为保存手柄数据的结构体地址;
{
/*
//		struct PSValue value1;
		Uchar temp,maxDataNum;
 //		int i = 0;
		
		PS_ATT_DOWN();						//片选置低   
		temp = Send_Get(STRT);  				//发送开始命令
		delay((Uint32)10);
		value->ID = Send_Get(DatReq);		//发送数据请求
        
		if(value->ID == 0x41)				//根据手柄ID判断发送的数据字节数
		{
			maxDataNum = 3;					//普通数字手柄返回三个字节数据
		}
		else
		{
			maxDataNum = 7;					//红灯模式手柄返回7字节数据
		}
		//for(i=0; i<maxDataNum; i++)
		//{
		//Data[i] = SendGet(0x0000);
		//delay((Uint32)10);
		//KickDog();
		//}
		temp = Send_Get(0x00);				//读取0x5A
		temp = temp;	// Nothing,just used it;
		delay((Uint32)10);
		value->Arrows = Send_Get(0x00);	//读取方向键键值
		delay((Uint32)10);
		value->FunKey = Send_Get(0x00);	//读取功能键键值
		delay((Uint32)10);
		if(maxDataNum == 7)					//读取两个Joy四个方向的键值
		{
			value->RX = Send_Get(0x00);
			delay((Uint32)10);
			value->RY = Send_Get(0x00);
			delay((Uint32)10);
			value->LX = Send_Get(0x00);
			delay((Uint32)10);
			value->LY = Send_Get(0x00);
			delay((Uint32)10);
		}
		PS_ATT_UP();						//片选置高
*/
	Uint16	psdata = 0;
	psdata = ReadBus(FPGA_PSXII_ADDR);
	value->Arrows = (Uint8)(psdata & 0x00FF);
	value->FunKey = (Uint8)((psdata & 0xFF00) >> 8);
}

//------------------------------------------------------------------------------
// Initialize the port connected to the psx controller;
//------------------------------------------------------------------------------
void InitPort_PS(void)
{
	EALLOW;
	GpioMuxRegs.GPFMUX.all &= 0xFFF0;
	GpioMuxRegs.GPFDIR.all |= 0x000D;
	EDIS; 
}

//--------------------------------------------------------------------------
// No more;
//--------------------------------------------------------------------------



⌨️ 快捷键说明

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