А вопрос: в какое прерывание должен заходить код по завершении преобразования?Лашкевич писал(а): ↑19 апр 2021, 15:21 Вот моя инициализация АЦП для программного запуска, оцифровка всех каналов, 12 разрядов.Код: Выделить всё
/* Запрет всех секвенсоров */ NT_ADC->ACTSS = 0; /* Сброс счётчиков прерываний и измерений*/ NT_ADC->SEQ[0].OP = 0; NT_ADC->SEQ[1].OP = 0; NT_ADC->SEQ[2].OP = 0; NT_ADC->SEQ[3].OP = 0; NT_ADC->SEQ[4].OP = 0; NT_ADC->SEQ[5].OP = 0; NT_ADC->SEQ[6].OP = 0; NT_ADC->SEQ[7].OP = 0; NT_ADC->ACTSS_bit.ASEN0 = 1; NT_ADC->IM_bit.MASK0 = 1; NT_ADC->EMUX_bit.EM0 = 0; // программный запуск установкой бита GSYNC в регистре PSSI NT_ADC->PSSI_bit.SS0 = 1; NT_ADC->SEQ[0].CTL_bit.RCNT = 0; //Перезапуск не требуется NT_ADC->SEQ[0].CTL_bit.ICNT = 0; NT_ADC->PP_bit[0].OM = 0x3; //OM2-OM0 = ’011’ All blocks active (ADC plus internal buffers plus internal bandgap). NT_ADC->PP_bit[1].OM = 0x3; NT_ADC->PP_bit[2].OM = 0x3; NT_ADC->PP_bit[3].OM = 0x3; NT_ADC->PP_bit[4].OM = 0x3; NT_ADC->PP_bit[5].OM = 0x3; NT_ADC->PP_bit[6].OM = 0x3; NT_ADC->PP_bit[7].OM = 0x3; NT_ADC->PP_bit[8].OM = 0x3; NT_ADC->PP_bit[9].OM = 0x3; NT_ADC->PP_bit[10].OM = 0x3; NT_ADC->PP_bit[11].OM = 0x3; //Включаем необходимые модули АЦП NT_ADC->PP_bit[0].ENA = 1; NT_ADC->PP_bit[1].ENA = 1; NT_ADC->PP_bit[2].ENA = 1; NT_ADC->PP_bit[3].ENA = 1; NT_ADC->PP_bit[4].ENA = 1; NT_ADC->PP_bit[5].ENA = 1; NT_ADC->PP_bit[6].ENA = 1; NT_ADC->PP_bit[7].ENA = 1; NT_ADC->PP_bit[8].ENA = 1; NT_ADC->PP_bit[9].ENA = 1; NT_ADC->PP_bit[10].ENA = 1; NT_ADC->PP_bit[11].ENA = 1; //усреднитель выключен //(но для большинства задач полезно включить!) NT_ADC->SAC_bit.AVG0=0; NT_ADC->SAC_bit.AVG1=0; NT_ADC->SAC_bit.AVG2=0; NT_ADC->SAC_bit.AVG3=0; NT_ADC->SAC_bit.AVG4=0; NT_ADC->SAC_bit.AVG5=0; NT_ADC->SAC_bit.AVG6=0; NT_ADC->SAC_bit.AVG7=0; NT_ADC->RICNT_bit.AVG8=0; NT_ADC->RICNT_bit.AVG9=0; NT_ADC->RICNT_bit.AVG10=0; NT_ADC->RICNT_bit.AVG11=0; //настраиваем компараторы каждый на свой канал АЦП - //из компараторов будем забирать оцифрованные данные, как из ADC result NT_ADC->DCCTL_bit[0].CHNL = 0; NT_ADC->DCCTL_bit[1].CHNL = 1; NT_ADC->DCCTL_bit[2].CHNL = 2; NT_ADC->DCCTL_bit[3].CHNL = 3; NT_ADC->DCCTL_bit[4].CHNL = 4; NT_ADC->DCCTL_bit[5].CHNL = 5; NT_ADC->DCCTL_bit[6].CHNL = 6; NT_ADC->DCCTL_bit[7].CHNL = 7; NT_ADC->DCCTL_bit[8].CHNL = 8; NT_ADC->DCCTL_bit[9].CHNL = 9; NT_ADC->DCCTL_bit[10].CHNL = 10; NT_ADC->DCCTL_bit[11].CHNL = 11; NT_ADC->DCCTL_bit[12].CHNL = 12; NT_ADC->DCCTL_bit[13].CHNL = 13; NT_ADC->DCCTL_bit[14].CHNL = 14; NT_ADC->DCCTL_bit[15].CHNL = 15; NT_ADC->DCCTL_bit[16].CHNL = 16; NT_ADC->DCCTL_bit[17].CHNL = 17; NT_ADC->DCCTL_bit[18].CHNL = 18; NT_ADC->DCCTL_bit[19].CHNL = 19; NT_ADC->DCCTL_bit[20].CHNL = 20; NT_ADC->DCCTL_bit[21].CHNL = 21; NT_ADC->DCCTL_bit[22].CHNL = 22; NT_ADC->DCCTL_bit[23].CHNL = 23; //Показываем, с каких каналов нужно собирать данные NT_ADC->SEQ[0].DCP = 0x007FFFFF; // Каналы в компараторы, чтобы с них брать аналоговые результаты без фифо
Для забора результатов:Код: Выделить всё
Uint16 channel4 = NT_ADC->DCVAL_bit[4].VAL;
Для запуска программного, в прерывании:Код: Выделить всё
// Программно запускаем АЦП NT_ADC->PSSI_bit.GSYNC = 1;
ADC_CompInt_IRQn = 89, /*!< ADC Comparator interrupt */ В это?
Да и вообще где в коде разрешения прерываний? И нельзя ли обойтись без компараторов (просто через секвенсор)?