В SAM3S выход ЦАП "DAC0" осуществляется на вывод PB13, контролируемый контроллером PIO B.
Для работы ЦАПа необходимо сконфигурировать этот вывод для работы с соответсвующей периферией.
Но в рук-ве на SAM3S оговаривается, что каждый вывод м.б. сконфигурирован для работы с тремя перифериями: А, В и С
("Each line can be assigned to one of three peripheral functions: A, B or C."),
В таблице периферий периферия DAC0 обозвана как Extra Function,
и нигде не оговаривается, что это значит.
В SAM3S выбор соответствующей периферии осуществляется регистрами PIO ABCDSR1 и ABCDSR2,
причем в их описании указаны уже 4 периферии: A, B, C и D.
Я предположил, что Extra Function это и есть D
и сконфигурировал вывод PB13 следующим кодом:
AT91C_BASE_PIOB->PIO_PPUDR = AT91C_PIO_PB13;
AT91C_BASE_PIOB->PIO_SP1 = AT91C_PIO_PB13 | AT91C_BASE_PIOB->PIO_SP1; // setting PIO::ABCDSR1
AT91C_BASE_PIOB->PIO_SP2 = AT91C_PIO_PB13 | AT91C_BASE_PIOB->PIO_SP2; // setting PIO::ABCDSR2
AT91C_BASE_PIOB->PIO_PDR = AT91C_PIO_PB13;
(соответствующие макросы были определены в ioat91sam3s4.h;
я работаю в IAR for ARM 7.40.1)
Далее я попытался запустить ЦАП следующим кодом:
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_DAC0);
AT91C_BASE_DAC0->DAC_CR = AT91C_DAC_SWRST; // reset
AT91C_BASE_DAC0->DAC_MR = AT91C_DAC_REFRESH & (1 << 8); // Refresh Period = 1024*REFRESH/DACC Clock
AT91C_BASE_DAC0->DAC_MR = AT91C_DAC_STARTUP & (1 << 24); // 8*Tdac_clk
AT91C_BASE_DAC0->DAC_MR = AT91C_DAC_USER_SEL_CH1; // Only Channel 1 enabled
AT91C_BASE_DAC0->DAC_CHER= AT91C_DAC_CH0; // enable Channel 1
(значение 1 для записи в поля DAC_MR REFRESH и STARTUP было взято "с потолка", в качестве пробы).
Но после этого запись в AT91C_BASE_DAC0->DAC_CDR разных значений (0, 1000, 2000)
НИ К ЧЕМУ НЕ ПРИВОДИЛА: на выходе был постоянный 0.
Причем в регистре DAC_ISR флаг EOC после записи в CDR устанавливался
и сбрасывался после чтения ISR.
На вход ADVREF SAM3S подано напряжение 3 В от ИОН.
SAM3S работает с кварцем на 12 МГц.
У кого-нибудь был опыт запуска ЦАПа в этом SAM3S?
М. что-нибудь подскажете, что не так?