Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

STM32 I2C + DMA
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=12770
Страница 1 от 1

Автор:  tolstolob [ Вто Мар 11, 2014 12:24 am ]
Заглавие:  STM32 I2C + DMA

Е не можах да накарам I2C-то да работи с ДМА и това е. (Само с интеръпти си работи отлично). Става дума за master mode, за слейв имам един еепром.

Ето какво се случва:
0. Клоци имат всички.
1.1 Инизиализирам И2Ц-то - ОК.
1.2 Вдигам CR2->DMAEN на И2Ц-то, щото така пише по менюалите.
1.3 IRQ-та за ДМА и И2Ц: конфигурирани и разрешени.

2. Инициализирам си ДМА канал (+ TCIE интеръпти) и го пускам. Разрешавам event interrupts от И2Ц-то.
3. Започвам трансфер - START condition.
4. Интеръпт след START condition - OK. Зареждам слейв адреса.
5. Интеръпт след ADDR. Забранявам event interrupts от И2Ц-то - вече не ни трябват, щото минаваме на ДМА, уж. TxE флага се вижда, че е вдигнат, изчиствам ADDR интеръпта с четене на SR1 и SR2, обаче ДМА трансфери не започват. CNDTR регистъра си стои с първоначално заредената дължина за трансфер и не мърда. Аз наивно си мисля, че щом има TxE флаг, значи трябва трансфера да захапе, обаче - не.

Пробвах да местя инициализацията на ДМА-то къде ли не, не работи и това е.
Да не би да има някаква магия, дето съм изпуснал да приложа? (контролера е STM32L152VBT6).

Автор:  miro_atc [ Вто Мар 11, 2014 11:06 am ]
Заглавие:  Re: STM32 I2C + DMA

преди време имах проблем с нетръгващо ДМА... оказа че бях забравил flow контрола, демек дали ДМА-то е мастер или периферията прави заявки.
В твоя случай ако следваме логиката на ST на периферията трябва да й кажеш да прави заявки към ДМА-то, а то да е слейв...

Автор:  tolstolob [ Вто Мар 11, 2014 11:31 am ]
Заглавие:  Re: STM32 I2C + DMA

То точно това е целта на тоя бит DMAEN (в И2Ц-то) в комбинация с DIR бита в ДМА-то, но аз си ги сетвам както трябва.
Аз сега гледам какви ли не примери по темата и ми прави впечатление, че всички ползват отделни ДМА канали за Rx и Tx. И се питам защо, след като бъса е half-duplex? Опитвам се да ползвам само един ДМА канал за И2Ц канал, може в това да е проблема (но в момента нямам таргет да пробвам).

Автор:  Vesko [ Вто Мар 11, 2014 11:40 am ]
Заглавие:  Re: STM32 I2C + DMA

Поне при Ф2 ДМА канала не е въпрос на свободен избор. Имаш определен брой възможности за ползване...

Миро, по отношение на флоъ контрола СДИО-то не беше ли единствената различна периферия?

Автор:  miro_atc [ Вто Мар 11, 2014 11:47 am ]
Заглавие:  Re: STM32 I2C + DMA

Значи аз говоря за DMA_SxCR_PFCTRL флага, при теб вероятно е дефиниран по друг начин... аз ползвам конвенцията ПЕРИФЕРИЯ–РЕГИСТЪР–СТОЙНОСТ

Това е независимо от другите настройки. Проблемът е че това има едно описание, а както казва Веско комбинациите не са свободни.

В случая с тоя флаг се настройва ДМА-то да прави трансфер само при заявка от периферият. В обратния случай не би трябвало да се съобразява с периферията и да прави трансфер веднага като го разрешиш. Да, ама не. Поне при SDIO дето борих не правеше трансфери въпреки че е разрешен и всичко останало....

Автор:  tolstolob [ Вто Мар 11, 2014 12:10 pm ]
Заглавие:  Re: STM32 I2C + DMA

@Vesko, благодаря, това е проблема.

За форума:
Извод №0: Менюала не трябва да се чете избирателно :)
Извод №1: Не всеки ДМА канал може да се ползва с всяка периферия.
Извод №2: При работа с определена периферия, даден ДМА канал си има посока.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/