-
- вдруг пригодится: некоторые экспериментально полученные данные по АЦП koyodza(38 знак., 17.10.2012 19:23, ссылка, ссылка)
- Спасибо, это интересно. - KT(17.10.2012 20:03)
- АЦП может ничего не знать о существовании DMA, у него свои источники запуска. А DMA лучше запускать по готовности данных АЦП, а не по таймеру. У самого АЦП есть режимы с запуском, и циклического преобразования koyodza(113 знак., 16.10.2012 20:25)
- Неверная постановка вопроса. DMA не запускает АЦП, а только перекладывает результаты преобразований в память. 'Следующий скан каналов АЦП' произойдёт тогда, когда выполнится условие запуска АЦП. Например, если АЦП запускается по TIM3_TRGO, йцукен(101 знак., 16.10.2012 20:11, )
- В том то и вопрос, непонятно из примера кто именно из перифирии инициирует запуск нового преобразования. Может сам АЦП? - KT(16.10.2012 21:10)
- покажите кусок с инициализацией АЦП, а лучше весь пример - koyodza(16.10.2012 21:42)
- Сорри, наверное так KT(5272 знак., 16.10.2012 22:30 - 22:43)koyodza
- насколько я понимаю, тут АЦП сконфигурирован в continuous mode, он молотит всё время с максимальной скоростью, какой может. Никакой синхронизации тут нет. DMA активируется по готовности данных и перекладывает из АЦП в ОЗУ - koyodza(16.10.2012 22:26)
- Ну да, АЦП молотит как бешенный, три канала на 48Мгц окучивает за 17 мкс, (большую часть времени занимает семплирование). Попробую завтра прикрутить к таймеру. Интересно, если таймер настроен на генерацию ШИМ, может ли он и АЦП запускать? (по KT(14 знак., 16.10.2012 22:48)
- это очень медленно на самом деле. Да, таймер может запускать АЦП, даже если он делает что-то другое koyodza(98 знак., 16.10.2012 23:57)
- Чего то не получается реализовать запуск АЦП по таймеру совмесно с работой DMA. Когда ставлю в настройках АЦП ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConv_T15_TRGO; период опроса АЦП все равно остается равным 17 мкс, хотя KT(2818 знак., 17.10.2012 12:16)
- чтобы был запуск от чего-то, нужно для начала ADC_ContinuousConvMode = DISABLE сделать. В самом таймере, возможно, TRGO нужно включать, чтобы он происходил по TUV, тут смотреть надо - koyodza(17.10.2012 12:26)
- Спасибо, включение триггера помогло - TIM_SelectOutputTrigger(TIM15, TIM_TRGOSource_Update); - KT(17.10.2012 12:50 - 13:10)
- Для полного щастья еще один вопрос: флаг DMA1_FLAG_TC1 может быть источником прерывания? - KT(17.10.2012 14:22)
- все флаги DMA (их всего 3 у F10х) могут вызывать прерывание. Но для каждого канала одно общее, внутри нужно разбирать флаги и сбрасывать - koyodza(17.10.2012 14:28)
- Пытаюсь запустить прерывание, пока не работает, вот код KT(1499 знак., 17.10.2012 18:31)
- нет только прерываний или заполнение буфера пересылками DMA тоже не происходит? koyodza(301 знак., 17.10.2012 19:19)
- Похоже у меня траблы с настройкой проекта. Обработчик прерывания линкером не включается в проэкт. По крайней мере дизасемблером я не вижу его в памяти. Когда то игрался с самым первым дискавери и наступал на эти грабли. Как линкер знает что KT(59 знак., 17.10.2012 20:51)
- его имя должно быть в startup_xxx.s - koyodza(17.10.2012 21:40)
- Спасибо! Траблы были именно в осутствии стартапа в проекте. А сам стартап потребовал еще два файла system_stm32f0xx.h и system_stm32f0xx.c - KT(18.10.2012 11:44)
- Какой-то у них стартап замороченный. SciFi(1003 знак., 18.10.2012 11:50)
- Стартап потребовал функцию SystemInit, а она как раз в файле CMSIS-са system_stm32f0xx.c - KT(18.10.2012 12:34)
- Какой-то у них стартап замороченный. SciFi(1003 знак., 18.10.2012 11:50)
- Спасибо! Траблы были именно в осутствии стартапа в проекте. А сам стартап потребовал еще два файла system_stm32f0xx.h и system_stm32f0xx.c - KT(18.10.2012 11:44)
- его имя должно быть в startup_xxx.s - koyodza(17.10.2012 21:40)
- Вот KT(1279 знак., 17.10.2012 20:08)
- Если в основной цикл вставить такой фрагмент KT(403 знак., 17.10.2012 20:19)
- Похоже у меня траблы с настройкой проекта. Обработчик прерывания линкером не включается в проэкт. По крайней мере дизасемблером я не вижу его в памяти. Когда то игрался с самым первым дискавери и наступал на эти грабли. Как линкер знает что KT(59 знак., 17.10.2012 20:51)
- нет только прерываний или заполнение буфера пересылками DMA тоже не происходит? koyodza(301 знак., 17.10.2012 19:19)
- Пытаюсь запустить прерывание, пока не работает, вот код KT(1499 знак., 17.10.2012 18:31)
- все флаги DMA (их всего 3 у F10х) могут вызывать прерывание. Но для каждого канала одно общее, внутри нужно разбирать флаги и сбрасывать - koyodza(17.10.2012 14:28)
- Для полного щастья еще один вопрос: флаг DMA1_FLAG_TC1 может быть источником прерывания? - KT(17.10.2012 14:22)
- Спасибо, включение триггера помогло - TIM_SelectOutputTrigger(TIM15, TIM_TRGOSource_Update); - KT(17.10.2012 12:50 - 13:10)
- чтобы был запуск от чего-то, нужно для начала ADC_ContinuousConvMode = DISABLE сделать. В самом таймере, возможно, TRGO нужно включать, чтобы он происходил по TUV, тут смотреть надо - koyodza(17.10.2012 12:26)
- Так время семплирования большое, 71.5 цикла. Думаю если его уменьшить, и общее время опроса каналов резко уменьшится. - KT(17.10.2012 09:43)
- Уменьшил время семплирования до 1.5 цикла, три канала опрашиваются за 3 мкс. - KT(17.10.2012 10:01 - 10:27)
- Чего то не получается реализовать запуск АЦП по таймеру совмесно с работой DMA. Когда ставлю в настройках АЦП ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConv_T15_TRGO; период опроса АЦП все равно остается равным 17 мкс, хотя KT(2818 знак., 17.10.2012 12:16)
- это очень медленно на самом деле. Да, таймер может запускать АЦП, даже если он делает что-то другое koyodza(98 знак., 16.10.2012 23:57)
- Ну да, АЦП молотит как бешенный, три канала на 48Мгц окучивает за 17 мкс, (большую часть времени занимает семплирование). Попробую завтра прикрутить к таймеру. Интересно, если таймер настроен на генерацию ШИМ, может ли он и АЦП запускать? (по KT(14 знак., 16.10.2012 22:48)
- насколько я понимаю, тут АЦП сконфигурирован в continuous mode, он молотит всё время с максимальной скоростью, какой может. Никакой синхронизации тут нет. DMA активируется по готовности данных и перекладывает из АЦП в ОЗУ - koyodza(16.10.2012 22:26)
- Сорри, наверное так KT(5272 знак., 16.10.2012 22:30 - 22:43)koyodza
- покажите кусок с инициализацией АЦП, а лучше весь пример - koyodza(16.10.2012 21:42)
- В том то и вопрос, непонятно из примера кто именно из перифирии инициирует запуск нового преобразования. Может сам АЦП? - KT(16.10.2012 21:10)
- Нашел как называется флаг: DMA transfer complete flag - KT(16.10.2012 18:39)
- вдруг пригодится: некоторые экспериментально полученные данные по АЦП koyodza(38 знак., 17.10.2012 19:23, ссылка, ссылка)