AlexAA2016 0 28 октября, 2016 Опубликовано 28 октября, 2016 (изменено) · Жалоба В 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? М. что-нибудь подскажете, что не так? Изменено 28 октября, 2016 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба (соответствующие макросы были определены в 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 было взято "с потолка", в качестве пробы). У кого-нибудь был опыт запуска ЦАПа в этом SAM3S? М. что-нибудь подскажете, что не так? DACC не использую, смущает что у Вас три записи подряд в регистр DAC_MR, т.е. каждой следующей записью затирается предыдущее значение. По макросам тоже не подскажу, поскольку использую gcc и штатные заголовочные файлы, предоставляемые Atmel. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 24 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба причем в их описании указаны уже 4 периферии: A, B, C и D. Я предположил, что Extra Function это и есть D В SAM4S аналог/альтернатива работает - если не использоать A, B, C и D AT91C_BASE_DAC0->DAC_MR = AT91C_DAC_REFRESH & (1 << 8); // Refresh Period = 1024*REFRESH/DACC Clock DACC Clock укладывается в требования даташита (на SAM4S хитрый клок)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба У кого-нибудь был опыт запуска ЦАПа в этом SAM3S? что мешает обратиться к производителю? http://www.atmel.com/ru/ru/products/microc...x?tab=documents и вытащить архив типа http://www.atmel.com/ru/ru/Images/SAM3S-EK__KitsFiles.zip и поискать там пример работы с DACC: /** \addtogroup dacc_module Working with DACC * The DACC driver provides the interface to configure and use the DACC peripheral.\n * * The DACC(Digital-to-Analog Converter Controller) converts digital code to analog output. * The data to be converted are sent in a common register for all channels. It offers up to 2 * analog outputs.The output voltage ranges from (1/6)ADVREF to (5/6)ADVREF. * * To Enable a DACC conversion,the user has to follow these few steps: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nvn 0 28 октября, 2016 Опубликовано 28 октября, 2016 (изменено) · Жалоба А в sam3s разве нет write protect регистров, что для PIO, что для DACC, для PMC? Или просто не указали здесь? З.Ы. с sam3s не работал, работаю с sam3x там есть, сам постоянно на них наступаю Изменено 28 октября, 2016 пользователем nvn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 29 октября, 2016 Опубликовано 29 октября, 2016 · Жалоба А в sam3s разве нет write protect регистров, что для PIO, что для DACC, для PMC? Или просто не указали здесь? З.Ы. с sam3s не работал, работаю с sam3x там есть, сам постоянно на них наступаю Они же по умолчанию выключены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nvn 0 29 октября, 2016 Опубликовано 29 октября, 2016 (изменено) · Жалоба Возможно у меня они в стартап файлах включаются, незнаю не разбирался. Но факт, что приходится выключать чтоб в PMC тактовые включить, или PIO и т.д. иначе не работало. И в примерах от Атмел тоже их выключают. Изменено 29 октября, 2016 пользователем nvn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться