Логический анализатор

Тема в разделе "Микроконтроллеры AVR", создана пользователем parovoZZ, 2 дек 2018.

Метки:
  1. ostrov

    ostrov Гуру

    В любом случае анализатор пишет, не важно в свою память или в компьютерную. Если бы он показывал онлайн, пришлось бы уметь видеть и понимать увиденное со скоростью этих процессов, то есть многие тысячи событий в секунду. Увы, даже самые разогнанные мозги такое не позволяют.
     
    ИгорьК нравится это.
  2. parovoZZ

    parovoZZ Гуру

    никакого косяка нет - все закономерно. Это attiny 24/44/84/ В ней USI вместо полноценного UART/USART/I2C. Тактируется он либо от T0, либо программно, либо от внешнего пина. Я тактировал программно и код выглядит так:
    Код (C++):
       
        USICR |= (Bit(USIWM0) | Bit(USICS1) | Bit(USICLK)); // В секции инициализации

     //... Установим флаг начала передачи                  
        USISR |= Bit(USIOIF);

        //... В цикле следим за флагом
        while(!(USISR & Bit(USIOIF)))
        {
            USICR |= ( Bit(USITC));        // Режим SPI, тактируем шину сами

        }
    На выполнение последнего цикла уходило аж 10 тактов!
    Переписал код так
    Код (C++):
       
    uint8_t clk0 = Bit(USIWM0) | Bit(USITC);
        uint8_t clk1 = Bit(USIWM0) | Bit(USITC) | Bit(USICLK);

        USICR = clk0;            // Режим SPI, тактируем шину сами
        USICR = clk1;
        USICR = clk0;
        USICR = clk1;
        USICR = clk0;
        USICR = clk1;
        USICR = clk0;
        USICR = clk1;
        USICR = clk0;
        USICR = clk1;
        USICR = clk0;
        USICR = clk1;
        USICR = clk0;
        USICR = clk1;
        USICR = clk0;
        USICR = clk1;
    и вуаля
    adc.png
    Затянувшийся первый импульс - результат оптимизации оптимизатора - он пихает сперва в регистр R24 строчку Bit(USIWM0) | Bit(USITC); и затем в регистр USICR копирует R24, после этого в регистр R25 заносит Bit(USIWM0) | Bit(USITC) | Bit(USICLK); и также копирует его в USICR. Вот эта лишняя операция и затягивает первый импульс. Пока не мешает. Будет мешать - перепишу на асме.
     
    fusamp нравится это.