Перейти к содержанию
    

Запуск DAC в Atmel SAM3S

В 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?

М. что-нибудь подскажете, что не так?

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(соответствующие макросы были определены в 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

причем в их описании указаны уже 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 хитрый клок)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У кого-нибудь был опыт запуска ЦАПа в этом 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в sam3s разве нет write protect регистров, что для PIO, что для DACC, для PMC? Или просто не указали здесь?

З.Ы. с sam3s не работал, работаю с sam3x там есть, сам постоянно на них наступаю

Изменено пользователем nvn

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в sam3s разве нет write protect регистров, что для PIO, что для DACC, для PMC? Или просто не указали здесь?

З.Ы. с sam3s не работал, работаю с sam3x там есть, сам постоянно на них наступаю

Они же по умолчанию выключены.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно у меня они в стартап файлах включаются, незнаю не разбирался. Но факт, что приходится выключать чтоб в PMC тактовые включить, или PIO и т.д. иначе не работало.

И в примерах от Атмел тоже их выключают.

Изменено пользователем nvn

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...