Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Uint16 SPI_exchange(Uint16 cmdData)
{
Uint16 recvData;
// Send Read command/dummy word to EEPROM to fetch a byte
SpiaRegs.SPITXBUF = cmdData;
while( (SpiaRegs.SPISTS.bit.INT_FLAG) !=1);
// Clear SPIINT flag and capture received byte
recvData = SpiaRegs.SPIRXBUF;
return recvData;
}Для экономии времени я переделал так:
void SPI_Send(Uint16 cmdData)
{
int tmp;
while( (SpiaRegs.SPISTS.bit.INT_FLAG) !=1);
// Clear SPIINT flag and capture received byte
tmp = SpiaRegs.SPIRXBUF;
SpiaRegs.SPITXBUF = cmdData;
}
Теперь для того чтобы взвести флаг перед передачей данных нужно один раз заслать в буфер мусор(DUMMY байт по научному ;-)), так как бит программно не взводиться.
На приемной стороне у мена SAM7S с приемом пакетов по DMA.
Эта лишняя посылка мешает.
Правильный выход посылать первый байт не сконфигурировав ножки I/O TMS? Или есть более корректное решение?
Спасибо.