Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Вот вроде коды для чтения и записи на си, кажись там для случая если SPI аппаратно работает или софтверно. Мож помогут.
Отправлено
progchip (80.92.96.55) 20 мая 2010, г. 13:16
В ответ на:
Ответ: отправлено
LUBA 20 мая 2010, г. 12:33
void Send_Strob_DDS_Reset(void)
{
// IOCLR0=DDS_CS_port;
Delay(50);
IOSET1=DDS_RESET_port;
Delay(500);
IOCLR1=DDS_RESET_port;
Delay(50);
}
void WrDDSbyte(unsigned char Vol)
{
unsigned char tmpVol;
unsigned char i;
tmpVol=Vol;
for (i=0;i<8;i++)
{ //запись старшим битом вперёд
if ((tmpVol&0x80)>0)
IOSET0=SDIO_port;
else
IOCLR0=SDIO_port;
tmpVol=(tmpVol<<1);
Delay(5);
IOSET0=SCLK_port;
Delay(5);
IOCLR0=SCLK_port;
}
Delay(5);
IOCLR0=SDIO_port;
}
unsigned char RdDDSbyte(void)
{
unsigned char i;
unsigned char Vol=0;
for (i=0;i<8;i++)
{
//чтение старшим битом вперёд
Vol=(Vol<<1);
IOSET0=SCLK_port;
Delay(50);
if ((IOPIN0 & SDIO_port)>0)
Vol+=1;
IOCLR0=SCLK_port;
Delay(50);
}
return(Vol);
}
void WR_DDSreg(unsigned char byteCount,unsigned char *data)
{
IOCLR0=SDIO_port;
Delay(10);
IOCLR0=DDS_CS_port;
while (byteCount-->0)
{
WrDDSbyte(*data);
data++;
};
Delay(50);
IOSET0=DDS_CS_port;
}
void RD_DDSreg(unsigned char numReg, unsigned char byteCount,unsigned char *data)
{
IOSET0=SDIO_port;
Delay(10);
IOCLR0=DDS_CS_port;
WrDDSbyte(numReg|0x80);
IODIR0&= (0xffffffff ^ SDIO_port);
Delay(50);
while (byteCount-->0)
{
(*data)=RdDDSbyte();
data++;
};
(*data)=0xAD;
IODIR0|=SDIO_port;
Delay(50);
IOSET0=DDS_CS_port;
}
void RD_HSPI_DDSreg(unsigned char numReg, unsigned char byteCount,unsigned char *data)
{
IOSET0=SDIO_port;
IOSET0=SCLK_port;
Delay(10);
IOCLR0=DDS_CS_port;
WR_HSPI_DDSbyte(numReg|0x80);
IODIR0&= (0xffffffff ^ SDIO_port);
Delay(50);
while (byteCount-->0)
{
(*data)=RD_HSPI_DDSbyte();
data++;
};
(*data)=0xAD;
IODIR0|=SDIO_port;
Delay(50);
IOSET0=DDS_CS_port;
}
unsigned char RD_HSPI_DDSbyte(void)
{
unsigned char i;
unsigned char Vol=0;
for (i=0;i<8;i++)
{
//чтение старшим битом вперёд
Vol=(Vol<<1);
IOCLR0=SCLK_port;
Delay(50);
IOSET0=SCLK_port;
Delay(50);
if ((IOPIN0 & SDIO_port)>0)
Vol+=1;
}
return(Vol);
}
void WR_HSPI_DDSbyte(unsigned char Vol)
{
unsigned char tmpVol;
unsigned char i;
tmpVol=Vol;
for (i=0;i<8;i++)
{ //запись старшим битом вперёд
if ((tmpVol&0x80)>0)
IOSET0=SDIO_port;
else
IOCLR0=SDIO_port;
tmpVol=(tmpVol<<1);
Delay(5);
IOCLR0=SCLK_port;
Delay(5);
IOSET0=SCLK_port;
Delay(10);
}
Delay(5);
IOCLR0=SDIO_port;
}
void WR_HSPI_DDSreg(unsigned char byteCount,unsigned char *data)
{
IOSET0=SCLK_port;
IOCLR0=SDIO_port;
Delay(10);
IOCLR0=DDS_CS_port;
while (byteCount-->0)
{
WR_HSPI_DDSbyte(*data);
data++;
};
Delay(50);
IOSET0=DDS_CS_port;
}
void Send_Strob_DDS_IOupdate(void)
{
// IOCLR0=DDS_CS_port;
Delay(50);
IOSET0=IOUPDATE_port;
Delay(500);
IOCLR0=IOUPDATE_port;
Delay(50);
// IOSET0=DDS_CS_port;
Delay(50);
/* IOSET0=IOUPDATE_port;
Delay(10);
IOCLR0=IOUPDATE_port;
Delay(50);} */
}
Составить ответ | Вернуться на конференцию
Ответы