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