|
Готовность SPI, как определить? |
|
|
|
 |
Ответов
|
May 20 2008, 09:38
|
Местный
  
Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101

|
Цитата(777777 @ May 20 2008, 12:00)  Как определить, что в SPDR можно писать очередной байт? SPIF устанавливается после передачи, но после обработки сбрасывается, и при включении там 0. А есть ли какой бит, по которому можно определить, что передача в данный момент не идет? Т.е. который устанавливается сразу после записи в SPDR? Чего-то напутано. "Сразу после записи в SPDR" передача как раз идёт. Если записать в SPDR пока передача идёт, поднимется флаг WCOL. Писать в SPDR можно через 34 цикла процессора после предыдущей записи (SPCR=0x50). Раньше - синхроимпульсы будут, а данные - нет. Прямо сейчас этим занимаюсь, Мега16. AVR Studio всё правильно симулирует.
|
|
|
|
|
May 20 2008, 13:41
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(777777 @ May 20 2008, 09:45)  Похоже, только читая SPIF и ожидая когда он исчезнет А по-моему, наоборот, флаг SPIF появится, когда закончится передача текущего байта. Для самого первого раза (после подачи питания) можно передать фиктивную посылку, чтобы взвести флаг SPIF. Цитата(777777 @ May 20 2008, 09:45)  А хотелось бы наоборот: перед записью узнать что предыдущая передача уже завершилась, записать SPDR и продолжить заниматься другими делами Делаете, как описано выше, потом проверяете флаг SPIF, если он установлен, то записываете в SPDR новый байт на передачу, при этом флаг SPIF сбросится. Цитата(Maik-vs @ May 20 2008, 08:38)  Писать в SPDR можно через 34 цикла процессора после предыдущей записи (SPCR=0x50). Раньше - синхроимпульсы будут, а данные - нет Откуда вы взяли про 34 цикла, ссылочкой не поделитесь? И что такое SPCR=0x50, в нём вроде используются только 0, 6 и 7 биты?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
May 20 2008, 16:26
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(=GM= @ May 20 2008, 17:41)  А по-моему, наоборот, флаг SPIF появится, когда закончится передача текущего байта. Для самого первого раза (после подачи питания) можно передать фиктивную посылку, чтобы взвести флаг SPIF. конечно после окончания передачи, и поэтому буз внешнего флага здесь не обойтись. Ну типа так он устроен... Цитата Откуда вы взяли про 34 цикла Ну это почти правда, только там не 34 ну и для других делителей будет другое количество тактов, сам пробовал в железе только для X2 режима, но с Вами поделюсь инфой только после того как Вы раскажите/покажите вариант про который мы долго и упорно спорили(PWM на 24 канала)
|
|
|
|
|
May 20 2008, 16:55
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(singlskv @ May 20 2008, 15:26)  конечно после окончания передачи, и поэтому без внешнего флага здесь не обойтись. Ну типа так он устроен... Ну это почти правда, только там не 34 Я и так знаю, что там не 34. Как устроен спи внутри, к сожалению, не знаю. Что такое внешний флаг, не понимаю, о чём вы? То, что я сказал насчёт первого фиктивного байта правильно, но можно обойтись и без его передачи. Если уж взялись отвечать за другого, так и отвечайте нормально, а не наводите тень на плетень (:-). Повторю ещё раз: "Откуда вы взяли про 34 цикла, ссылочкой не поделитесь? И что такое SPCR=0x50, в нём вроде используются только 0, 6 и 7 биты?" Цитата(singlskv @ May 20 2008, 15:26)  сам пробовал в железе только для X2 режима, но с Вами поделюсь инфой только после того как Вы раскажите/покажите вариант про который мы долго и упорно спорили (PWM на 24 канала) Sulking, are we (:-)? Напомните, подзабыл я, и вроде бы с вами не спорил, тем более долго и упорно, поскольку вы были не в теме.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
May 20 2008, 17:29
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(=GM= @ May 20 2008, 20:55)  Я и так знаю, что там не 34. Как устроен спи внутри, к сожалению, не знаю. Что такое внешний флаг, не понимаю, о чём вы? просто переменная в памяти которая будет говорить всем что SPI в данный момент занят Цитата То, что я сказал насчёт первого фиктивного байта правильно, но можно обойтись и без его передачи. А вот здесь я уже недопонял... Цитата Если уж взялись отвечать за другого, так и отвечайте нормально, а не наводите тень на плетень (:-). Повторю ещё раз: "Откуда вы взяли про 34 цикла, ссылочкой не поделитесь? И что такое SPCR=0x50, в нём вроде используются только 0, 6 и 7 биты?" Sulking, are we (:-)? Напомните, подзабыл я, и вроде бы с вами не спорил, тем более долго и упорно, поскольку вы были не в теме. Да ни вапрос, в отличии от Вас готов просто показать код...  Код SPDR = OutHi; // старшая часть выходов 758: 6f b8 out 0x0f, r6; 15 ... __asm__ __volatile__ ("nop"); // бездельничаем пока передается байт __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); 776: 00 00 nop Ch2Hi = SPSR; // читаем для сброса флага 778: 2e b0 in r2, 0x0e; 14 Ch2Hi = SPDR; // читаем старшие 8 бит канала2 77a: 2f b0 in r2, 0x0f; 15 но это для X2 режима...
|
|
|
|
|
May 20 2008, 19:36
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(singlskv @ May 20 2008, 21:29)  Код ... __asm__ __volatile__ ("nop"); // бездельничаем пока передается байт но это для X2 режима... Так весь смысл в том, чтоб вместо бездельничья занять контроллер чем то более полезным. Например при подключении индикатора по SPI, где ответа нет. Я делаю с передачей холостого байта при неактивном /cs. Положил в SPDR и пошел готовить следующие данные. Как обойтись без холостой записи надеюсь подскажет GM. А вообще в этом плане хорошо использовать USART в тех контроллерах, в которых есть этот режим. Там получается буферизация записи и можно по паре байт отправлять за один раз. Ну и с флагами там все не так запущено...
|
|
|
|
|
May 20 2008, 20:04
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Qwertty @ May 20 2008, 23:36)  Так весь смысл в том, чтоб вместо бездельничья занять контроллер чем то более полезным. Ну... это был просто пример для разяснения того как работает SPI, хотя пример был из рабочей проги ....  Ну типа иногда(если нет других дел), выгоднее просто ничего не делать... Цитата Например при подключении индикатора по SPI, где ответа нет. Я делаю с передачей холостого байта при неактивном /cs. А вот это мне все-таки кто-нить объясните, что за холостой байт который Многим нужен ?
|
|
|
|
Сообщений в этой теме
777777 Готовность SPI May 20 2008, 08:00 Dog Pawlowa Цитата(777777 @ May 20 2008, 11:00) Как о... May 20 2008, 08:12 singlskv Цитата(777777 @ May 20 2008, 12:00) Как о... May 20 2008, 08:23  Maik-vs Цитата(777777 @ May 20 2008, 14:45) Вот я... May 20 2008, 13:01        Qwertty Цитата(singlskv @ May 21 2008, 00:04) А в... May 20 2008, 21:50         singlskv Цитата(Qwertty @ May 21 2008, 01:50) Про ... May 20 2008, 21:59       =GM= Цитата(Qwertty @ May 20 2008, 18:36) Я де... May 21 2008, 12:00       =GM= Цитата(Qwertty @ May 20 2008, 18:36) Я де... May 22 2008, 17:08        singlskv Цитата(=GM= @ May 22 2008, 21:08) Подсказ... May 22 2008, 21:53         =GM= Цитата(singlskv @ May 22 2008, 20:53) Пов... May 22 2008, 23:09          singlskv Цитата(=GM= @ May 23 2008, 03:09) Спасибо... May 23 2008, 18:46           defunct Цитата(singlskv @ May 23 2008, 21:46) Ну ... May 23 2008, 19:15            singlskv Цитата(defunct @ May 23 2008, 23:15) Что ... May 23 2008, 19:34             defunct Цитата(singlskv @ May 23 2008, 22:34) Ну ... May 23 2008, 22:24           =GM= Цитата(singlskv @ May 23 2008, 17:46) Для... May 24 2008, 00:25   Maik-vs Цитата(=GM= @ May 20 2008, 17:41) Откуда ... May 21 2008, 12:49 defunct SPI генерит прерывание, сигнализирующее о том, что... May 20 2008, 09:57 Qwertty А ответы нужны? May 20 2008, 10:59 ILYAUL Не очень понял зачем SREG сохранять May 22 2008, 17:19 =GM= Команда cpi портит флаги в прерывании. May 22 2008, 21:29 Qwertty Отпишусь тут. Сегодня помучал SPI. Узнал много нов... Nov 13 2008, 16:47 Maik-vs Цитата(Qwertty @ Nov 13 2008, 19:47) Отпи... Nov 13 2008, 19:45  Qwertty Цитата(Maik-vs @ Nov 13 2008, 22:45)... Nov 13 2008, 21:16
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|