|
Готовность 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 режима...
|
|
|
|
Сообщений в этой теме
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 20 2008, 21:29) Код... May 20 2008, 19:36       singlskv Цитата(Qwertty @ May 20 2008, 23:36) Так ... May 20 2008, 20:04        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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|