|
|
  |
XMEGA DMA+SPI?, требуется помощь |
|
|
|
Sep 15 2010, 19:23
|
Участник

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

|
Стал осваивать XMEGу. очень понравилось, что были исправлены недочеты (например в таймерах). Особенно порадовался новой схеме смены частоты тактирования ядра. Но уперся в DMA. необходимо сделать очень быстрый SPI-master : частота CLK SPI 16 МГц, 4 посылки по 24 бита за минимальное время. потратил уже несколько дней, но прогресса не вижу, хотя 1 байт по SPI на 16 МГц гоняю уже давно. Если кто настраивал DMA для SPI, поделитесь секретом. EWENT system нужно задействовать?
|
|
|
|
|
Sep 16 2010, 04:37
|
Участник

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

|
Цитата(V_G @ Sep 16 2010, 02:22)  Использую UART в режиме SPI + DMA. Что-то не понравился мне тогда чистый SPI (возможно, трудно поженить его было с DMA). И первые инженерные образцы, по моему, некорректно работали, когда делитель скорости выставлял по минимуму (0). Пришлось ставить 1. Или наоборот, уже не помню, т.к. серийные образцы этого глюка вроде не имеют. а не могли бы Вы привести код по настройке DMA?
|
|
|
|
|
Sep 16 2010, 05:58
|

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

|
Народ, вы даташиты вообще читаете? Цитата DMA support on the SPI module is only available in Slave mode.
|
|
|
|
|
Sep 16 2010, 11:53
|

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

|
Цитата(xelax @ Sep 16 2010, 16:58)  Народ, вы даташиты вообще читаете? Мало того, что мы даташиты читаем, мы еще и на практике что-то программируем. Потому и написал, что использую не чистый SPI, а UART в SPI режиме. А это две небольшие разницы. Даже ножки для SPI почему-то Атмел использует хоть и с теми же номерами и для UART-SPI, но перемешал их функции. 2 pimenПонятно, что 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
|
|
|
|
|
Sep 16 2010, 14:23
|

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

|
Цитата(V_G @ Sep 16 2010, 15:53)  Мало того, что мы даташиты читаем, мы еще и на практике что-то программируем. Знание через руки, тоже знание. А ещё предлагаю перечитать Вам Сообщение #2 Тренеруйте память.
|
|
|
|
|
Sep 16 2010, 18:58
|
Участник

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

|
2xelax проморгал ( попробовал через USART SPI mode, стало получаться спасибо за помощь
|
|
|
|
|
Sep 17 2010, 00:12
|

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

|
Цитата(xelax @ Sep 17 2010, 01:23)  Знание через руки, тоже знание. А ещё предлагаю перечитать Вам Сообщение #2 Тренеруйте память. Никак не могу понять, что же я забыл из своего же сообщения #2, видать, совсем отупел... И через руки это знание тоже пропускал во вторую очередь, сначала все-таки изучил даташит, и сразу предпочел USART-SPI + DMA. И было это почти два года назад.
|
|
|
|
|
Sep 27 2010, 07:09
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Цитата(V_G @ Sep 16 2010, 17:53)  Понятно, что DMA по-разному работает при передаче и при приеме (при приеме сложнее). Если кто то настраивал USART в режиме SPI, подскажите, как настраивать DMA на прием? С передачей проблем не возникло, а вот с приемом что то подзастрял... При источнике события DMA_CH_TRIGSRC_USARTD1_RXC и настройке DMA канала на прием трансфер не стартует. На линии SCK клока нет.
|
|
|
|
|
Sep 27 2010, 12:19
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Цитата(V_G @ Sep 27 2010, 16:39)  SCK обязан вырабатывать мастер. В режиме приема я использую прерывание по DRE для выдачи произвольного (мне нравится 0xAA) байта в SPI и выдачи сигнала тактирования, а также для сброса чипселекта по окончании DMA Я правильно понимаю, что для работы ДМА на прием, нужно разрешать ещё и прерывание по передатчику и в его обработчике после передачи каждого байта записывать данные в буфер передатчика - для инициирования процесса передачи и, соответственно, тактирования? если так - то какое то это кривое "ДМА".
|
|
|
|
|
Sep 28 2010, 03:46
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Цитата(V_G @ Sep 27 2010, 18:35)  А вы с SPI без DMA не работали? То же самое, при приеме нужны холостые передачи. Я глубоко не вдавался, может, на холостую передачу можно еще один DMA задействовать. У меня просто свободных нет. Хотя согласен, удобней было бы иметь такую функцию с автоматическим каким-то тактированием. С другой стороны, вспомним, что мы и так используем "левый" SPI из UART, а чистый SPI вообще с DMA не дружит. Может, какие-нить крутые армы-кортексы умеют делать SPI-DMA без каких-либо усилий со стороны программера? ну конечно работал, что за вопрос однако ж хотелось бы, чтоб ДМА само перегружало буфер передатчика при настройке на прием... да, я так и сделал изначально - использовал при приеме доп. канал дма для перезагрузки содержимого передающего буфера, чтобы инициировался процесс обмена. но, имхо, это довольно криво.. потому и сомневаюсь.. может есть какой то другой способ.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|