|
Отказ от использования стандартного SPI, Необходимо переделать код |
|
|
|
Jul 11 2006, 07:18
|

Частый гость
 
Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296

|
Всё дело в том, что не устраивает скорость передачи (делится на 2), вот и пришло в голову руками впихивать биты на ножки: MOSI PB5; MISO PB6; SCK PB7. младший в перёд, защёлка по фронту. У меня туго с операциями сдвига, компилятор ICC, подскажите плиз кто может. Код void transSPI(CMDT command, MyByte8T address, MyByte8T *buffer, MyByte8T len) { MyByte8T dummyRX = 0; MyByte8T dummyTX = 0xFF;
if (len > 0x80 || len == 0) return;
PORTB &= ~BIT(3);
SPDR = command | (len & 0x7F); while(!(SPSR &(1 << SPIF))); dummyRX = SPDR;
SPDR = address; while(!(SPSR &(1 << SPIF))); dummyRX = SPDR;
switch(command) { case READ_CMD: while(len-- > 0) { SPDR = dummyTX; while(!(SPSR &(1 << SPIF))); *buffer++ = SPDR; } break; case WRITE_CMD: while(len-- > 0) { SPDR = *buffer++; while(!(SPSR &(1 << SPIF))); dummyRX = SPDR; } } PORTB |= 1<<PORTD3;
}
|
|
|
|
|
 |
Ответов
|
Jul 11 2006, 12:56
|

Частый гость
 
Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296

|
Да именно так, я пытаюсь уменьшить время затраченое на передачу пакета, а не время между пакетами. Вот код остоянного опроса, хоть он здесь не к чему: Код /** * NTRXUpdate: * * NTRXUpdate() operates the complete receive part of the driver. It serves * receiver interrupt flags and picks up the received frame. * * Returns: none * */ void NTRXUpdate (void) { MyBoolT recal;
nanoInterrupt ();
# ifdef CONFIG_TRAFFIC_LED UpdateLEDs (); # endif /* CONFIG_TRAFFIC_LED */ /* check if we need to recalibrate the nanoNET TRX chip */ # ifdef CONFIG_NTRX_AUTO_RECALIB recal = (calDelay == 0) ? TRUE : FALSE; # endif
if (ntrxState == TxWAIT) { NTRXTxEnd (); } if (rcwd > 3) { # ifdef CONFIG_NTRX_AUTO_RECALIB tiRecal = hwclock() + calDelay; # endif recal = TRUE; NTRXAllCalibration (); rcwd = 0; TRIGGER_LED3(); }
# ifdef CONFIG_NTRX_AUTO_RECALIB if (ntrxCal != NoCAL) { if (ntrxCal == AllCAL) { NTRXAllCalibration (); } else { if (ntrxCal == RxCAL) { NTRXRxLoCalibration (); } if (ntrxCal == TxCAL) { NTRXTxLoCalibration (); } } tiRecal = hwclock() + calDelay; recal = TRUE; } # endif /* check if nanoNET TRX chip has received valid data */ if ((rxIrq & RXENDIRQ) == RXENDIRQ ) { NTRXRxReceive (); //rxIrq = 0; } # ifdef CONFIG_NTRX_AUTO_RECALIB if (FALSE == recal) { if (tiRecal < hwclock()) { tiRecal = hwclock() + calDelay; recal = TRUE; NTRXAllCalibration (); # ifdef CONFIG_TRAFFIC_LED TRIGGER_LED3(); # endif rcwd = 0; } } # endif }
/** * nanoInterrupt: * * nanoInterrupt() is an interrupt service routine of the nanochip. * It updates the TX and RX status flags. * */ void nanoInterrupt (void) { /* * we have received an interrupt and neede to find out what caused it */ NTRXReadSPI (Silbadero_TxIntsRawStat_O, ntrxIrqStatus, 2); /* * check if it was the transmitter */ if (txIrqStatus != 0) { /* * clear interrupts */ NTRXSetRegister (TRX_RST_TX_IRQ, txIrqStatus); if ((txIrqStatus & TX_IRQ_MASK) == TX_IRQ_MASK) { ntrxState = TxWAIT; } } /* * check if it was the reciever */ if (rxIrqStatus != 0) { /* * clear interrupts */ NTRXSetRegister (TRX_RST_RX_IRQ, rxIrqStatus); rxIrq |= rxIrqStatus & RX_IRQ_MASK; } } На счёт непосильной задачи: устройство у меня работает, на скорости ~787Кбит/с из 2Мбит/с. И как вижу я, есть единственный способ поднять скорость, это уменьшить период клока увеличением частоты SPI, т.к. радиоканал работает на 2Мбит/с.
|
|
|
|
Сообщений в этой теме
$ilent Отказ от использования стандартного SPI Jul 11 2006, 07:18 ksv198 Цитата($ilent @ Jul 11 2006, 11:18) ... Jul 11 2006, 07:40 $ilent Цитата(ksv198 @ Jul 11 2006, 11:40) Быстр... Jul 11 2006, 07:49  Karl Цитата($ilent @ Jul 11 2006, 13:49) ... Jul 11 2006, 07:57  ksv198 Цитата($ilent @ Jul 11 2006, 11:49) ... Jul 11 2006, 09:25  SpiritDance Цитата($ilent @ Jul 11 2006, 11:49) ... Jul 11 2006, 14:47 $ilent ну конечно не с каждым, а через один.
на PB7 выдав... Jul 11 2006, 08:18 $ilent подскажите как какое нить число по битно положить ... Jul 11 2006, 08:49 Igor26 Цитата($ilent @ Jul 11 2006, 12:49) ... Jul 11 2006, 09:10 Rst7 Ах вот в чем дело, у вас тут ICC оказывается? Коне... Jul 11 2006, 09:11 $ilent Цитата(Rst7 @ Jul 11 2006, 13:11) Ах вот ... Jul 11 2006, 10:29  Rst7 Цитата($ilent @ Jul 11 2006, 13:29) ... Jul 11 2006, 11:34 $ilent Не, всё дело в том, что мега16 работает с приёмопе... Jul 11 2006, 11:59 Rst7 Цитата($ilent @ Jul 11 2006, 14:59) ... Jul 11 2006, 12:36 IgorKossak По-моему лучше увеличить тактовую у МК (до 16 МГц)... Jul 11 2006, 13:17 $ilent Цитата(IgorKossak)По-моему лучше увеличить тактову... Jul 12 2006, 05:36 ksv198 Цитата($ilent @ Jul 12 2006, 09:36) ... Jul 12 2006, 06:43  zltigo Цитата(ksv198 @ Jul 12 2006, 09:43) Неужт... Jul 12 2006, 07:00 SpiritDance Угу на pentium 4.
8 Мгц SPI - это (8 Мбит/c - расх... Jul 12 2006, 06:38 Nanobyte Может, прикрутить к процессору сдвиговый регистр и... Jul 12 2006, 07:13 zltigo Цитата(Nanobyte @ Jul 12 2006, 10:13) Тог... Jul 12 2006, 07:22 $ilent Всем участвующим, сочусвтвующим, делящимся, насмех... Jul 12 2006, 07:19
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|