|
|
 |
Ответов
|
Apr 17 2011, 18:36
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
В функции SPI_MasterReceive у вас присутствует алгоритмическая ошибка, на возможность которой я указал еще в посте №3. Для того, чтобы что-то прочитать мастер должен что-либо передать. Причем запись и чтение идет одновременно, но информация которую должен получать мастер сдвинута по времени как минимум на один байт. Вы первой транзакцией в функции SPI_MasterReceive передаете адрес регистра, но по окончании передачи в регистре приемника SPI вовсе не искомое значение регистра, а некий мусор. Для получения значения нужно, не отпуская CS, произвести еще одну запись, передав dummy-байт. Только после завершения передачи этого второго незначащего байта в регистре приемника SPI будет значение регистра, адрес которого вы передали первым байтом. Все это хорошо видно на времянке Figure11. SPI Timing Diagram for 8-Bit Register Read (4 Wire Mode) из даташит.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 8 2011, 07:49
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Цитата(rezident @ Apr 17 2011, 22:36)  В функции SPI_MasterReceive у вас присутствует алгоритмическая ошибка, на возможность которой я указал еще в посте №3. Для того, чтобы что-то прочитать мастер должен что-либо передать. Причем запись и чтение идет одновременно, но информация которую должен получать мастер сдвинута по времени как минимум на один байт. Вы первой транзакцией в функции SPI_MasterReceive передаете адрес регистра, но по окончании передачи в регистре приемника SPI вовсе не искомое значение регистра, а некий мусор. Для получения значения нужно, не отпуская CS, произвести еще одну запись, передав dummy-байт. Только после завершения передачи этого второго незначащего байта в регистре приемника SPI будет значение регистра, адрес которого вы передали первым байтом. Все это хорошо видно на времянке Figure11. SPI Timing Diagram for 8-Bit Register Read (4 Wire Mode) из даташит. У меня к Вам вопрос. В случае только одной передачи, о чтении можно "забыть"? Т.е. только посылать данные от master для другого устройства, в моем случае - дисплея?
|
|
|
|
|
Jun 23 2011, 19:25
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Цитата(Палыч @ Jun 8 2011, 13:14)  Можно Никак не получается передача по SPI. Есть ведущий контроллер ADUC831 и ведомый графический OLED дисплей BL12864G (контроллер SSD1303). Оба устройства имеют встроенные SPI…. Задаю конфигурацию SPI: MOV SPICON,#03FH; Т.е SPE=1 разрешение интерфейса SPI ; SPIM=1 режим ведущий; CPOL=1тактирование – SCLOCK - высокий уровень, CPHA=1 срабатывание по переднему фронту SCLOCK; SPR0=1, SPR1=1 Выбранная скорость передачи равна fcore/16. Код ;----------------------------------------- COMMAND: CLR DC ;DC=LOW SEND COMMAND CLR CS NOP NOP ;-------------------------------------- SEND: CLR ISPI NOP MOV SPIDAT,A; OUTPUT JNB ISPI,$ NOP NOP NOP NOP NOP NOP NOP NOP NOP SETB CS NOP NOP RET Код SENDDATA: SETB DC CLR CS NOP NOP SEND1: CLR ISPI NOP MOV SPIDAT,A; OUTPUT JNB ISPI,$ NOP NOP NOP NOP NOP NOP NOP NOP NOP SETB CS; /ss NOP RET Прерывания по SPI: Код SPIG: CLR WCOL CLR ISPI ; CLR LED_RED LCALL DELLM; SETB LED_RED LCALL DELLM;
RETI Да, вот еще... Так ли важно, чтобы сигнал CS (SS), заканчивался с последним тактом SCLOKC, или он может быть длиннее и даже значительно длиннее?
Сообщение отредактировал Белка12 - Jun 23 2011, 19:26
|
|
|
|
|
Jun 24 2011, 09:41
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Цитата(Палыч @ Jun 24 2011, 12:48)  У Вас, вроде бы, работа с SPI по готовности... Или как? По готовности выставляется бит ISPI в регистре режима SPICON и генерируется прерывание, вернее даже не по готовности, а устанавливается аппаратно, когда последний бит передается из SPIDAT. В прерывании я снимаю ISPI. П.С. Вот и подумала, что можно и подавать высокий уровень на CS (SS) тоже в прерывании...Ведь передача окончена? Цитата Может быть значительно длиннее. Спасибо.  Просто из иллюстраций было как-то непонятно.
|
|
|
|
Сообщений в этой теме
eugmai86 SPI отправка и получение данных с регистров ведомого устр. Apr 10 2011, 16:38 Палыч На странице 18 всё написано/нарисовано (рис 13): п... Apr 10 2011, 17:14 rezident Не нужно забывать, что SPI не просто передает или ... Apr 10 2011, 17:20 eugmai86 т.е. для записи в регистр ММА7455 можно так:
SPI_M... Apr 10 2011, 17:56 Палыч Цитата(eugmai86 @ Apr 10 2011, 21:56) т.е... Apr 11 2011, 04:04 eugmai86 ясно, спасибо, буду пробовать Apr 12 2011, 11:40 eugmai86 Уже неделю пытаюсь добиться работы акселерометра. ... Apr 17 2011, 18:09       Белка12 Цитата(Палыч @ Jun 24 2011, 13:57) Вы это... Jun 25 2011, 13:02        Палыч Цитата(Белка12 @ Jun 25 2011, 17:02) А сн... Jun 25 2011, 14:16         Белка12 Цитата(Палыч @ Jun 25 2011, 18:16) Тогда,... Jun 25 2011, 16:41          Палыч Цитата(Белка12 @ Jun 25 2011, 20:41) Осци... Jun 26 2011, 14:45           Белка12 Цитата(Палыч @ Jun 26 2011, 18:45) На вре... Jun 26 2011, 16:13 eugmai86 unsigned char SPI_MasterReceive(char cReg)
{
unsig... Apr 17 2011, 18:41 rezident Цитата(eugmai86 @ Apr 18 2011, 00:41) Как... Apr 17 2011, 18:44 eugmai86 Прошиваю) Пишу в $16 регистр 0b00000101 (вклю... Apr 17 2011, 18:45 rezident Цитата(eugmai86 @ Apr 18 2011, 00:45) Пиш... Apr 17 2011, 19:27 Слесарь Мож мой сырой код чем-то поможет
Кодvoid spi_io_w... Apr 17 2011, 19:00 eugmai86 Боюсь что датчик вышел из строя, мне не нравится е... Apr 17 2011, 19:10 eugmai86 Чтоб датчик понял "write" MSB должен быт... Apr 17 2011, 19:30 rezident Я уже что-то перестал понимать. Вы какой интерфе... Apr 17 2011, 19:42 eugmai86 Да, для I2C, но чем она для SPI не подходит то. Пр... Apr 17 2011, 19:49 rezident Тогда следующий вопрос для "партизана". ... Apr 17 2011, 20:04 Слесарь А у него чип на шине наверное всегда выбран и он э... Apr 17 2011, 20:08 eugmai86 4-х проводной SPI используется, SCK, MOSI, MISO и... Apr 18 2011, 04:20 rezident А преобразование уровней только для трех сигналов ... Apr 18 2011, 09:26 eugmai86 да, преобразую только СS MISO, MOSI. SCK оставил б... Apr 18 2011, 09:39 ILYAUL Цитата(eugmai86 @ Apr 18 2011, 13:39) да,... Apr 18 2011, 09:55 Слесарь А какие тайминги рекомендует производитель? Ведь н... Apr 18 2011, 09:52 mempfis_ Цитата(eugmai86 @ Apr 10 2011, 19:38) Доб... Apr 18 2011, 10:04 eugmai86 спасибо всем! буду пробовать. Apr 18 2011, 11:10 Белка12 Палыч, что скажете?
Может, я написала не очень по... Jun 26 2011, 14:33 Белка12 Уменьшила частоту SLK, вот что получилось.
Навер... Jun 28 2011, 06:49 Палыч Цитата(Белка12 @ Jun 28 2011, 10:49) Умен... Jun 28 2011, 07:48  =AK= Цитата(Палыч @ Jun 28 2011, 17:18) Настор... Jun 28 2011, 11:46  Белка12 Цитата(Палыч @ Jun 28 2011, 11:48) Настор... Jun 28 2011, 12:48   Палыч Только внимательно посмотрев на Ваши функции вывод... Jun 28 2011, 14:40    Белка12 Цитата(Палыч @ Jun 28 2011, 18:40) Только... Jun 28 2011, 16:30     Палыч Цитата(Белка12 @ Jun 28 2011, 20:30) 1. А... Jun 28 2011, 20:49      Белка12 Цитата(Палыч @ Jun 29 2011, 00:49) Мусор ... Jun 29 2011, 16:08       demiurg_spb Цитата(Белка12 @ Jun 29 2011, 20:08) Дисп... Jun 29 2011, 18:31        Белка12 Цитата(demiurg_spb @ Jun 29 2011, 22:31) ... Jun 30 2011, 16:08         Палыч Цитата(Белка12 @ Jun 30 2011, 20:08) в да... Jun 30 2011, 16:38          Белка12 Цитата(Палыч @ Jun 30 2011, 20:38) Раздел... Jul 1 2011, 03:16          Белка12 Цитата(Палыч @ Jun 30 2011, 20:38) Раздел... Jul 1 2011, 16:54           Палыч Цитата(Белка12 @ Jul 1 2011, 20:54) а что... Jul 1 2011, 21:16            Белка12 Цитата(Палыч @ Jul 2 2011, 01:16) Берем д... Jul 2 2011, 04:26             Палыч Цитата(Белка12 @ Jul 2 2011, 08:26) Значи... Jul 2 2011, 04:44              Белка12 Цитата(Палыч @ Jul 2 2011, 08:44) Вы, нав... Jul 2 2011, 05:46               Палыч Цитата(Белка12 @ Jul 2 2011, 09:46) не по... Jul 2 2011, 13:50        Белка12 Цитата(demiurg_spb @ Jun 29 2011, 22:31) ... Jul 4 2011, 13:32         demiurg_spb Нет никаких призраков. Как удобнее так и делайте. ... Jul 4 2011, 18:48   =AK= Цитата(Белка12 @ Jun 28 2011, 22:18) в да... Jun 28 2011, 22:20 Белка12 Палыч, огромное спасибо!
Вы мне очень, очень ... Jul 2 2011, 17:30 Белка12 Перепаяли резисторы, вроде бы, дисплей заработал п... Jul 5 2011, 15:07 demiurg_spb Аминь три раза Jul 6 2011, 04:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|