реклама на сайте
подробности

 
 
> Отказ от использования стандартного SPI, Необходимо переделать код
$ilent
сообщение Jul 11 2006, 07:18
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 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;

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
$ilent
сообщение Jul 11 2006, 12:56
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 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Мбит/с.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- $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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016