Вопрос по SPI на asm

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопрос по SPI на asm

Сообщение Jack_A »

Alkul
Спойлер, я инстинктивно :) старался минимизировать число одновременно работающих прерываний, и поскольку время позволяло ( у мастера ), передавал в отдельной ветке, посматривая на флаг SPIF "вручную", в промежутках между основной работой, а слейв терпеливо ждал - куда ему деваться, он же слейв.
, кажется, вы слишком усложнили для консультируемого процесс пониманя. Вроде ему надо вязаться с ЖКИ, достаточно передачи в одну сторону, это наполовину уменьшает объем непоняток. Судя по последнему посту, все-таки SPI он еще не понимает.
Попробую последний раз.
Итак, мастер и слейв соединены 4 линиями пин-в-пин MOSI,MISO,CLK,SS. Исходно на SS высокий.
1. Вешаем низкий на SS, для слейва это значит : "Охапкин, возьми трубку, щас разговаривать будем".
2. Закидываем в SPDR первый байт из передаваемого пакета. Больше программно ничего не происходит, кусок схемы мастера, заточенный под SPI, самостоятельно начинает передавать слейву байт - бит за битом, дергая клок.
3. Закончив передачу байта, мастер выставляет флаг SPIF. Если выставлено разрешение прерывания и написан соответствующий обработчик, в этом обработчике : если данные переданы не все, закидывается следующий байт, соответственно передвинув указатель; если пакет передан полностью, на SS кидаем высокий : "Отбой,Вася !". Если разрешение на прерывание по SPI нет, отслеживать флаг SPIF с соответствующими вышеописанными манипуляйциями нужно "вручную", в головной программе.
Вот так-то, в таком аксепте :) . А одновременно или попеременно аппаратный и программный режим - это никак.

Блин, оказывается, речь шла о 10-битном слове. А я зря клаву топтал, пальцы мозолил. Но набранного жалко, опубликую. Кстати - а что это за чудо, у которого 10-битный кадр ?
Изображение
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Вопрос по SPI на asm

Сообщение Alkul »

Jack_A писал(а):кажется, вы слишком усложнили для консультируемого процесс пониманя.
Я попробовал описать процесс подробно. Для новичка может быть неочевидным, что для получения требуемых данных, если их у слейва несколько, надо сделать не один, а два цикла обмена. Ведь в первом цикле слейв еще "не знает", какие данные хочет получить мастер и отправляет то содержимое SPDR (для аппаратной реализации), которое находилось там перед началом обмена и не факт, что там лежало то, что нужно мастеру в данный момент.
В общем случае, для получения N байт данных надо сделать N+1 цикл обмена.
Jack_A писал(а): Вроде ему надо вязаться с ЖКИ...
Блин, оказывается, речь шла о 10-битном слове.
uk8amk писал(а):Все это так, но автору темы требуется 10-битный кадр.
Изначально у автора на диаграмме указаны 8-ми битные посылки.
Упоминания про подключение к ЖКИ я в теме не нашел... Мне кажется, автор про 10 бит просто так спросил. Вопрос в стиле "А как поступить, если?.."
Но что мы за автора гадаем, пусть сам уточнит, что же ему именно нужно.
Автор, напишите, ЧТО вы хотите подключить к МК по SPI.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопрос по SPI на asm

Сообщение Jack_A »

А это он в другом разделе :
http://radiokot.ru/forum/viewtopic.php? ... 7#p2850137
Насчет "ничего общего" он слукавил...
Изображение
vit007
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Re: Вопрос по SPI на asm

Сообщение vit007 »

Все верно, мне нужно подключить oled ЖКИ по SPI. А т.к. все примеры на Си, а на asm есть библиотека только для простого дисплея в 4бита. Вот решил, заточить такую и попутно понять как пользоваться интерфейсом... диаграмм как раз от дисплея где два бита управления и 8бит данные, вот 10бит вырисовалось. В шите к дисплеям на WS0010 контроллера нет описания работы в SPI, кроме диаграммы...

Если смотреть диаграмму на флешь память 25 серии то там слова настройки и пересылки по 8 бит (00000011,10101010), тут может тоже, но пока по диаграмме видно одно в 10бит.
SPI-diagram.PNG
(38.25 КБ) 525 скачиваний
я специально опустит SS в коде... потом нарисую все полностью...

Из написанного понимаю, что когда байт будет SPDR, то МК повиснит на этой строке, чтоб передать все 8 бит, после окончания уже в SPDR будет 8 бит от слейва и произойдет прерывание SPI_STC в котором я могу забрать данные, как в шите МК и там же записать новое слово, так. И не будет никакой цикличности программы (бит - прерывание)...

А как шить МК, когда уже пины заняты, т.е. надо в схеме городить логику, диоды или все просто - пришел от программатора SS на "0" и все...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопрос по SPI на asm

Сообщение Jack_A »

vit007 писал(а): понимаю, что когда байт будет SPDR, то МК повиснит на этой строке
Неправильно понимаете. Никто ни на ком не повиснет, МК как ни в чем не бывало продолжит работу. Работа может быть как полезной ( продолжение вычислений или слежение за кнопками и т.д. ), так и тупым delay'ем - это зависит от квалифик^ции программера. А передача идет cсама по себе схемным автоматом SPI, не зависящим от выполняемой проги. А когда весь байт передан, он выставит флаг SPIF; "Ребята, я закончил !" .
Представим себе ( из реального изделия ) : МК непрерывно измеряет ток двигателя на предмет отрубить его при перегрузке. И тут возникла необходимость планово записать данные в журнал на внешней карточке через SPI. Так что, бросать следить за двигуном, всецело отдавшись передаче ? Хренушки, движок без контроля не оставим, передадим данные в фоновом режиме вышеописанным способом, продолжая измерять ток и лишь отвлекаясь на краткий миг запуливания следующей буквы в SPDR . Делу - время, а потехе ...
Изображение
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Вопрос по SPI на asm

Сообщение Alkul »

vit007 писал(а):Если смотреть диаграмму на флешь память 25 серии то там слова настройки и пересылки по 8 бит (00000011,10101010), тут может тоже, но пока по диаграмме видно одно в 10бит.
Блин, до меня только сейчас дошло. Плохо, когда задающий вопрос путается в предмете.
Автор, а ничего, что приведенная вами диаграмма - это интерфейс i2c, а Вы всех мучаете насчет интерфейса SPI? Это, вообще-то совершенно разные интерфейсы передачи, с совершенно разной логикой.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопрос по SPI на asm

Сообщение Jack_A »

Мне тоже так показалось, не стал вникать глубоко, думал - чел ведь знает, чего хочет .
Спойлер"Крокодил - он тоже птица, только летает низенько-низенько "
Изображение
vit007
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Re: Вопрос по SPI на asm

Сообщение vit007 »

Странно, не была такого :shock:

http://www.winstar.com.tw/products/oled ... 1602c.html

я ж название контроллера написал.... шит, что ли посмотреть нельзя было...

Значит аппаратный SPI работает параллельно программе, может поэтому и надо ждать появления флаг, а то как понять когда собирать данный со слейва...

А при программном этого преимущества не получить...
Последний раз редактировалось vit007 Пн сен 05, 2016 12:29:08, всего редактировалось 1 раз.
akl
Друг Кота
Сообщения: 4447
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Вопрос по SPI на asm

Сообщение akl »

vit007 писал(а):Все верно, мне нужно подключить oled ЖКИ по SPI...
Начал бы примерно с такого ногодрыгания
Спойлер

Код: Выделить всё

.include "m8def.inc"

.def	Temp0=R16
.def	Temp1=R17
.def	Temp2=R18
.def	Temp3=R19
.def	Temp4=R20
.def	Temp5=R21
.def	Temp6=R22

.equ	MOSI=3
.equ	CSB=2
.equ	SCK=5

.equ	RS=1
.equ	RW=0

.cseg

.org 0

;rjmp RESET ; Reset Handler
;reti ;rjmp EXT_INT0 ; IRQ0 Handler
;reti ;rjmp EXT_INT1 ; IRQ1 Handler
;reti ;rjmp TIM2_COMP ; Timer2 Compare Handler
;reti ;rjmp TIM2_OVF ; Timer2 Overflow Handler
;reti ;rjmp TIM1_CAPT ; Timer1 Capture Handler
;reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
;reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
;reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
;reti ;rjmp TIM0_OVF ; Timer0 Overflow Handler
;rjmp SPI_STC ; SPI Transfer Complete Handler
;reti ;rjmp USART_RXC ; USART RX Complete Handler
;reti ;rjmp USART_UDRE ; UDR Empty Handler
;reti ;rjmp USART_TXC ; USART TX Complete Handler
;reti ;rjmp ADC_CC ; ADC Conversion Complete Handler
;reti ;rjmp EE_RDY ; EEPROM Ready Handler
;reti ;rjmp ANA_COMP ; Analog Comparator Handler
;reti ;rjmp TWSI ; Two-wire Serial Interface Handler
;reti ;rjmp SPM_RDY ; Store Program Memory Ready Handler

RESET:
		ldi Temp0,high(RAMEND)
		out SPH,Temp0 
		ldi Temp0,low(RAMEND)
		out SPL,Temp0

		ldi Temp0,0b00101100		; 2-SS(CS), 3-MOSI(SDI), 4-MISO(SDO)вход, 5-SCK(SCL)   
		out DDRB,Temp0
	OUT	PORTB,Temp0
;********************************************
;выдача команды очистки дисплея
	CBI	PORTB,CSB
	LDI	R21,0<<RS|0<<RW	; будет запись команды
	LDI	R22,0b00000001	; собственно команда очистки дисплея
	RCALL	WRITE_SPI
	SBI	PORTB,CSB
cycle:         
		rjmp cycle		 
;*************************
WRITE_SPI:
	CLR	R20
GO_WRITE:
	CBI	PORTB,MOSI
	SBRC	R21,1	; соответствует биту RS
	SBI	PORTB,MOSI

	CBI	PORTB,SCK
	RCALL	PAUSE_RET
	SBI	PORTB,SCK

	LSL	R22
	ROL	R21
	INC	R20
	CPI	R20,10
	BRLO	GO_WRITE
PAUSE_RET:	
	RET

.EXIT
roman.com
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос по SPI на asm

Сообщение roman.com »

vit007 писал(а):Значит аппаратный SPI работает параллельно программе, может поэтому и надо ждать появления флаг, а то как понять когда собирать данный со слейва...
Аппаратные модули потому и аппаратные, что работают независимо... т.е. параллельно программе. SPI, UART, ... и т.д.

Как понять когда собирать данный со слейва ? Не обязательно ждать флаг. Можно просто переодически его проверять...

А можно и не проверять)) Если цикл задан жёстко, то зная время когда будет отправлен следующий байт и зная время передачи байта... можно высчитать когда в слейве появится следующий байт. Забираем из буфера байт, не дожидаясь всяких флагов))
vit007 писал(а):я ж название контроллера написал.... шит, что ли посмотреть нельзя было...
Я чтото не понял... Что Вы вообще хотите сделать? Связать два МК (типа ATmega8) по SPI... или подключить к ATmega8 индикатор?
Последний раз редактировалось roman.com Пн сен 05, 2016 13:34:27, всего редактировалось 2 раза.
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Вопрос по SPI на asm

Сообщение Alkul »

vit007 писал(а):http://www.winstar.com.tw/products/oled-module/oled-character-display/weh001602c.html
я ж название контроллера написал.... шит, что ли посмотреть нельзя было...
Это мы должны были посмотреть? Что-то я не помню, чтобы за консультации нам кто-то платил. В этой ветке вы ничего про индикатор не говорили. Нам еще надо по всему форуму побегать, чтоб ваши мысли в кучу собрать?
Автор, если Вы НАСТОЛЬКО некомпетентны в предмете, то надо было вопрос иначе задавать.
Надо было спросить - "Как мне подключить такой-то индикатор и как писать софт для работы с ним?"

У этого контроллера, судя по описанию выводов интерфейса (RS, R/W, E, DB0~DB7), вообще нет никакого последовательного интерфейса. Ни SPI, ни I2C. Подключение, аналогичное индикаторам с контроллером HD4478, только у него контроллер другой - WS0010

Но, тем не менее, беглый поиск показал, что возможность подключиться по SPI есть, только надо чутка "допилить" индикатор. Какой протокол обмена, к каким выводам после "допила" подключаться - а хрен его знает. Но там человек ссылается на другой индикатор, хоть и на том же контроллере. Так что сработает ли вариант "допила" для индикатора автора - еще большой вопрос.

Автор, не парьте себе и другим мозги - подключайтесь общепринятым для таких индикаторов способом - через выводы RS, R/W, E, DB0~DB7.
Jack_A писал(а):думал - чел ведь знает, чего хочет .
Как выясняется, нет.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопрос по SPI на asm

Сообщение Jack_A »

vit007 писал(а): я ж название контроллера написал.... шит, что ли посмотреть нельзя было...
Дык оно мне надо было ? Там 3 интерфейса: моторыловский, интеловский и SPI . На снимке я вижу разъем под обычный параллельный и-фейс. А какой в реале достался - хз
А при программном этого преимущества не получить...
Можно, но нужно мудрить с таймерами, да и в скорости проигрывает.
Изображение
vit007
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Re: Вопрос по SPI на asm

Сообщение vit007 »

как я забыл, у программного есть преимущество.... это подключение к любым выводам МК.

http://avr.ru/ready/inter/display/weh001202

это правда, что предмет плохо знаю... в универи давали asm, но практика 0 (вывод числа на экран монитора) мне, как технику показалось, а зачем это.... экзамен сдал и забыл... и только обучалка на этом сайте, открыла желание, чего-то большего... простой дисплей, я уже пользую на 4х битах, но красивее будет Oled. Извиняюсь за флуд.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопрос по SPI на asm

Сообщение Jack_A »

Да OLED он или LCD - для интерфейса оно монохренственно, ему задача - затолкать в контроллер дисплея нужную строку.
roman.com писал(а): А можно и не проверять)) Если цикл задан жёстко, то зная время когда будет отправлен следующий байт и зная время передачи байта... можно высчитать когда в слейве появится следующий байт. Забираем из буфера байт, не дожидаясь всяких флагов))
Вот такому не надо учить новичков. Это все равно что билет купил, но побегу по шпалам за электричкой. Есть специально предусмотренный флаг, так его и нужно отслеживать, за это никто дополнительных денег не потребует. И никакого выигрыша во времени не будет, флаг взводится в то мгновение, когда байт полностью принят, так что и дожидаться его не придется.
Изображение
roman.com
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос по SPI на asm

Сообщение roman.com »

Вот нельзя было сразу написать в начале темы что мы хотим... )) Людей тут запутали...))

http://avr.ru/ready/inter/display/weh001202
Jack_A писал(а):Есть специально предусмотренный флаг, так его и нужно отслеживать, за это никто дополнительных денег не потребует.
Проверка флага - лишняя строчка в программе))
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Вопрос по SPI на asm

Сообщение Alkul »

roman.com писал(а):Проверка флага - лишняя строчка в программе))
Ерунда. Такая дурная "экономия" не даст ничего, кроме головной боли. Поскольку работа с дисплеем оформляется в подпрограммах, то повторится эта команда раз или два. Смысл экономии? Если пара команд так критична, надо брать контроллер с бОльшим объемом программной памяти. Или переходить с Си на ассемблер и более тщательно программировать.
akl
Друг Кота
Сообщения: 4447
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Вопрос по SPI на asm

Сообщение akl »

Если есть возможность проверки флага занятости/готовности BUSY=1/0, нужно этим пользоваться. Тем более, что программная нагрузка, по мне, невелика.
Последний раз редактировалось akl Вт сен 06, 2016 14:06:13, всего редактировалось 1 раз.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопрос по SPI на asm

Сообщение Jack_A »

roman.com А проверка времени с момента отправки байта - она не требует команд ? Или "вали кулем, потом разберем" ?
Изображение
vit007
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Re: Вопрос по SPI на asm

Сообщение vit007 »

вот мой огород...
shift_0.asm
(3.9 КБ) 277 скачиваний
roman.com
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос по SPI на asm

Сообщение roman.com »

Ну развели целый форум.. на пустом месте))
Alkul писал(а):Поскольку работа с дисплеем оформляется в подпрограммах, то повторится эта команда раз или два.
Это обязательное условие?)) Вообщето каждый пишет алгоритм под себя (под свои задачи).
Alkul писал(а):Такая дурная "экономия" не даст ничего, кроме головной боли.
Зависит от алгоритма...

Обычно кроме общения с индикатором МК выполняет и другие задачи... А если у меня простой линейный алгоритм? Например есть куча датчиков, их надо вывести на экран...

-измерил датчик 1
-обработал данные
-закинул в SPI... SPI автоматом передает. А я измеряю следующие датчики...
-измерил датчик 2
-обработал данные
-прочитал SPI (если мне нужно подтверждение или ещё что...)
-закинул в SPI... SPI автоматом передает. А я измеряю следующие датчики...
-измерил датчик 3
-обработал данные
...
...

Ну и нафига мне каждый раз проверять флаг окончания передачи/приёма, если я и так знаю сколько времени занимает измерение, обработка и передача/приём.
Alkul писал(а):Поскольку работа с дисплеем оформляется в подпрограммах...
т.е. мне надо сначала измерить все датчики, обработать... сложить в буфер... вызвать подпрограмму... читать буфер... передавать на индикатор... Ну и нафига эта мне головная боль с подпрограммами при линейном алгоритме?

Это я просто привел как пример. Не всегда нужно ждать или проверять флаг передачи/приёма SPI.
Ответить

Вернуться в «AVR»