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

 
 
 
Reply to this topicStart new topic
> AVR+SPI
gm1957
сообщение Jun 2 2005, 03:19
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 2-06-05
Пользователь №: 5 653



Люди добрые! Подскажите! То ли в AVRStudio глюк, то ли я заработался.
В AVRStudio v4.10 запускаю такую вещь:
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc"
.def temp=r16
.CSEG
.org 0
rjmp RESET
nop
.
.
rjmp SPI;
.
.
nop
;****** обработка RESET ******************
RESET:
cli ;запрещение прерываний
ldi temp,low(RAMEND) ;инициализация стека
out SPL,temp ; --"--
ldi temp,(1<<PB0)+(1<<PB3)+(1<<PB5) ;определение линий
;порта B как выходных
out DDRB,temp ;PB0 - линия CS внешнего
;ЦАП с интерфейсом SPI, PB3 - ;линия MOSI, PB5 - линия SCK
ldi temp,1<<PB0 ;установка PB0 - запрет выбора
out PORTB,temp ;внешнего ЦАП
ldi temp,(1<<SPIE)+(1<<SPE)+(1<<MSTR) ;SPIE - разрешение
;прерывания SPI, SPE - ;разешение работы SPI
;MSTR - определение AVR
;как мастера
out SPCR,temp ;инициализация SPI
sei ;разрешение прерываний
ldi XH,high(0xffff) ;подготовка данных для
ldi XL,low0xffff) ;загрузки по SPI
cbi PORTB,PB0 ;сброс PB0 -разрешение
;работы внешнего ЦАП
out SPDR,XH ;передача данных
out SPDR,XL ;по SPI
sbi PORTB,PB0
reti
;****** обработка IRQ *********************
SPI: reti

при пошаговой отладке сразу же после разрешения прерываний (командой sei) вызывается обработка SPI, хотя, насколько я знаю, обработка SPI вызывается ПОСЛЕ ПЕРЕДАЧИ ДАННЫХ, а, в свою очередь, передача данных начинается только ПОСЛЕ ЗАГРУЗКИ РЕГИСТРА SPDR, которая у меня производится после общего разрешения прерываний!
Где затык?
Go to the top of the page
 
+Quote Post
yung
сообщение Jun 2 2005, 05:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



datasheet на Atmega8:

If SS is configured as an input, it must be held high to ensure Master SPI operation. If
the SS pin is driven low by peripheral circuitry when the SPI is configured as a Master
with the SS pin defined as an input, the SPI system interprets this as another Master
selecting the SPI as a Slave and starting to send data to it.

Чтобы не было проблем, сконфигурируй PB2 на выход , и все ОК. Проверил на AVR-Studio 4.10, сработало.
Go to the top of the page
 
+Quote Post
gm1957
сообщение Jun 2 2005, 05:55
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 2-06-05
Пользователь №: 5 653



спасибо! все заработало


--------------------
Miha
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 2 2005, 07:41
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(gm1957 @ Jun 2 2005, 06:19)
cbi PORTB,PB0                                                  ;сброс PB0 -разрешение
                                                                        ;работы внешнего ЦАП
out SPDR,XH                                                    ;передача данных
out SPDR,XL                                                    ;по SPI
sbi PORTB,PB0


Так нельзя данные по SPI посылать, надо по одному байту и ждать когда он отправится,
и еще чип селект обычно всетки после полной отправки второго байта убирать.
Go to the top of the page
 
+Quote Post
gm1957
сообщение Jun 2 2005, 08:27
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 2-06-05
Пользователь №: 5 653



Цитата(KRS @ Jun 2 2005, 16:41)
Цитата(gm1957 @ Jun 2 2005, 06:19)
cbi PORTB,PB0                                                  ;сброс PB0 -разрешение
                                                                        ;работы внешнего ЦАП
out SPDR,XH                                                     ;передача данных
out SPDR,XL                                                     ;по SPI
sbi PORTB,PB0


Так нельзя данные по SPI посылать, надо по одному байту и ждать когда он отправится,
и еще чип селект обычно всетки после полной отправки второго байта убирать.
*



подскажите, как лучше организовать ожидание отправки?
а байты я ведь и так по одному отправляю, и в PB0 записываю единицу


--------------------
Miha
Go to the top of the page
 
+Quote Post
gm1957
сообщение Jun 2 2005, 08:51
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 2-06-05
Пользователь №: 5 653



Цитата(KRS @ Jun 2 2005, 16:41)
Цитата(gm1957 @ Jun 2 2005, 06:19)
cbi PORTB,PB0                                                  ;сброс PB0 -разрешение
                                                                        ;работы внешнего ЦАП
out SPDR,XH                                                     ;передача данных
out SPDR,XL                                                     ;по SPI
sbi PORTB,PB0


Так нельзя данные по SPI посылать, надо по одному байту и ждать когда он отправится,
и еще чип селект обычно всетки после полной отправки второго байта убирать.
*



с ожиданиями разобрался,
спасибо


--------------------
Miha
Go to the top of the page
 
+Quote Post
yung
сообщение Jun 2 2005, 09:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



А мне вот что еще интересно. Я ни разу такого не встречал - reti после основного блока. Это косяк или умышленно делается?
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 2 2005, 10:00
Сообщение #8


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



По поводу ожидания
по SPI обычно передача идет быстро, поэтому прерывания лучше не использовать т.к. вход выход из прерывания будет сравним со сременем передачи, лучше просто ждать (сканировать бит) примерно так

WaitSpi:
sbis SPSR, SPIF
rjmp WaitSpi

и соотвественно не разрешать прерывания от SPI
тогда запись в АЦП будет примерно так выглядеть

cbi PORTB,PB0

ldi r16, HIGH(xxxx)
out SPDR, r16

;сюда можно вставить обраотку или подготовку данных все равно ждать окончания пересылки

ldi r16, LOW(xxxxx)

WaitSpi:
sbis SPSR, SPIF
rjmp WaitSpi

out SPDR, r16

WaitSpi1:
sbis SPSR, SPIF
rjmp WaitSpi1

sbi PORTB,PB0
Go to the top of the page
 
+Quote Post
gm1957
сообщение Jun 2 2005, 10:35
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 2-06-05
Пользователь №: 5 653



большое спасибо за помощь!


--------------------
Miha
Go to the top of the page
 
+Quote Post
gm1957
сообщение Jun 2 2005, 10:36
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 2-06-05
Пользователь №: 5 653



Цитата(yung @ Jun 2 2005, 18:37)
А мне вот что еще интересно. Я ни разу такого не встречал - reti после основного блока. Это косяк или умышленно делается?
*


это я просто показал завершение
в реальности конечно не так


--------------------
Miha
Go to the top of the page
 
+Quote Post

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

 


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


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