Для устройства требуется сконфигурировать ЦАП как группу. Для теста подаю на ЦАП 0, но на выходе всех портов P6.x получаю некоторый ненулевой уровень напряжения (около 1В). Пробовал устанавливать порты на вывод с помощью P6SEL, P6DIR - то же самое. Вот мои процедуры инициализации:
void init_DAC0(void)
{
//устанавливаем 12-разрядное разрешение
DAC12_0CTL&=~BIT12;
//устанавливаем диапазон входного опорного
//напряжения ЦАП12 равным 1-но кратному опорному напряжению Vref+
DAC12_0CTL|=BIT8;
//устанавливаем натуральный двоичный формат данных
DAC12_0CTL&=~BIT4;
//для входного и выходного буферов устанавливаем высокую скорость/ток
DAC12_0CTL|=BIT7;
DAC12_0CTL|=BIT6;
DAC12_0CTL|=BIT5;
//устанавливаем опорное напряжение равным Vref+
DAC12_0CTL&=~BIT14;
DAC12_0CTL&=~BIT13;
//загрузку в защелку ЦАП12 осуществляем при записи во все регистры DAC12_xDAT группы
DAC12_0CTL&=~BIT11;
DAC12_0CTL|=BIT10;
//группировка на этом ЦАП выставляется
DAC12_0CTL|=BIT0;
//отключаем прерывания от ЦАП12
DAC12_0CTL&=~BIT3;//разрешение прерывания
DAC12_0CTL&=~BIT2;//флаг прерывания
//включаем преобразование
DAC12_0CTL|=BIT1;
//запускаем калибровку и ждём её завершения
/*DAC12_0CTL|=BIT9;
while((DAC12_0CTL&BIT9)==1);*/
}
void init_DAC1(void)
{
//устанавливаем 12-разрядное разрешение
DAC12_1CTL&=~BIT12;
//устанавливаем диапазон входного опорного
//напряжения ЦАП12 равным 1-но кратному опорному напряжению Vref+
DAC12_1CTL|=BIT8;
//устанавливаем натуральный двоичный формат данных
DAC12_1CTL&=~BIT4;
//для входного и выходного буферов устанавливаем высокую скорость/ток
/*DAC12_1CTL|=BIT7;
DAC12_1CTL|=BIT6;
DAC12_1CTL|=BIT5;*/ // здесь при записи хотя бы 1 бита в 1 напряжение на выходе всегда 0
//устанавливаем опорное напряжение равным Vref+
DAC12_1CTL&=~BIT14;
DAC12_1CTL&=~BIT13;
//загрузку в защелку ЦАП12 осуществляем при записи во все регистры DAC12_xDAT группы
DAC12_1CTL&=~BIT11;
DAC12_1CTL|=BIT10;
//группировка на этом ЦАП не выставляется
DAC12_1CTL&=~BIT0;
//отключаем прерывания от ЦАП12
DAC12_1CTL&=~BIT3;//разрешение прерывания
DAC12_1CTL&=~BIT2;//флаг прерывания
//включаем преобразование
DAC12_1CTL|=BIT1;
//запускаем калибровку и ждём её завершения
DAC12_1CTL|=BIT9;
while((DAC12_1CTL&BIT9)==1);
}
Далее записываю в ЦАП так:
void write_DAC0(unsigned int val)
{
DAC12_0DAT = val;
}
void write_DAC1(unsigned int val)
{
DAC12_1DAT = val;
}
Что не так конфигурирую - почему неправильный сигнал на выходе ?