void main(void)
{
InitSysCtrl();
/* 关中断 */
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
InitPeripherals();
InitGpio();
InitSpi();
EINT;
ERTM;
for( ; ; )
{
LD_reset();
LD_ReadReg(0x06);
LD_ReadReg(0x06);
LD_ReadReg(0x35);
LD_ReadReg(0xb3);
}
}
void LD_WriteReg( unsigned char address, unsigned char dataout )
{
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中
SPI_TX(0x04); // 发送 0x04
delay(2);
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中
SPI_TX(address); //发送 address
delay(2);
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中
SPI_TX(dataout); // 发送 dataout
delay(2);
}
void SPI_TX(unsigned char x)
{
if(Spi_TxReady()==1)
{
SpiaRegs.SPITXBUF=(x<<8);
}
while(Spi_TxReady()!=1);
{
}
GpioDataRegs.GPFDAT.bit.GPIOF3=1;
}
uchar LD_ReadReg(unsigned char address)
{
int a;
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中
SPI_TX((0x05)); // 发送 0x05
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中
SPI_TX((address)); // 发送 address
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中
SPI_TX(0x07);
a=SPI_RX();
return a;
}
uchar SPI_RX()
{
if(Spi_RxReady() == 1) //当检测到SPI接收准备信号置1时,开始接收数据
{
}
while(Spi_RxReady()!=1); //一直等待直到数据接收完成
{
}
GpioDataRegs.GPFDAT.bit.GPIOF3=1;
return SpiaRegs.SPIRXBUF; //返回
}
请专家帮我看看程序哪里错误了 头疼两天了
SPI初始化
void InitSpi(void)
{
/* loopback 8 bit data */
SpiaRegs.***.all = 0x08; //数据下降沿输出 自测禁止 8位数据模式
SpiaRegs.***.all = 0x06; //正常的SPI时钟方式 使能发送 禁止中断
SpiaRegs.SPIBRR = 0x1d; //波特率=LSPCK/(SPIBRR+1)=1MHz
SpiaRegs.***.all = 0x8a; //退出初始状态
}
unsigned int Spi_TxReady(void)
{
unsigned int i;
if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1)
{
i = 0;
}
else
{
i = 1;
}
return(i);
}
unsigned int Spi_RxReady(void)
{
unsigned int i;
if(SpiaRegs.SPISTS.bit.INT_FLAG==1)
{
i=1;
}
else
{
i=0;
}
return(i);
}