Имеется IAR 6.50 для ARM. Проект для STM32F103VCT6 с использованием scmRTOS V4.
Работает связка ADC1 и DMA. Все другие прерывания блокированы.
Запуск работы связки происходит в функции main() перед запуском операционной системы:
ADC1_CR2_bit.SWSTART=true; //Старт преобразования АЦП OS::run();
Тело прерывания DMA (преобразовывается 9 каналов ADC1):
extern "C" void DMA1_Channel1_IRQHandler(void) { OS::TISRW(); DMA_CCR1_bit.EN=false; //Стоп канала DMA DMA_IFCR_bit.CTCIF1=true; //Сброс флага прерывания конца приёма первого канала DMA ADC1_SR_bit.STRT=false; //Сброс флага старта регулярных каналов ADCChannelArray[0]+=ADCChannel.ADCResult[15]; //Перепись результатов очередного преобразования ADCChannelArray[1]+=ADCChannel.ADCResult[14]; ADCChannelArray[2]+=ADCChannel.ADCResult[7]; ADCChannelArray[3]+=ADCChannel.ADCResult[6]; ADCChannelArray[4]+=ADCChannel.ADCResult[3]; ADCChannelArray[5]+=ADCChannel.ADCResult[2]; ADCChannelArray[6]+=ADCChannel.ADCResult[1]; ADCChannelArray[7]+=ADCChannel.ADCResult[0]; ADCChannelArray[8]+=ADCChannel.ADCResult[8];*/ DMA_CCR1_bit.EN=true; //Старт канала DMA ADC1_CR2_bit.SWSTART=true; //Старт преобразования АЦП DMA1Counter++; //Отладочный счётчик прерываний }
Проблема в следующем. Ставлю точку остановки для отладчика на вторую строку обработчика прерывания. После каждого запуска происходит чёткая остановка на точке. Убираю точку остановки и пускаю программу, затем через некоторое время останавливаю. Отладочный счётчик показывает два захода в прерывание, а затем, сколько бы я ни запускал и останавливал программу, больше заходов в прерывание не наблюдается.
В чём дело?
|