Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; 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);} */
}



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите 4 пополам:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru