jcxz 235 31 июля, 2023 Опубликовано 31 июля, 2023 · Жалоба 35 минут назад, Vladimir_T сказал: Отсутствие опыта работы. с ПДП. Если не пытаться его приобрести, то он сам по себе никогда не появится. 2 часа назад, Arlleex сказал: Тогда только выбирать нормальный МК, умеющий 90% из этого аппаратно)) XMC4xxx умеет 200% Какой смысл не использовать его для такой задачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladimir_T 1 31 июля, 2023 Опубликовано 31 июля, 2023 · Жалоба 7 minutes ago, jcxz said: Не понимаю: Зачем генерить 2 прерывания от этих событий если они всегда идут вместе? Прерывание лучше генерить только от последнего, вычитывая в ISR оба. Вы правы, есть вариант с обработкой только одного ADC1 - ведущего, но для большей пунктуальности привел вариант для обработки обоих АЦП. Но оба варианта по времени джиттера - равнозначны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladimir_T 1 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба On 7/31/2023 at 2:02 PM, Arlleex said: Подключите его к +3.3 В и будете наблюдать "иголки" реальных семплирований. Проверил на "иголках", по вашей методике, конечно, джиттер не обнаружен. Теперь я уверен в обеспечении временных диаграмм. On 7/31/2023 at 2:30 PM, jcxz said: XMC4xxx умеет 200% Какой смысл не использовать его для такой задачи? XMC4xxx - хороший и развитый процессор. Часто используется элементная база из предыдущих проектов - для унификации и стандартизации. Благодарю Всех за помощь и ценные советы. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 3 августа, 2023 Опубликовано 3 августа, 2023 · Жалоба 20 часов назад, Vladimir_T сказал: Теперь я уверен в обеспечении временных диаграмм. Дело осталось за малым - доверить чтение регистра данных АЦП в память DMA-контроллеру и занять CPU действительно важными делами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladimir_T 1 8 августа, 2023 Опубликовано 8 августа, 2023 · Жалоба Здравствуйте, уважаемые коллеги, прошу подсказать где моя ошибка. Создал две регулярные группы, по единственному каналу в каждой, каждая группа работает на свой АЦП. Сконфигурировал АЦП1 и АЦП2 в Dual Mode, с тем, чтобы результат преобразования из общего регистра CDR или регистров данных DR обоих АЦП через ПДП передавать в память. По окончании передачи блока по прерыванию от DMA_LISR_TCIF0, формируется флаг готовности данных для дальнейшей расчетной задачи. При данных настройках данные в памяти переносятся только один раз. Если разрешаю прерывания по флагам EOC в АЦП, то прерывание отрабатывается также один раз. В чем тут дело? До этого использовал инжекционные группы, и все получалось, а с регулярными - не идет. /********************************************************************* void ADC_DMA_Init (void) *********************************************************************/ void ADC_DMA_Init(void) { SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN); // DMA controller clock enable HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0); // DMA interrupt init */ HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); // DMA2_Stream0_IRQn interrupt configuration HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0); // DMA2_Stream2_IRQn interrupt configuration HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); DMA2_Stream0->PAR = (uint32_t)&(ADC1-> DR); // DMA stream x peripheral address register DMA2_Stream0->NDTR = 256; // DMA stream x number of data register DMA2_Stream0->M0AR = (uint32_t)&ADC_FA; // ADC_FA.Buff [0] DMA2_Stream0-> CR = 0; // Clear CR DMA2_Stream0-> CR = DMA_SxCR_MINC | DMA_SxCR_TCIE | DMA_SxCR_MSIZE_0 | DMA_SxCR_PSIZE_0 | DMA_SxCR_PL | DMA_SxCR_EN; // Inc Mem, 16bit | DMA_SxCR_TEIE DMA2_Stream2->PAR = (uint32_t)&(ADC2-> DR); /*< DMA stream x peripheral address register */ DMA2_Stream2->NDTR = 256; /*!< DMA stream x number of data register */ DMA2_Stream2->M0AR = (uint32_t)&ADC_FA + 512; DMA2_Stream2-> CR = 0; // Clear CR DMA2_Stream2-> CR = DMA_SxCR_CHSEL_0 | DMA_SxCR_MINC | DMA_SxCR_TCIE | DMA_SxCR_MSIZE_0 | DMA_SxCR_PSIZE_0 | DMA_SxCR_PL | DMA_SxCR_EN; // Inc Mem, 16bit | DMA_SxCR_TEIE } // ADC_DMA_Init(void) /********************************************************************* void Daul_ADC_DMA_Init(void) *********************************************************************/ void Daul_ADC_DMA_Init(void) { RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // разрешение тактирования АЦП 1 RCC->APB2ENR |= RCC_APB2ENR_ADC2EN; // разрешение тактирования АЦП 2 NVIC_ADC_Init(); // Инициализация вектора прерываний NVIC ADC1->CR1 = 0; // Сброс в управляющих регистрах ADC1->CR2 = 0; ADC2->CR1 = 0; ADC2->CR2 = 0; ADC1->SMPR2 = 0; // время выборки 3 цикла ADC_SAMPLETIME_3CYCLES ADC2->SMPR2 = 0; // время выборки 3 цикла ADC_SAMPLETIME_3CYCLES ADC1->SQR1 = 0x00000000; //0b0000000000000100000000000000000; // ADC1->SQR3 = 0x00000002; //0b00000000000000000001100000000000; // канал 2 посл. рег. каналов АЦП1 ADC2->SQR3 = 0x00000003; //0b00000000000001000000000000000000; // канал 3 посл. рег. каналов АЦП2 ADC1->CR2 = ADC_CR2_EXTEN_0 | ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_3 | ADC_CR2_CONT; // источник запуска Timer 2 TRGO ADC2->CR2 = ADC_CR2_EXTEN_0 | ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_3 | ADC_CR2_CONT; // источник запуска Timer 2 TRGO ADC123_COMMON->CCR = 0; // Очистка битов режимов ADC123_COMMON->CCR |= ADC_CCR_MULTI_1 | ADC_CCR_MULTI_2 | ADC_CCR_DMA_1; // Dual Mode/ Режим совместной работы, одновременное преобразование 2-х регулярных каналов (00110) // ADC1->CR1 |= ADC_CR1_EOCIE; // Разрешение от АЦП // ADC2->CR1 |= ADC_CR1_EOCIE; // Разрешение от АЦП ADC_DMA_Init(); ADC1->CR2 |= ADC_CR2_ADON; // Запуск каналов АЦП в непрерывном режиме ADC2->CR2 |= ADC_CR2_ADON; // Запуск каналов АЦП в непрерывном режиме } // Daul_ADC_DMA_Init(void) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladimir_T 1 10 августа, 2023 Опубликовано 10 августа, 2023 · Жалоба Здравствуйте, уважаемые коллеги, причина была в неверном выбранном источнике тактирования, нужен был TIM2 TRGO, а ставил TIMER2 CH2. Сейчас вроде все по задумке идет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться