Настроил ADC1, ADC2 в режиме Injected simultaneous mode, запускается по триггеру от таймера 4
1) Так вот в прерывании флаг JEOC от какого ADC проверять ? судя по даташиту они должны выставиться у обоих одновременно.
2) можно ли менять в процессе работы АЦП номера каналов в регисте JSQR ? (естественно после того как он завершит преобразование группы)
(Каналов АЦП где-то 11, хочу настроить,4+4 инжекторных канала + переключать в прерывании от АЦП на другую группу 8ми каналов)
CODE
//================================================================================
==================
/*
* @Описание: Описание функции.
* @Параметр:
* @Возврат: Нету
*/
void Adc1_init(void){
//----------------------------------------------------------------------------------------------
RCC->APB2ENR |= RCC_APB2Periph_GPIOC;
GPIO_INIT_PIN(GPIOC,10,GPIO_MODE_OUTPUT2_PUSH_PULL);
GPIO_INIT_PIN(GPIOC,11,GPIO_MODE_OUTPUT2_PUSH_PULL);
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //ADC init
//-------------------------------------------------------------------------
RCC_ADCCLKConfig(RCC_PCLK2_Div4); //тактирование АЦП не больше 14Mhz 36/4=9Mhz
//-------------------------------------------------------------------------
RCC->APB2ENR |= RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB;
GPIO_INIT_PIN(GPIOA,2,GPIO_MODE_INPUT_ANALOG);
GPIO_INIT_PIN(GPIOA,1,GPIO_MODE_INPUT_ANALOG);
GPIO_INIT_PIN(GPIOB,1,GPIO_MODE_INPUT_ANALOG);
//--------------------------------------------------------------------------------
RCC->APB2ENR |= RCC_APB2Periph_GPIOC;
GPIO_INIT_PIN(GPIOC,0,GPIO_MODE_INPUT_ANALOG);
GPIO_INIT_PIN(GPIOC,1,GPIO_MODE_INPUT_ANALOG);
GPIO_INIT_PIN(GPIOC,2,GPIO_MODE_INPUT_ANALOG);
GPIO_INIT_PIN(GPIOC,3,GPIO_MODE_INPUT_ANALOG);
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
ADC1->CR1|=ADC_CR1_SCAN|ADC_CR1_JEOCIE;
//----------------------------------------------------------------------------------------------
ADC1->CR1|=(5<<ADC_CR1_DUALMOD_POS);
//----------------------------------------------------------------------------------------------
// 000(0): Timer 1 TRGO event
// 001(1): Timer 1 CC4 event
// 010(2): Timer 2 TRGO event
// 011(3): Timer 2 CC1 event
// 100(4): Timer 3 CC4 event
// 101(5): Timer 4 TRGO event
// 110(6): EXTI line15/TIM8_CC4 event (TIM8_CC4 is available only in high-density and XLdensity devices)
// 111(7): JSWSTART
ADC1->CR2|= (5<<ADC_CR2_JEXTSEL_POS) // 101(5): Timer 4 TRGO event
|ADC_CR2_JEXTTRIG*1;
//----------------------------------------------------------------------------------------------
// These bits are written by software to define the total number of conversions in the regular
// channel conversion sequence.
// 0000: 1 conversion
// 0001: 2 conversions
//ADC1->SQR1|= (3<<ADC_SQR1_L_POS);
//----------------------------------------------------------------------------------------------
ADC1->JSQR|=(ADC1_LEN_Inj<<ADC_JSQR_JL_POS);
//----------------------------------------------------------------------------------------------
//---------------------------Настраиваем соответствие инжектным каналам-------------------------
//----------------------------------------------------------------------------------------------
ADC1->JSQR|=(13<<ADC_JSQR_JSQ1_POS_CH_1);
ADC1->JSQR|=(1<< ADC_JSQR_JSQ1_POS_CH_2);
ADC1->JSQR|=(2<< ADC_JSQR_JSQ1_POS_CH_3);
//ADC1->JSQR|=(4<<ADC_JSQR_JSQ1_POS_CH_4);
//----------------------------------------------------------------------------------------------
NVIC_SetPriority(ADC1_2_IRQn,1);
//----------------------------------------------------------------------------------------------
NVIC_EnableIRQ(ADC1_2_IRQn);
//----------------------------------------------------------------------------------------------
ADC1->CR2|=ADC_CR2_ADON;
//----------------------------------------------------------------------------------------------
delay_us(100);
ADC1->CR2 |= ADC_CR2_CAL;
while(ADC_GetResetCalibrationStatus(ADC1));
//----------------------------------------------------------------------------------------------
}