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

 
 
> 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
 
Start new topic
Ответов
KRS
сообщение Jun 2 2005, 07:41
Сообщение #2


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

Группа: Модераторы
Сообщений: 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:51
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 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
Сообщение #4


Местный
***

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



А мне вот что еще интересно. Я ни разу такого не встречал - reti после основного блока. Это косяк или умышленно делается?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:24
Рейтинг@Mail.ru


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