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

 
 
> LPC1111, тормоза SPI
esaulenka
сообщение Dec 1 2011, 15:50
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Копаюсь с модулем SSP0 на контроллере LPC1111.


Частота камня - 48 МГц, частота SPI - 12 МГц, задержки между байтами 1,17 мкс.
Прикрепленное изображение



Частота камня - 36 МГц, частота SPI - 18 МГц, задержки между байтами 1,23 мкс.
Прикрепленное изображение




код простейший, никаких прерываний:
Код
uint8_t SendByteSPI( uint8_t data)
{
    LPC_SSP0->DR = data;
    while( LPC_SSP0->SR & BIT(4) )    // SPI0 busy
    ;
    return LPC_SSP0->DR;
}

#define SPI_WriteByte(data)        SendByteSPI(data)
#define SPI_ReadByte()            SendByteSPI(0x00)

uint8_t Mem_ReadByte( uint32_t aunMemAddr )
{
    uint8_t        ucByteReadMem;
    ACTIVE_SPI();
    SPI_WriteByte( 0x03 );            // Read Data Bytes
    SPI_WriteByte( (uint8_t)(aunMemAddr >> 16 ) );
    SPI_WriteByte( (uint8_t)(aunMemAddr >> 8 ) );
    SPI_WriteByte( (uint8_t)(aunMemAddr ) );
    ucByteReadMem    = SPI_ReadByte();
    DEACTIVE_SPI();    
    return ucByteReadMem;
}


Сталкивался кто-нибудь?..


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Dec 2 2011, 13:45
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Уже второй день сижу, экспериментирую... Ну да ладно, пятница sm.gif

Закономерности выявить не удалось.
При частоте ядра 48 и 36 МГц разница незначительная, а при снижении до 24 МГц задержка возрастает до 1,8 мкс.

Цитата(Rst7 @ Dec 1 2011, 20:47) *
uint8_t замените на uint_fast8_t да заинлайньте SendByteSPI.

Сделал так, получил 0,9 мкс задержки.

Цитата(Dron_Gus @ Dec 2 2011, 12:36) *
Т.е. ждал бы прихода байта, а не IDLE состояния.

И ещё одна десятая микросекунды в выигрыше. Почему, мне не ясно...


При выкидывании проверки вообще получаем промежуток между клоками 80 наносекунд. Только, разумеется, ничего не работает ;-)


Цитата(Сергей Борщ @ Dec 2 2011, 13:31) *
А я бы проверял TNF и эту проверку на готовность к передаче поставил перед записью в DR.

Идею не понял. А читаемые данные как достать? Там же FIFO, всё перепутается...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 19:23
Рейтинг@Mail.ru


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