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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> SPI отправка и получение данных с регистров ведомого устр.
Белка12
сообщение Jun 24 2011, 09:41
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #32


Гуру
******

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



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


Участник
*

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



Цитата(Палыч @ Jun 24 2011, 13:57) *
Вы это и так делаете в процедурах передачи команд\данных

Вообще-то флаг ISPI выставляется без моего участия, он выставляется самим контроллером аппаратно при передаче последнего передаваемого бита.
А снимаю я его только в подпрограмме работающей по прерыванию от SPI...

Или я Вас не так поняла?

Сообщение отредактировал Белка12 - Jun 25 2011, 13:05
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 25 2011, 14:16
Сообщение #34


Гуру
******

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



Цитата(Белка12 @ Jun 25 2011, 17:02) *
А снимаю я его только в подпрограмме работающей по прерыванию от SPI...

Тогда, вот это - что?
Код
SEND:   CLR    ISPI
Код
SEND1:  CLR    ISPI

Впрочем, это не повод, чтобы не рабатала передача... А, что "говорит" осциллограф?
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 25 2011, 16:41
Сообщение #35


Участник
*

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



Цитата(Палыч @ Jun 25 2011, 18:16) *
Тогда, вот это - что?
Код
SEND:   CLR    ISPI
Код
SEND1:  CLR    ISPI


А, ну да, wub.gif
Это у меня «заклинило».

Это в начале, в общем, получается, в прерывании перестраховка...


Цитата
Впрочем, это не повод, чтобы не работала передача... А, что "говорит" осциллограф?


Осциллограф не очень может работать в мегагерцовом диапазоне, но то, что он показывает по SKL, выглядит как бы на очень большом промежутке времени, в его начале появляется синхросигнал из очень коротких импульсов~100 нс, (это, если синхронизироваться от CS), а вот по MOSI вообще ерунда идет…. Никак стабилизировать не удается, вообще-то надо попробовать синхронизировать по SKL или MOSI, наверное….



Рисовала от руки. "В провале" по MOSI вообще трудно что-то разобрать. А на высоком уровне после низкого уровня какой-то срыв сигнала.

Сообщение отредактировал Белка12 - Jun 25 2011, 16:48
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 26 2011, 14:33
Сообщение #36


Участник
*

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



Палыч, что скажете?

Может, я написала не очень понятно?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 26 2011, 14:45
Сообщение #37


Гуру
******

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



Цитата(Белка12 @ Jun 25 2011, 20:41) *
Осциллограф не очень может работать в мегагерцовом диапазоне
На время отладки понизьте частоту обмена (SCLK) раз этак в 10-20, а если и понадобится, то и в 100.
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 26 2011, 16:13
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 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 – частота ядра)
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 28 2011, 06:49
Сообщение #39


Участник
*

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





Уменьшила частоту SLK, вот что получилось.
Наверное все ОК?
И дело не в передаче по SPI, а либо в исправности дисплея, либо в недочетах его инициализации.
Молчит, увы.crying.gif

Сообщение отредактировал Белка12 - Jun 28 2011, 13:05
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 28 2011, 07:48
Сообщение #40


Гуру
******

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



Цитата(Белка12 @ Jun 28 2011, 10:49) *
Уменьшила частоту SLK, вот что получилось. Наверное все ОК?
Настораживает число импульсов на линии SKL (я так понимаю, что это тактирующие импульсы SCLK) - почему их девять? Передаётся байт - восемь бит...
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jun 28 2011, 11:46
Сообщение #41


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Палыч @ Jun 28 2011, 17:18) *
Настораживает число импульсов на линии SKL (я так понимаю, что это тактирующие импульсы SCLK) - почему их девять? Передаётся байт - восемь бит...


Похоже, что их все-таки 8, однако состояние этой линии по умолчанию не низкое, как должно быть, а высокое. Из-за этого дисплей вполне может сходить с ума.
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 28 2011, 12:48
Сообщение #42


Участник
*

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


Гуру
******

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



Только внимательно посмотрев на Ваши функции вывода заметил ошибку. По всей видимости, Вы выдаёте на дисплей некий байт данных и желаете его увидеть на экране.
Обратите внимание на рисунок 6: CS# опускается не на передачу одного байта данных/команды (как это сделано у Вас), а на группу байт.

При передаче данных необходимо:
1) установить низкий уровень на CS#;
2) передать один или несколько байт данных (при этом D/C - высокий уровень);
3) выдать команду NOP (D/C - низкий);
4) установить высокий уровень на CS#.

При передаче многобайтных команд CS# также должен "охватывать" их все.
Go to the top of the page
 
+Quote Post
Белка12
сообщение Jun 28 2011, 16:30
Сообщение #44


Участник
*

Группа: Участник
Сообщений: 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# также должен "охватывать" их все.

Это ладно.

Я так понимаю, что после инициализации дисплея без всякой очистки и вывода данных, только после вывода одних команд инициализации, на экране должен появиться мусор, а не появляется.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 28 2011, 20:49
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 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) *
Я так понимаю, что после инициализации дисплея без всякой очистки и вывода данных, только после вывода одних команд инициализации, на экране должен появиться мусор, а не появляется.
Мусор никому ничего не должен
Go to the top of the page
 
+Quote Post

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

 


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


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