Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 09.01.2013, 17:07  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от nerozero Посмотреть сообщение
Не запускается DMA для SPI, подскажите что я тут криво делаю?
Каюсь, виновен, читал не тот даташит! DMA 4-канал не может работать с SPI1 - TX.
Реклама:
nerozero вне форума  
Непрочитано 10.01.2013, 01:59  
polyname
Прописка
 
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
polyname на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

что нужно настроить для приема блока по SPI с DMA ?
канал TX тоже нужно стартовать (то есть для приема нужно передавать 0xFF) ?
стартую только RX - принимаю одни нули.
polyname вне форума  
Непрочитано 10.01.2013, 02:06  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от polyname Посмотреть сообщение
стартую только RX - принимаю одни нули.
1. Проверьте канал ДМА, работает ли он с RX линией вашего SPI
2. проверьте настройки SPI, режим работы

если без дма принимается правильно - тогда канал ДМА выбран не верно. В дата шите есть таблица,сверьтесь с ней.
Для моего STM32F100:
Нажмите на изображение для увеличения
Название: DMA-MAP.png
Просмотров: 118
Размер:	18.8 Кб
ID:	42124
nerozero вне форума  
Непрочитано 10.01.2013, 02:27  
polyname
Прописка
 
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
polyname на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Цитата:
если без дма принимается правильно - тогда канал ДМА выбран не верно
да, работает и с программным, и с аппаратным SPI. Канал вроде правильный - 2й на прием, 3й - на передачу.

Наконец удалось правильно принять 1 блок данных - запускаю оба - RX и TX.
TX настроил на передачу 0xFF без инкремента памяти.

Но передача/прием следующих блоков виснет.

настройка: http://codetidy.com/4348/
и передача/прием: http://codetidy.com/4349/

Последний раз редактировалось polyname; 10.01.2013 в 11:45.
polyname вне форума  
Непрочитано 10.01.2013, 09:36  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

polyname, какая длина вашего буфера приемника?
nerozero вне форума  
Непрочитано 10.01.2013, 11:44  
polyname
Прописка
 
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
polyname на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

16 или 512 байт (зависит от команды чтения SD)
polyname вне форума  
Непрочитано 10.01.2013, 11:49  
polyname
Прописка
 
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
polyname на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

наконец удалось принять несколько блоков, если в конце приема дать команды:
Код:
DMA_Cmd(SPI_STM32_DMA_TX, DISABLE);
DMA_Cmd(SPI_STM32_DMA_RX, DISABLE);
но все равно периодически виснет.
polyname вне форума  
Непрочитано 10.01.2013, 15:30  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Возможно вы не обновляете CNDTR (количество данных) регистр DMA канала. После приема / передачи его значение уменьшается, до тех пор пока не обнулится. Прочитайте Datasheet контроллера DMA.

В моем случае я делаю так, на отправку данных:
Код:
void DMA1_Channel3_IRQHandler()
{
	//Trasmit complete
	if(DMA1-›ISR & DMA_ISR_TCIF3)
	{
		DMA_ClearFlag(DMA1_FLAG_TC3);
		// ~~~ CUT ~~~ 
		DMA_Cmd(DTA_SPI_DMA_Tx_Channel,DISABLE); // Обратите внимание, для обновления регистра CNDTR  канал ДМА должен быть отключен!
		DTA_SPI_DMA_Tx_Channel-›CNDTR = DTA_BUFF_SIZE;
		DMA_Cmd(DTA_SPI_DMA_Tx_Channel,ENABLE);
		 // ~~~ CUT ~~~ 
	}

	//Transmit half buffer - complete
	if(DMA1-›ISR & DMA_ISR_HTIF3)
	{
		DMA_ClearFlag(DMA1_FLAG_HT3);
	}

	//Transmit error
	if(DMA1-›ISR & DMA_ISR_TEIF3)
	{
		DMA_ClearFlag(DMA1_FLAG_TE3);
	}
}
nerozero вне форума  
Непрочитано 10.01.2013, 15:42  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Кстати вот пример работы с SD картой через SDIO + DMA
SD_Card.rar
Автор AVRman
пришел с примерами от HY-Mini
nerozero вне форума  
Непрочитано 10.01.2013, 15:42  
polyname
Прописка
 
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
polyname на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Цитата:
Возможно вы не обновляете CNDTR (количество данных)
обновляю (DMA_BufferSize), в конце передачи/приема отключаю оба канала:
Код:
	spi_dma_tx.DMA_MemoryBaseAddr = (U32)&spi_dma_tx_FF;
	spi_dma_tx.DMA_BufferSize     = len;
	DMA_Init(SPI_STM32_DMA_TX, &spi_dma_tx);

	spi_dma_rx.DMA_MemoryBaseAddr = (U32)buf;
	spi_dma_rx.DMA_BufferSize     = len;
	DMA_Init(SPI_STM32_DMA_RX, &spi_dma_rx);
	DMA_ClearFlag(SPI_STM32_DMA_RX_FLAG);

	DMA_Cmd(SPI_STM32_DMA_TX, ENABLE);
	DMA_Cmd(SPI_STM32_DMA_RX, ENABLE);
	while(DMA_GetFlagStatus(SPI_STM32_DMA_RX_FLAG) == RESET);
	DMA_Cmd(SPI_STM32_DMA_TX, DISABLE);
	DMA_Cmd(SPI_STM32_DMA_RX, DISABLE);
	while (SPI_I2S_GetFlagStatus(SPI_STM32, SPI_I2S_FLAG_BSY) == SET);
	delay_us(10);
Добавил проверку флага SPI_I2S_FLAG_BSY и задержку - все равно периодически виснет.
При увеличении SPI_BaudRatePrescaler - реже, но тогда в DMA нет смысла если программный опрос работает даже делителем 2х - быстрее чем с ДМА.

Последний раз редактировалось polyname; 10.01.2013 в 15:49.
polyname вне форума  
 

Закладки
Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot