pav256 (17.12.2013 13:32, просмотров: 105) ответил йцукен на Как-то криво через ADC_CR2_ADON делать. А может, не останавливать ADC и DMA вообще? Пусть себе молотит постоянно и сыплет данные в круговой буфер. Часть данных можно просто игнорировать.
Согласен,и об этом уже писал, останавливать АЦП не есть гуд (сброс ADC_CR2_ADON), однако по другому у меня не получилось. Если есть варианты, буду благодарен. Проблема еще заключается в том, что непонятно как в произвольный момент времени определить положение указателя опрашиваемого АЦП канала? Сбрасывая ADC_CR2_ADON, я устанавливаю его на первый разрешенный канал, программируя DMA - определяю количество каналов и количество выборок по каждому каналу. При передаче заданного количества выборок АЦП не останавливается, более того устанавливается флаг переполнения (OVR), что приводит к игнорированию АЦП запросов от DMA. Хотя DMA после пересылки заданного количества выборок и не думает обращаться к АЦП! При этом в буфере (с начала) лежат выборки каналов в нужном количестве (А0(0), А1(0), А2(0), А3(0), А0(1), А1(1), А2(1), А3(1), А0(2),...) где А0-А3 - обрабатываемые каналы, (0)...(n) - номера выборок.
По поводу кругового буфера - решение так же не очень, все таки DMA занимает шину и сам контроллер DMA так же занимается другими пересылками. Хотя с точки зрения функционирования все будет работать.