Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Изучаем STM32 Cortex M3

Непрочитано 22.01.2016, 14:26  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
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 в данном случае!

Что за нафиг такой?
Реклама:
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!

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

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

Вот как заработало:
Код:
DMA1_CPAR2 = (uint32_t)&(GPIOA_ODR)
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 22.01.2016, 14:54  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

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

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

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

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

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

Будем знать, если надо будет в параллельную шину шустро данные гнать: быстрей 6МГц можно и не рассчитывать!
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 22.01.2016, 15:16  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

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

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

Я это для экранчиков делаю, т.к. у меня нет ни одного МК с FSMC, а хочется TFT запустить. Nokia5110, конечно, хорошо, но полноценный цветной сенсорный экран — намного лучше!
А там ведь объем информации здоровенный гнать надо при обновлении, вот и придумываю, как это упростить и ускорить (скажем, водишь стило по экрану, а следом шустро бежит курсор).
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 22.01.2016, 17:22  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 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  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

SasaVitebsk, ну здесь же недавно перетирали .
Хотя нет, скорей на микрочип.сю . Ссылка на наш же ресурс - аппаратный контроллер.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 22.01.2016, 17:51  
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, время: 15:23.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.