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

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

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

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

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

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


Ответ
Опции темы
Непрочитано 22.01.2016, 14:26   #4591
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Для проверки сделал вот так:
Код:
#include "dmagpio.h"
#include "user_proto.h"

int transfer_complete = 0, cntr;
static uint16_t gpiobuff[128] = {0};
static uint32_t len = 0, curidx = 0;

void dmagpio_init(){
	// init TIM2 & DMA1ch2 (TIM2UP)
	rcc_periph_clock_enable(RCC_TIM2);
	rcc_periph_clock_enable(RCC_DMA1);
	timer_reset(TIM2);
	// timer have frequency of 1MHz
	timer_set_mode(TIM2, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP);
	// 72MHz div 18 = 4MHz
	TIM2_PSC = 17; // prescaler is (div - 1)
	TIM2_ARR = 39; // 100kHz
	TIM2_DIER = TIM_DIER_UDE | TIM_DIER_UIE;
nvic_enable_irq(NVIC_TIM2_IRQ);

	dma_channel_reset(DMA1, DMA_CHANNEL2);
	// mem2mem, medium prio, 8bits, memory increment, read from mem, transfer complete en
	//DMA1_CCR2 = DMA_CCR_MEM2MEM | DMA_CCR_PL_MEDIUM | DMA_CCR_MSIZE_16BIT |
	DMA1_CCR2 = DMA_CCR_PL_MEDIUM | DMA_CCR_MSIZE_16BIT |
		DMA_CCR_PSIZE_16BIT | DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE | DMA_CCR_TEIE ;
	nvic_enable_irq(NVIC_DMA1_CHANNEL2_IRQ);
	// target address:
	DMA1_CPAR2 = DMAGPIO_TARGADDR;
	DMA1_CMAR2 = (uint32_t) gpiobuff;
}

void tim2_isr(){
	if(TIM2_SR & TIM_SR_UIF){ // update interrupt
		++cntr;
		/*gpio_toggle(GPIOA, GPIO0);
		if(++curidx ›= len){
			TIM2_CR1 &= ~TIM_CR1_CEN;
			transfer_complete = 1;
		}*/
		TIM2_SR = 0;
	}
}


void dmagpio_transfer(uint8_t *databuf, uint32_t length){
	while(DMA1_CCR2 & DMA_CCR_EN);
	transfer_complete = 0;
	DMA1_IFCR = 0xff00; // clear all flags for ch2
	// memory address
	//DMA1_CMAR2 = (uint32_t) databuf;
	// buffer length
	DMA1_CPAR2 = DMAGPIO_TARGADDR;
	DMA1_CMAR2 = (uint32_t) gpiobuff;
	DMA1_CNDTR2 = length;
	uint32_t i;
	for(i = 0; i ‹ length; ++i) gpiobuff[i] = databuf[i];
	len = length;
	curidx = 0;
	cntr = 0;
	TIM2_CR1 |= TIM_CR1_CEN; // run timer
	DMA1_CCR2 |= DMA_CCR_EN;
}

void dma1_channel2_isr(){
	if(DMA1_ISR & DMA_ISR_TCIF2){
		transfer_complete = 1;
		// stop timer & turn off DMA
		TIM2_CR1 &= ~TIM_CR1_CEN;
		DMA1_CCR2 &= ~DMA_CCR_EN;
		DMA1_IFCR = DMA_IFCR_CTCIF2; // clear flag
	}else if(DMA1_ISR & DMA_ISR_TEIF2){
		P("Error\n");
		DMA1_IFCR = DMA_IFCR_CTEIF2;
		TIM2_CR1 &= ~TIM_CR1_CEN;
		DMA1_CCR2 &= ~DMA_CCR_EN;
	}
}
Т.е. в прерывании таймера инкрементируется счетчик, а данные передает ПДП. После того, как флаг transfer_complete устанавливается, я вывожу в терминал значение cntr. И оно совпадает с количеством переданных байт!
Т.е. таймер тикает правильно, пинает ПДП правильно, но на пинах пустота!!!
Вот как такое может быть?

Проверил с MEM2MEM - ПДП завершается за 0-1 тик таймера, т.е. явно нельзя указывать MEM2MEM в данном случае!

Что за нафиг такой?
Реклама:
__________________
Союз Советских Социалистических Округов Северной Америки

Последний раз редактировалось eddy; 22.01.2016 в 14:29.
eddy вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 14:39   #4592
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Блин, ну я и придурок! Я думал, что "GPIOA_ODR" — это адрес. А это ж макрос, который разыменовывает адрес, чтобы присвоить ему значение!!!

Вот как заработало:
Код:
DMA1_CPAR2 = (uint32_t)&(GPIOA_ODR)
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 14:54   #4593
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

eddy, сколько раз уже писали - читай https://kazus.ru/forums/showthread.php?t=107109 .
Ты со своими недолибами и так до ручки дошел...

Код:
(uint32_t)&GPIOA-›ODR;
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 22.01.2016 в 14:57.
dosikus вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 15:11   #4594
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от dosikus Посмотреть сообщение
недолибами
Отличная библиотека. В отличие от этих ваших идиотских SPL. Додумались — структуру сувать в определение регистров. Трындец!

Кстати, попробовал оба способа (таймер и ПДП) на 36МГц. Фигвам получается: ПДП всего-то ~6.25МГц выжимает, а таймер (из-за того, что обработчик прерывания дофига вычислений выполняет) вообще больше 1.1МГц не выдает.

Будем знать, если надо будет в параллельную шину шустро данные гнать: быстрей 6МГц можно и не рассчитывать!
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 15:16   #4595
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от eddy Посмотреть сообщение
В отличие от этих ваших идиотских SPL.
Не наших а ваших.
О латетности DMA читай ...
__________________
Осторожно , злой кот
dosikus вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 15:31   #4596
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от eddy Посмотреть сообщение
Будем знать, если надо будет в параллельную шину шустро данные гнать: быстрей 6МГц можно и не рассчитывать!
А кому легко? Это ты ещё обогнал сам себя. С другой стороны, если всё выплёвывать по максимуму, то откуда возьмётся время на подготовку следующей порции данных?
Сообщение от dosikus Посмотреть сообщение
О латетности DMA читай ...
100% !
STM32F0 вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 15:47   #4597
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Я это для экранчиков делаю, т.к. у меня нет ни одного МК с FSMC, а хочется TFT запустить. Nokia5110, конечно, хорошо, но полноценный цветной сенсорный экран — намного лучше!
А там ведь объем информации здоровенный гнать надо при обновлении, вот и придумываю, как это упростить и ускорить (скажем, водишь стило по экрану, а следом шустро бежит курсор).
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 17:22   #4598
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Что-то я посчитал, и даже при разрешении 320*200 вы только выводить будете. Больше МК ничем заниматься не сможет.

Последний раз редактировалось SasaVitebsk; 22.01.2016 в 17:30.
SasaVitebsk вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 17:28   #4599
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

SasaVitebsk, ну здесь же недавно перетирали .
Хотя нет, скорей на микрочип.сю . Ссылка на наш же ресурс - аппаратный контроллер.
__________________
Осторожно , злой кот
dosikus вне форума   Ответить с цитированием
Непрочитано 22.01.2016, 17:51   #4600
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от SasaVitebsk Посмотреть сообщение
Что-то я посчитал, и даже при разрешении 320*200 вы только выводить будете. Больше МК ничем заниматься не сможет.
А что считаем? И что должен делать МК? Разные задачи, разные и решения.
STM32F0 вне форума   Ответить с цитированием
Ответ

Закладки


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

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, время: 23:11.


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