| Микроконтролери и електроника 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/ |
|