Spi интерфейс
Spi интерфейс
Люди, помогите кто может. Как впихнуть на ассемблере 16 бит в 8-битный регистр spdr, чтобы настроить внешний ацп?
- Реклама
Re: Spi интерфейс
Код: Выделить всё
LDS R22, FIFO+0 // Чтение SRAM -2 такт
OUT SPDR, R22 // Запись SPI -1 такт
while_0: // while(!(SPSR & (1<<7)));
SBIC PINB, 2 // проверка SS = 0 -1 такт
RJMP SPI_stop // > SPI_stop -1 такт // -1 такт(переход)
SBIS SPSR, 7 // проверка флаг SPIF -1 такт(SPIF Сбрасывается при чтении SPSR)
RJMP while_0 // > while_ -1 такт // -1 такт(переход)
IN R22, SPDR // Чтение SPI -1 такт
STS FIFO+0, R22 // Запись SRAM -2 такт
SPI_stop: // SPI_stop
- VNS
- Говорящий с текстолитом
- Сообщения: 1627
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Spi интерфейс
Вам нужно передать два байта по SPI внешнему АЦП? Если так, то второй бай загружаете в регистр SPDR в прерывании по окончании передачи очередного байта…
Re: Spi интерфейс
Код: Выделить всё
// передаём первый байт
LDS R22, FIFO+0 // Чтение SRAM -2 такт
OUT SPDR, R22 // Запись SPI -1 такт
while_0: // while(!(SPSR & (1<<7)));
SBIC PINB, 2 // проверка SS = 0 -1 такт
RJMP SPI_stop // > SPI_stop -1 такт // -1 такт(переход)
SBIS SPSR, 7 // проверка флаг SPIF -1 такт(SPIF Сбрасывается при чтении SPSR)
RJMP while_0 // > while_ -1 такт // -1 такт(переход)
IN R22, SPDR // Чтение SPI -1 такт
STS FIFO+0, R22 // Запись SRAM -2 такт
// передаём второй байт
LDS R22, FIFO+1 // Чтение SRAM -2 такт
OUT SPDR, R22 // Запись SPI -1 такт
while_1: // while(!(SPSR & (1<<7)));
SBIC PINB, 2 // проверка SS = 0 -1 такт
RJMP SPI_stop // > SPI_stop -1 такт // -1 такт(переход)
SBIS SPSR, 7 // проверка флаг SPIF -1 такт(SPIF Сбрасывается при чтении SPSR)
RJMP while_1 // > while_ -1 такт // -1 такт(переход)
IN R22, SPDR // Чтение SPI -1 такт
STS FIFO+1, R22 // Запись SRAM -2 такт
SPI_stop: // SPI_stopRe: Spi интерфейс
а если тыщу байт? копи-пасте не сломается?
- Реклама
Re: Spi интерфейс
Как вариант, когда адрес SPSR>$1F
Код: Выделить всё
IND_OUT:
OUT SPDR,R20
WAIT_R20:
IN R16,SPSR
SBRS R16,SPIF
RJMP WAIT_R20
;*****
OUT SPDR,R21
WAIT_R21:
IN R16,SPSR
SBRS R16,SPIF
RJMP WAIT_R21
Re: Spi интерфейс
Все спасибо за ответы, буду пробовать.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Spi интерфейс
Код: Выделить всё
// В даташите на АЦП нужно узнать, какой байт отправляется первым, старший или младший
Init_Ext_ADC:
...
ldi r16, HIGH (SETT_EXT_ADC_VAL) // Отправка старшего байта значений настройки АЦП.
out SPDR, r16
Init_Ext_ADC_1:
in r16, SPSR
sbrs r16, SPIF
rjmp Init_Ext_ADC_1
ldi r16, LOW (SETT_EXT_ADC_VAL) // Отправка младшего байта значений настройки АЦП.
out SPDR, r16
Init_Ext_ADC_2:
in r16, SPSR
sbrs r16, SPIF
rjmp Init_Ext_ADC_2
...
Re: Spi интерфейс
В любом случае никто не запрещает программную реализацию SPI (или I2C) с любой длиной данных...



