CS5463驱动
void uDelay(uint16_t j)
{
uint16_t i;
for(;j>0;j--)
{ for(i=0;i<500;i--)
{
;
}
}
}
//===========cs=================
void clrcs5463CS(void)
{
GPIO_PinModeSet(gpioPortF, 7, gpioModePushPull, 1);
GPIO_PinOutClear(gpioPortF, 7);
}
void Setcs5463CS(void)
{
GPIO_PinModeSet(gpioPortF, 7, gpioModePushPull, 1);
GPIO_PinOutSet(gpioPortF, 7);
}
//===============clk===================
void clrcs5463CLK(void)
{
GPIO_PinModeSet(gpioPortC, 8, gpioModePushPull, 1);
GPIO_PinOutClear(gpioPortC, 8);
}
void Setcs5463CLK(void)
{
GPIO_PinModeSet(gpioPortC, 8, gpioModePushPull, 1);
GPIO_PinOutSet(gpioPortC, 8);
}
//==============mosi===============
void clrcs5463MOSI(void)
{
GPIO_PinModeSet(gpioPortC, 6, gpioModePushPull, 1);
GPIO_PinOutClear(gpioPortC, 6);
}
void Setcs5463MOSI(void)
{
GPIO_PinModeSet(gpioPortC, 6, gpioModePushPull, 1);
GPIO_PinOutSet(gpioPortC, 6);
}
//==============miso==============
void Setcs5463MISO(void)
{
GPIO_PinModeSet(gpioPortC, 7, gpioModeInputPull, 1);
GPIO_PinOutSet(gpioPortC, 7);
}
void cs5463TransmitSpi(uint8_t * writeBuffer, uint8_t length)
{
uint8_t i,j;
uint8_t addr;
Setcs5463CLK();
clrcs5463CS();
for(j=0;j<length;j++)
{
i = 0;
addr=writeBuffer[j];
while(i<8)
{
uDelay(40);
clrcs5463CLK();
if(addr&0x80) Setcs5463MOSI();
else clrcs5463MOSI();
uDelay(40);
Setcs5463CLK(); //??????,?????CS5463
addr <<= 1;
i++;
}
}
Setcs5463CS();
}
void cs5463ReceiveSpi(uint8_t * readBuffer, uint8_t length)
{
uint8_t i,j;
uint8_t dat;
uint8_t addr;
Setcs5463MISO();
Setcs5463CLK();
clrcs5463CS();
addr = readBuffer[0];
i = 0;
while(i<8)
{
uDelay(50);
clrcs5463CLK();
if(addr&0x80) Setcs5463MOSI();
else clrcs5463MOSI();
uDelay(50);
Setcs5463CLK(); //??????,?????CS5463
addr <<= 1;
i++;
}
j = 0;
for(j=0;j<3;j++)
{
i = 0;
dat = 0;
while(i<8)
{
if(i==7)clrcs5463MOSI();
else Setcs5463MOSI();
clrcs5463CLK();
uDelay(50);
dat <<= 1;
if(GPIO_PortInGet(gpioPortC)&(1<<7))dat |= 0x01;
else dat &= 0xFE;
Setcs5463CLK();
uDelay(50);
i++;
}
*(readBuffer+j+1) = dat;
}
uDelay(50);
Setcs5463CS();
}
浙公网安备 33010602011771号