реклама на сайте
подробности

 
 
> SPI отправка и получение данных с регистров ведомого устр.
eugmai86
сообщение Apr 10 2011, 16:38
Сообщение #1


Участник
*

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



Доброго времени суток, есть проблема чтения и записи регистров модуля акселерометра работающего через SPI. Подскажите как на Си читать и писать в регистры данного модуля. Например нужно отправить с меги 16 значение 0b00000101 в регистр $16. SPI разобрался как конфигурировать, проблема за малым. СпасибоПрикрепленный файл  MMA7455L_____________.pdf ( 519.11 килобайт ) Кол-во скачиваний: 334
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Apr 17 2011, 18:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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) из даташит.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 8 2011, 07:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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 для другого устройства, в моем случае - дисплея?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 8 2011, 09:14
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Белка12 @ Jun 8 2011, 11:49) *
В случае только одной передачи, о чтении можно "забыть"?
Можно
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 23 2011, 19:25
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 24 2011, 08:48
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Белка12 @ Jun 23 2011, 23:25) *
Прерывания по SPI
У Вас, вроде бы, работа с SPI по готовности... Или как?

Цитата(Белка12 @ Jun 23 2011, 23:25) *
Так ли важно, чтобы сигнал CS (SS), заканчивался с последним тактом SCLOKC, или он может быть длиннее и даже значительно длиннее?
Может быть значительно длиннее.
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 24 2011, 09:41
Сообщение #7


Участник
*

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



Цитата(Палыч @ Jun 24 2011, 12:48) *
У Вас, вроде бы, работа с SPI по готовности... Или как?


По готовности выставляется бит ISPI в регистре режима SPICON и генерируется прерывание, вернее даже не по готовности, а устанавливается аппаратно, когда последний бит передается из SPIDAT. В прерывании я снимаю ISPI.

П.С. Вот и подумала, что можно и подавать высокий уровень на CS (SS) тоже в прерывании...Ведь передача окончена?

Цитата
Может быть значительно длиннее.

Спасибо.sm.gif
Просто из иллюстраций было как-то непонятно.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 24 2011, 09:57
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Белка12 @ Jun 24 2011, 13:41) *
В прерывании я снимаю ISPI.
Вы это и так делаете в процедурах передачи команд\данных
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016