Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 13.12.2014, 01:58   #1 (permalink)
Uragan
Новичок
 
Регистрация: 13.12.2014
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию SPI для ATmega 128A на ассемблере

привет всем! гляньте, плиз! нужна помощь, делаем код для задержки(есть в коде от таймера), еще такая же тема нужна с uart, но там вообще глухо(

.include "m128def.inc"
.equ LowByte=60
.equ CS=PB0
.equ SCK=PB7

.org $000
rjmp reset
.org $001C
rjmp timer1_ovf

reset:
cli

ldi r16, TCNT1H
out TCNT1H, r16
ldi r16, LowByte
//ldi r16, TCNT1L
out LowByte, r16

ldi r16, (1<<TOIE1)
out TIMSK, r16
ldi r16, (1<<CS10)|(1<<CS11)
out TCCR1B, r16
ldi r17, (1<<4)
out DDRB, r17
clr r16
sei

main:
RJMP main

ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0
out ADCSRA, r18

timer1_ovf:
eor r16, r17
out PORTE, r16///


;start ADC 1/32=125; interrupt enable
ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0|1<<ADSC
out ADCSRA, r18
/*ldi r18, 1<<ADFR
out ADCSRA, r18
ldi r18, 1<<ADSC
out ADCSRA, r18*/



SPI_MasterInit:
; Установка MOSI и SCK на вывод, все остальные на ввод
ldi r17,(1<<DDB5)|(1<<DDB1)
out DDRB,r17
; Разрешение SPI в режиме мастера, установка скорости связи fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret
SPI_MasterTransmit:
; Запуск передачи данных (r16)
out SPDR,r16
Wait_Transmit:
; Ожидание завершения передачи данных
sbis SPSR,SPIF
rjmp Wait_Transmit
ret

SPI_SlaveInit:
; Установка MISO на вывод и всех ост. на ввод
ldi r17,(1<<DDB3)
out DDRB,r17
; Разрешение SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret
SPI_SlaveReceive:
; Ожидание завершения передачи
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Чтение принятых данных и выход из процедуры
in r16,SPDR
ret
Uragan вне форума   Ответить с цитированием

Старый 13.12.2014, 01:58
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я уверен, что данный список должен вам помочь

Доктор фьюзов для AVR - ATmega Fusebit Doctor
Монтажная станция своими руками на ATmega 8515 в BASCOM AVR

Старый 13.12.2014, 07:23   #2 (permalink)
akl
Member
 
Регистрация: 08.10.2013
Сообщений: 47
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 390
По умолчанию

Не вижу установки указателя стека.
Код:
reset:
cli
    LDI    R22,HIGH(RAMEND)
    LDI    R23,LOW(RAMEND)
    OUT    SPH,R22
    OUT    SPL,R23
Выход из обработчика timer1_ovf сейчас лучше делать командой RETI, т.к. идет аппаратное разрешение прерываний (I-флаг в SREG устанавливается при выполнении команды). Команда RET состояние I-флага не меняет и после первого выхода из timer1_ovf будет банальное зависание.
akl вне форума   Ответить с цитированием
Старый 19.12.2014, 16:08   #3 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Строки
Код:
 ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0
 out ADCSRA, r18
никогда не выполнятся

Дальше в коде много ошибок. Нет вызова подпрограмм. Первая же подпрограмма слилась с обработчиком прерываний..
korsaj вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:48.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.