#include #include unsigned int pil_tab [2048]; int i = 0; int j = 0; int k = 0; int max = 2048; int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer ADC12CTL0 |= REF2_5V + REFON; //REF2_5V - опорное напряжение 2,5; REFON - включение модуля ЦАП DAC12_0CTL = DAC12CALON + DAC12IR + DAC12AMP_5+DAC12LSEL_1; //DAC12CALON - включение калибровки; DAC12IR - полный диапазон выходного напряжения ЦАП12 //равен 1-но кратному опорному напряжению; DAC12AMP_5 - настройка усилителя ЦАП12 while(DAC12_0CTL & DAC12CALON); // Ожидание завершения калибровки DAC12_0CTL |= DAC12ENC; //DAC12ENC - включение преобразования ЦАП12 //Инициализируем порт Р1.0 для инициализации кнопки S1 P1DIR &= ~0x01; P1SEL &= ~0x01; P1IES &= ~0x01; P1IE |= 0x01; P1IFG &= ~0x01; OA1CTL0 = OAN_0 + OAP_1 + OAPM_3 + OAADC1; // Select inputs, power mode OA1CTL1 = OAFC_0 + OARRIP; // Unity Gain, rail-to-rail inputs for (i=0; i<2048; i++) pil_tab[i] = i*2; //настройка канала ПДП1 DMACTL0 |= DMA0TSEL_5; DMA0CTL = DMASRCINCR_3 + DMADSTINCR_1 + DMASWDW + DMADT_6 + DMAIE; //dst неизменно, src инкрем., слово в слово, разр. прерываний //DMA0SZ = 2048; _BIS_SR(LPM0_bits + GIE); // Выключение процессора } // Прерывание по нажатию кнопки S1 #pragma vector = PORT1_VECTOR __interrupt void PORT1_ISR(void) { //P1IE &= ~0x01; if(((P1IFG & 0x01) != 0)&&((P1IN & 0x01) == 1)) { P1IFG = 0; max = max - 128; if(max == 0) max = 2048; DAC12_0CTL &= ~DAC12IFG; DMA0CTL |= DMAEN; DMA0DA = (void (*)()) &DAC12_0DAT; DMA0SA = (void (*)()) pil_tab; DMA0SZ = max; DAC12_0DAT = 0; } } #pragma vector = DMA_VECTOR __interrupt void DMA_ISR( void) { //P1IFG &= ~0x01; //DAC12_0CTL &= ~ DAC12IFG; //DMA0CTL &= ~DMAEN; DMA0CTL &= ~DMAIFG; DAC12_0DAT = 0; //P1IES ^= 0x01; //P1IE |= 0x01; }