Ярлыки

7805 (1) 78L05 (1) 7905 (1) _GetPixelIndex (1) _SetPixelIndex (1) AD7608 (1) AD8429 (1) ADC (2) Amolifer (1) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (4) ASSERT (1) at command (3) at#eaddr (1) at#epassw (1) at#esmtp (1) at#euser (1) at#gprs (1) at#selint=2 (1) at#sgact (1) at#tcpatcmdseq (1) atan (2) bit (1) Bitband (1) boot (2) bootlloader (1) C (4) CMSIS (3) command (1) Cordic (1) Coretex (1) Cortex (1) CP2101 (1) DBGMCU (1) DBGMCU_CR (1) debug (1) debug.ini (1) Discovery (2) DMA (6) DSP (1) DSP library (1) DWT (1) e-mail (1) email (1) Exel (1) gl868-dual (2) gl868-dual cmux (1) GPIO (4) Hard Fault (1) ID (1) ILI9320 (1) ILI9325 (1) Instrumentithion (1) Keil (3) LM1117 (1) LMP7721 (1) lock-in (1) mdmread (1) memory (1) MINI_STM32 Revision 01 (1) Operation Amplifer (1) pack (1) printf (2) printf() (1) PWM (8) RCC (2) retargetting (1) RS232 (4) RSAPI.DLL (1) RSS (1) RTC (2) Segger (1) send (2) Silabs (1) Software&RESET (1) SPI (2) spl (3) sqrt (3) Standard Peripheral Library (1) standard peripherals library (1) startup (1) STemWin (1) STlink (1) STlink/V2 (2) STM32 (13) stm32 stm32f10x (4) STM32DBG.IN (1) STM32F (20) STM32F DBGMCU (1) STM32F0 (2) STM32F030F4 (2) STM32F1 (7) STM32F103 (8) STM32F4 (3) STM32F4 Assembler (1) STM32F4 Discovery (1) STM32F407ZG (1) STM43F4 Assembler (1) struct (1) system (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) telit (5) TIM (9) timer (4) UART (3) uni-trend (1) USART (7) USB (1) UT61B (1) viewer (1) АЦП (1) генератор (1) микроконтроллер (1) перенаправление (1) С (1) синхронный усилитель (2) учебный курс (1) ШИМ (2)

суббота, 29 ноября 2014 г.

Настройка преобразования первых 8ми регулярных каналов АЦП с использованием канала DMA

void ADC_init(void)
{
// настройка ADC1
        RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //  такты на ADC1

        ADC1->SMPR2 |= ADC_SMPR2_SMP0 | ADC_SMPR2_SMP1 
        | ADC_SMPR2_SMP2 | ADC_SMPR2_SMP3 | ADC_SMPR2_SMP4 
        | ADC_SMPR2_SMP5 | ADC_SMPR2_SMP6 | ADC_SMPR2_SMP7;       // количество циклов преобразования 239.5

        ADC1->SQR1 |= ADC_SQR1_L_2 | ADC_SQR1_L_1 | ADC_SQR1_L_0; // длина последовательности регулярных каналов = 8;
        // добавление в последовательность каналов
        ADC1->SQR2 |= ADC_SQR2_SQ8_2 | ADC_SQR2_SQ8_1 | ADC_SQR2_SQ8_0 //канал 7
        | ADC_SQR2_SQ7_2 | ADC_SQR2_SQ7_1;                             // канал 6

        ADC1->SQR3 |=  ADC_SQR3_SQ6_2 | ADC_SQR3_SQ6_0                 //канал 5
        | ADC_SQR3_SQ5_2                                               //канал 4
        | ADC_SQR3_SQ4_1 | ADC_SQR3_SQ4_0                              //канал 3
        | ADC_SQR3_SQ3_1                                               //канал 2
        | ADC_SQR3_SQ2_0;                                              // канал 1
        //канал 0 включен по умолчанию т.к. в младших битах SQ3 0
//      ADC1->CR2 |= ADC_CR2_CONT;      // включаем если нужно непрерывное преобразование последовательности в цикле

        ADC1->CR2 |= ADC_CR2_DMA //включаем работу с DMA
        | ADC_CR2_EXTTRIG //включаем работу от внешнего события 
        | ADC_CR2_EXTSEL //выбираем триггером запуска регулярной последовательности событие SWSTART
        | ADC_CR2_JEXTSEL; // выбираем триггером запуска выделенной последовательности событие JSWSTART дабы эти каналы не отнимали у мк времени
        ADC1->CR1 |= ADC_CR1_SCAN; // включаем автоматический перебор всех каналов в последовательности
//макросы для включения/выключения АЦП с DMA
#define ADC_ON ADC1->CR2 |= ADC_CR2_ADON;  \
                                ADC1->CR2 |= ADC_CR2_SWSTART; \
                                DMA1_Channel1->CCR |= DMA_CCR1_TCIE | DMA_CCR1_EN;      //включаем преобразование прерывание DMA
#define ADC_OFF ADC->CR2 &= (~(ADC_CR2_ADON)); \
                                DMA1_Channel1->CCR &= (~(DMA_CCR1_TCIE | DMA_CCR1_EN)); //выключаем преобразование и прерывание DMA
        
        return;
}


Настройка DMA для АЦП


        DMA1_Channel1->CPAR = ADC1_BASE+0x4C; // Загружаем адрес регистра DR
        DMA1_Channel1->CMAR = pADC_readbuf_addr->Buf_Addr; //грузим адрес буфера обмена
        DMA1_Channel1->CNDTR = 8; //длина буфера 
        DMA1_Channel1->CCR |= DMA_CCR1_MINC     //инкремент адреса памяти
        | DMA_CCR1_PSIZE_0 //размерность данных периферии 16 бит
        | DMA_CCR1_MSIZE_0 //размерность данных памяти 16 bit
        | DMA_CCR1_CIRC;   // закольцевать буфер

Комментариев нет:

Отправить комментарий