|
|
  |
AVR+SPI |
|
|
|
Jun 2 2005, 03:19
|
Участник

Группа: Новичок
Сообщений: 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, которая у меня производится после общего разрешения прерываний! Где затык?
|
|
|
|
|
Jun 2 2005, 05:55
|
Участник

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

|
спасибо! все заработало
--------------------
Miha
|
|
|
|
|
Jun 2 2005, 08:27
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Jun 2 2005, 08:51
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Jun 2 2005, 10:00
|

Профессионал
    
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Jun 2 2005, 10:35
|
Участник

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

|
большое спасибо за помощь!
--------------------
Miha
|
|
|
|
|
Jun 2 2005, 10:36
|
Участник

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

|
Цитата(yung @ Jun 2 2005, 18:37) А мне вот что еще интересно. Я ни разу такого не встречал - reti после основного блока. Это косяк или умышленно делается? это я просто показал завершение в реальности конечно не так
--------------------
Miha
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|