22.01.2016, 14:26
|
#4591
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
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.
|
|
|
|
22.01.2016, 14:39
|
#4592
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Блин, ну я и придурок! Я думал, что "GPIOA_ODR" — это адрес. А это ж макрос, который разыменовывает адрес, чтобы присвоить ему значение!!!
Вот как заработало:
Код:
|
DMA1_CPAR2 = (uint32_t)&(GPIOA_ODR) |
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.01.2016, 14:54
|
#4593
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
eddy, сколько раз уже писали - читай https://kazus.ru/forums/showthread.php?t=107109 .
Ты со своими недолибами и так до ручки дошел...
Код:
|
(uint32_t)&GPIOA-›ODR; |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 22.01.2016 в 14:57.
|
|
|
|
22.01.2016, 15:11
|
#4594
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dosikus
|
недолибами
|
Отличная библиотека. В отличие от этих ваших идиотских SPL. Додумались — структуру сувать в определение регистров. Трындец!
Кстати, попробовал оба способа (таймер и ПДП) на 36МГц. Фигвам получается: ПДП всего-то ~6.25МГц выжимает, а таймер (из-за того, что обработчик прерывания дофига вычислений выполняет) вообще больше 1.1МГц не выдает.
Будем знать, если надо будет в параллельную шину шустро данные гнать: быстрей 6МГц можно и не рассчитывать!
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.01.2016, 15:16
|
#4595
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
В отличие от этих ваших идиотских SPL.
|
Не наших а ваших. ![Прикольно](images/smilies/icon_wink3.gif)
О латетности DMA читай ...
__________________
Осторожно , злой кот
|
|
|
|
22.01.2016, 15:31
|
#4596
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Будем знать, если надо будет в параллельную шину шустро данные гнать: быстрей 6МГц можно и не рассчитывать!
|
А кому легко? Это ты ещё обогнал сам себя. С другой стороны, если всё выплёвывать по максимуму, то откуда возьмётся время на подготовку следующей порции данных?
Сообщение от dosikus
|
О латетности DMA читай ...
|
100% !
|
|
|
|
22.01.2016, 15:47
|
#4597
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Я это для экранчиков делаю, т.к. у меня нет ни одного МК с FSMC, а хочется TFT запустить. Nokia5110, конечно, хорошо, но полноценный цветной сенсорный экран — намного лучше!
А там ведь объем информации здоровенный гнать надо при обновлении, вот и придумываю, как это упростить и ускорить (скажем, водишь стило по экрану, а следом шустро бежит курсор).
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.01.2016, 17:22
|
#4598
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Что-то я посчитал, и даже при разрешении 320*200 вы только выводить будете. Больше МК ничем заниматься не сможет.
Последний раз редактировалось SasaVitebsk; 22.01.2016 в 17:30.
|
|
|
|
22.01.2016, 17:28
|
#4599
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
SasaVitebsk, ну здесь же недавно перетирали .
Хотя нет, скорей на микрочип.сю . Ссылка на наш же ресурс - аппаратный контроллер.
__________________
Осторожно , злой кот
|
|
|
|
22.01.2016, 17:51
|
#4600
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от SasaVitebsk
|
Что-то я посчитал, и даже при разрешении 320*200 вы только выводить будете. Больше МК ничем заниматься не сможет.
|
А что считаем? И что должен делать МК? Разные задачи, разные и решения.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:11.
|
|