ATtiny2313A и Master SPI
ATtiny2313A и Master SPI
Правильно ли я понял, что у ATtiny2313A нет аппаратного SPI внутри, и поэтому его можно сделать на основе USART. Следовательно одновременное использовать UART и SPI не получится? Так же хотелось уточнить, правильно ли я понял докку, что если мы используем MSPIM, то будь добр тактироваться от внутреннего клока?
Re: ATtiny2313A и Master SPI
Это всё замечательно...
Всё же меня интересует MSPIM
Re: ATtiny2313A и Master SPI
SPI можно сделать на USI с привязанными лапами или "ногодрыгом" на других лапах.AndreyZ писал(а):Правильно ли я понял, что у ATtiny2313A нет аппаратного SPI внутри, и поэтому его можно сделать на основе USART.
DS ATtiny2313 не знает про MSPIM, только Multiprocessor Communication Mode (MPCM) и не даёт ограничений на тактовую.AndreyZ писал(а):...правильно ли я понял докку, что если мы используем MSPIM, то будь добр тактироваться от внутреннего клока?
Re: ATtiny2313A и Master SPI
DS ATtiny2313 не знает про MSPIM, только Multiprocessor Communication Mode (MPCM) и не даёт ограничений на тактовую.
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: ATtiny2313A и Master SPI
MSPIM это Master SPI Mode, т.е это просто контроллер в режиме мастера, значит: 1) тактовый сигнал генерирует мастер 2) линией CS/SS управляет мастер. И то и другое можно сделать как через USART (заняв его), так и через USI (при этом UART свободен). SPI из USI получается программно-аппаратным и тактировать ногу SCK придется вручную, с максимальной скоростью Fclk/2. Пример есть в разделе USI / Three-wire Mode.
Если контроллер умеет SPI в режиме слейва, то уж мастером он тоже может быть. Мастеру проще. Для слейва нужно определять строго определенный пин CS/SS, который либо является аппаратным входом SS SPI, либо входом с прерыванием, чтобы определить начало/конец передачи данных в программном SPI. Мастеру же достаточно выделить любой GPIO чтобы управлять линией CS. Тоже самое касается и тактовой линии SCK.
Кстати, в качестве UART можно задействовать и тот самый USI, но при этом потребуется помимо линий USI занять одну ногу с прерыванием, чтобы ловить старт-бит и один таймер, чтобы генерировать тактовую. Так что можете извратиться и завести SPI на USART, а UART на USI
Если контроллер умеет SPI в режиме слейва, то уж мастером он тоже может быть. Мастеру проще. Для слейва нужно определять строго определенный пин CS/SS, который либо является аппаратным входом SS SPI, либо входом с прерыванием, чтобы определить начало/конец передачи данных в программном SPI. Мастеру же достаточно выделить любой GPIO чтобы управлять линией CS. Тоже самое касается и тактовой линии SCK.
Кстати, в качестве UART можно задействовать и тот самый USI, но при этом потребуется помимо линий USI занять одну ногу с прерыванием, чтобы ловить старт-бит и один таймер, чтобы генерировать тактовую. Так что можете извратиться и завести SPI на USART, а UART на USI
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Re: ATtiny2313A и Master SPI
Engineer_Keen писал(а):Кстати, в качестве UART можно задействовать и тот самый USI, но при этом потребуется помимо линий USI занять одну ногу с прерыванием, чтобы ловить старт-бит и один таймер, чтобы генерировать тактовую. Так что можете извратиться и завести SPI на USART, а UART на USI
Дело в том, что мне нужен только SPI, для общения с АЦП. А вопрос возник на чём реализовывать SPI, USI или UART. И наиболее важным критерием для меня является это не простота реализации, а скорость выполнения алгоритма. С этой точки зрения, что скажете? Я ещё не изучал этот вопрос, как будет быстрее но по ощущениям, на UARTе быстрее... т.к. в USI программе придётся заниматься дёрганьем ножек в режиме GPIO.
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: ATtiny2313A и Master SPI
Быстрее чем Fclk/2 не будет в любом случае. В USI ноги будут дергаться не напрямую, если брать код со страниц 158-159, то там используются команды out (по 2 шт), которые как раз выполняются по 1 такту, и если надо выводить например больше чем по 1 байту, то такой линейный код даст максимальную производительность, варианты же с ожиданием изменения статусных битов что в UART что в другом варианте кода USI такого не дадут.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)