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

 
 
> XMEGA DMA+SPI?, требуется помощь
pimen
сообщение Sep 15 2010, 19:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846



Стал осваивать XMEGу. очень понравилось, что были исправлены недочеты (например в таймерах).
Особенно порадовался новой схеме смены частоты тактирования ядра.
Но уперся в DMA.
необходимо сделать очень быстрый SPI-master : частота CLK SPI 16 МГц, 4 посылки по 24 бита за минимальное время.
потратил уже несколько дней, но прогресса не вижу, хотя 1 байт по SPI на 16 МГц гоняю уже давно.
Если кто настраивал DMA для SPI, поделитесь секретом.
EWENT system нужно задействовать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
xelax
сообщение Sep 16 2010, 05:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Народ, вы даташиты вообще читаете?

Цитата
DMA support on the SPI module is only available in Slave mode.
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 16 2010, 11:53
Сообщение #3


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(xelax @ Sep 16 2010, 16:58) *
Народ, вы даташиты вообще читаете?

Мало того, что мы даташиты читаем, мы еще и на практике что-то программируем. Потому и написал, что использую не чистый SPI, а UART в SPI режиме. А это две небольшие разницы. Даже ножки для SPI почему-то Атмел использует хоть и с теми же номерами и для UART-SPI, но перемешал их функции.

2pimen
Понятно, что DMA по-разному работает при передаче и при приеме (при приеме сложнее). Ниже код для передачи. Работаю на ассемблере, не обессудьте

CODE
.equ DMA_SPI_TxADDRCTRL= DMA_CH_SRCRELOAD_gm|DMA_CH_SRCDIR0_bm|DMA_CH_DESTRELOAD_gm
.equ DMA_SPI_RxADDRCTRL= DMA_CH_DESTRELOAD_gm|DMA_CH_DESTDIR0_bm
.equ DMA_SPI_TxTRIGSRC = DMA_CH_TRIGSRC_USARTD1_DRE_gc
.equ DMA_SPI_RxTRIGSRC = DMA_CH_TRIGSRC_USARTD1_RXC_gc

SetupDMA0Tx:
LDI r16,DMA_SPI_TxADDRCTRL
STS DMA_CH0_ADDRCTRL,r16
LDI r16,DMA_SPI_TxTRIGSRC
STS DMA_CH0_TRIGSRC,r16
RET

StartDMASyntez: ;запуск передачи 3 байт в синтезатор частот из SPI_TxBuffer
CBI PORTC,ENS
StartDMA_Tx3bytes:
LDI r16,3
StartDMA_TxNbytes:
STS DMA_CH0_TRFCNT,r16
StartDMASPI_TX:
CLR r16
STS DMA_CH0_TRFCNT+1,r16
LDI r16,low(SPI_TxBuffer)
STS DMA_CH0_SRCADDR0,r16
LDI r16,high(SPI_TxBuffer)
STS DMA_CH0_SRCADDR1,r16
CLR r16
STS DMA_CH0_SRCADDR2,r16
LDI r16,low(USARTD1_DATA)
STS DMA_CH0_DESTADDR0,r16
LDI r16,high(USARTD1_DATA)
STS DMA_CH0_DESTADDR1,r16
CLR r16
STS DMA_CH0_DESTADDR2,r16
StartDMASPI:
RCALL EnaSPI_DMA_Ints
LDI r16,Start_DMA
STS DMA_CH0_CTRLA,r16
SEI
RET
Go to the top of the page
 
+Quote Post



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

 


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


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