|
|
  |
SPI отправка и получение данных с регистров ведомого устр. |
|
|
|
Jun 24 2011, 09:41
|

Участник

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

|
Цитата(Палыч @ Jun 24 2011, 12:48)  У Вас, вроде бы, работа с SPI по готовности... Или как? По готовности выставляется бит ISPI в регистре режима SPICON и генерируется прерывание, вернее даже не по готовности, а устанавливается аппаратно, когда последний бит передается из SPIDAT. В прерывании я снимаю ISPI. П.С. Вот и подумала, что можно и подавать высокий уровень на CS (SS) тоже в прерывании...Ведь передача окончена? Цитата Может быть значительно длиннее. Спасибо.  Просто из иллюстраций было как-то непонятно.
|
|
|
|
|
Jun 25 2011, 13:02
|

Участник

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

|
Цитата(Палыч @ Jun 24 2011, 13:57)  Вы это и так делаете в процедурах передачи команд\данных Вообще-то флаг ISPI выставляется без моего участия, он выставляется самим контроллером аппаратно при передаче последнего передаваемого бита. А снимаю я его только в подпрограмме работающей по прерыванию от SPI... Или я Вас не так поняла?
Сообщение отредактировал Белка12 - Jun 25 2011, 13:05
|
|
|
|
|
Jun 25 2011, 14:16
|

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

|
Цитата(Белка12 @ Jun 25 2011, 17:02)  А снимаю я его только в подпрограмме работающей по прерыванию от SPI... Тогда, вот это - что? Код SEND: CLR ISPI Код SEND1: CLR ISPI Впрочем, это не повод, чтобы не рабатала передача... А, что "говорит" осциллограф?
|
|
|
|
|
Jun 25 2011, 16:41
|

Участник

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

|
Цитата(Палыч @ Jun 25 2011, 18:16)  Тогда, вот это - что? Код SEND: CLR ISPI Код SEND1: CLR ISPI А, ну да,  Это у меня «заклинило». Это в начале, в общем, получается, в прерывании перестраховка... Цитата Впрочем, это не повод, чтобы не работала передача... А, что "говорит" осциллограф? Осциллограф не очень может работать в мегагерцовом диапазоне, но то, что он показывает по SKL, выглядит как бы на очень большом промежутке времени, в его начале появляется синхросигнал из очень коротких импульсов~100 нс, (это, если синхронизироваться от CS), а вот по MOSI вообще ерунда идет…. Никак стабилизировать не удается, вообще-то надо попробовать синхронизировать по SKL или MOSI, наверное….  Рисовала от руки. "В провале" по MOSI вообще трудно что-то разобрать. А на высоком уровне после низкого уровня какой-то срыв сигнала.
Сообщение отредактировал Белка12 - Jun 25 2011, 16:48
|
|
|
|
|
Jun 26 2011, 16:13
|

Участник

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

|
Цитата(Палыч @ Jun 26 2011, 18:45)  На время отладки понизьте частоту обмена (SCLK) раз этак в 10-20, а если и понадобится, то и в 100. Я попробую. Но, к сожалению, частоту понизить можно только в 2, 4, 8, 16 раз. (Таковы возможности микросхемы ADuC831). Цитата Выбранная скорость передачи fCORE/2 fCORE/4 fCORE/8 fCORE/16 ( fCORE – частота ядра)
|
|
|
|
|
Jun 28 2011, 06:49
|

Участник

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

|
 Уменьшила частоту SLK, вот что получилось. Наверное все ОК? И дело не в передаче по SPI, а либо в исправности дисплея, либо в недочетах его инициализации. Молчит, увы.
Сообщение отредактировал Белка12 - Jun 28 2011, 13:05
|
|
|
|
|
Jun 28 2011, 12:48
|

Участник

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

|
Цитата(Палыч @ Jun 28 2011, 11:48)  Настораживает число импульсов на линии SKL (я так понимаю, что это тактирующие импульсы SCLK) - почему их девять? Передаётся байт - восемь бит... Вообще-то их восемь. Это я один лишний "провал" нарисовала. Уже исправила. Цитата(=AK= @ Jun 28 2011, 15:46)  Похоже, что их все-таки 8, однако состояние этой линии по умолчанию не низкое, как должно быть, а высокое. Из-за этого дисплей вполне может сходить с ума. Так в даташите дисплея именно у интерфейса SPI высокое состояние, а низкое или высокое устанавливается битом CPOL =0/1.
Сообщение отредактировал Белка12 - Jun 28 2011, 13:06
|
|
|
|
|
Jun 28 2011, 16:30
|

Участник

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

|
Цитата(Палыч @ Jun 28 2011, 18:40)  Только внимательно посмотрев на Ваши функции вывода заметил ошибку. По всей видимости, Вы выдаёте на дисплей некий байт данных и желаете его увидеть на экране. Обратите внимание на рисунок 6: CS# опускается не на передачу одного байта данных/команды (как это сделано у Вас), а на группу байт. 1. А где этот рисунок 6????????????? Вы имеете ввиду иллюстрацию из даташита? 2. Собственно, а какая разница, предавать по одному байту или группой? На мой взгляд, важно только чтобы был обеспечен низкий уровень CS на время передачи. ИМХО, конечно. Цитата При передаче данных необходимо: 1) установить низкий уровень на CS#; 2) передать один или несколько байт данных (при этом D/C - высокий уровень); 3) выдать команду NOP (D/C - низкий); 4) установить высокий уровень на CS#. А зачем здесь после передачи данных устанавливать D/C низкий? Цитата При передаче многобайтных команд CS# также должен "охватывать" их все. Это ладно. Я так понимаю, что после инициализации дисплея без всякой очистки и вывода данных, только после вывода одних команд инициализации, на экране должен появиться мусор, а не появляется.
|
|
|
|
|
Jun 28 2011, 20:49
|

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

|
Цитата(Белка12 @ Jun 28 2011, 20:30)  1. А где этот рисунок 6????????????? Вы имеете ввиду иллюстрацию из даташита? Хорошо, будем называть этот документ так Цитата(Белка12 @ Jun 28 2011, 20:30)  2. Собственно, а какая разница, предавать по одному байту или группой? На мой взгляд, важно только чтобы был обеспечен низкий уровень CS на время передачи. ИМХО, конечно....А зачем здесь после передачи данных устанавливать D/C низкий? Отсылаю Вас всё к тому же рисунку и тексту перед ним. Цитата(Белка12 @ Jun 28 2011, 20:30)  Я так понимаю, что после инициализации дисплея без всякой очистки и вывода данных, только после вывода одних команд инициализации, на экране должен появиться мусор, а не появляется. Мусор никому ничего не должен
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|