|
|
  |
Atsamd11 проблема с компаратором, Не работает выход компаратора |
|
|
|
Apr 1 2018, 12:52
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-03-06
Пользователь №: 14 880

|
Добрый день! Помогите победить компаратор в ATSAMd11d14am. Не могу вывести на выходные пин сигнал выхода сравнения компаратора. Основа проекта, пример работы с компаратором из AFS(Atmel Studio7). Изменены режимы ac_chan_conf.sample_mode = AC_CHAN_MODE_CONTINUOUS; ac_chan_conf.output_mode = AC_CHAN_OUTPUT_ASYNCRONOUS; Все транслируется на биты в установке компаратора(картинка вложена). PORTIO->WRCONFIG.reg = PORT_WRCONFIG_PMUXEN | ((PORT_PMUX_PMUXE_B_Val)<< PORT_WRCONFIG_PMUX_Pos)|PORT_WRCONFIG_WRPMUX| PORT_WRCONFIG_WRPINCFG| (1<<PIN_PA10) ;//(1<<PIN_PA14);. В установках пина Pin_PA10 PORT_PMUX_PMUXE_B_Val и PORT_PINCFG_PMUXEN выставляются(в дебагере видно), хотя ASF это программно не поддерживает. На выводе постоянный 0. (осцилограф) При программной трансляции статуса компаратора на произвольный выход - все нормально работает(осцилограф), выходной пин повторяет вход. if(AC->STATUSA.bit.STATE0) PORTIO->OUTCLR.reg = 1<<PIN_PA17; else PORTIO->OUTSET.reg = 1<<PIN_PA17; Т.е. проблема в районе железной трансляции выхода компаратора на пин. Не могу понять в чем дело. Помогите, кто сталкивался, второй день пляшу с бубном. Видимо, бубен держу не в той руке.  С уважением, Алексей.
|
|
|
|
|
Apr 1 2018, 17:50
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
Действительно, не работает. При переключении PMUX на CMPx выход просто висит в третьем состоянии. Это похоже на баг в документации (таблица PMUX), я попробую выяснить. Но скорее всего придется подождать пару дней пока я смогу найти людей, которые могут проверить куда именно подключен выход. Я ткнул пальцем в небо и по аналогии с D21 попробовал PMUX_G и выход заработал. Так что это ошибка в документации. Я сообщу куда нужно. Вот полный код CODE //----------------------------------------------------------------------------- HAL_GPIO_PIN(AC, A, 4); HAL_GPIO_PIN(CMP, A, 10); HAL_GPIO_PIN(LED, A, 16)
//----------------------------------------------------------------------------- static void ac_init(void) { HAL_GPIO_AC_in(); HAL_GPIO_AC_pmuxen(HAL_GPIO_PMUX_B);
HAL_GPIO_CMP_out(); HAL_GPIO_CMP_clr(); HAL_GPIO_CMP_pmuxen(HAL_GPIO_PMUX_G);
PM->APBCMASK.reg |= PM_APBCMASK_AC;
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(AC_GCLK_ID_ANA) | GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(AC_GCLK_ID_DIG) | GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);
AC->COMPCTRL[0].reg = AC_COMPCTRL_ENABLE | AC_COMPCTRL_SPEED_HIGH | AC_COMPCTRL_INTSEL_RISING | AC_COMPCTRL_OUT_ASYNC | AC_COMPCTRL_MUXNEG_VSCALE | AC_COMPCTRL_MUXPOS_PIN0;
AC->SCALER[0].reg = 32;
AC->CTRLA.reg |= AC_CTRLA_ENABLE; }
//----------------------------------------------------------------------------- int main(void) { SYSCTRL->OSC8M.bit.PRESC = 0;
ac_init();
HAL_GPIO_LED_out(); HAL_GPIO_LED_clr();
while (1) { HAL_GPIO_LED_write(AC->STATUSA.bit.STATE0); }
return 0; }
Сообщение отредактировал ataradov - Apr 1 2018, 17:36
|
|
|
|
|
Apr 1 2018, 18:34
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-03-06
Пользователь №: 14 880

|
Все оказалось просто. В даташите в таблице PORT Function Multiplexing указано, что AC CMP[0]-CMP[1] относится к Peripheral function B, а по факту к Peripheral function G. Раскопал в define на чип. Относится к samd10-samd11 семейству. В обоих даташитах имеется определение CMP[0]-CMP[1] в группе B. Блин...
Спасибо за ответ! Так все и оказалось. Жаль ответ прочитал позже, чем нашел сам.
Сообщение отредактировал Aal6 - Apr 1 2018, 18:43
|
|
|
|
|
Apr 1 2018, 20:14
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-03-06
Пользователь №: 14 880

|
Цитата(ataradov @ Apr 1 2018, 21:39)  Если будут подобные проблемы в будущем - обращайтесь без копания днями. Если что-то не работает, что очевидно должно, то обычно решение известно или можно быстро найти. Обычно сперва думаешь, что сам ошибся. Особенно, когда чип не знаком. Вопросы которые мне бы немного помогли: Работает ли PullUp/Down при определении периферийной функции на входах? Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц) С уважением, Алексей.
|
|
|
|
|
Apr 1 2018, 20:21
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (Aal6 @ Apr 1 2018, 13:14)  Работает ли PullUp/Down при определении периферийной функции на входах? Для разной периферии по-разному, но в общем случае нет. В GPIO pull-up/pull-down контролируется теми-же сигналами, что и установка 1 и 0. Так что pull-up/pull-down не будут работать для периферии, которая использует пины на выход, хотя бы часть времени (I2C, например). Но для EIC они будут работать как нужно. QUOTE (Aal6 @ Apr 1 2018, 13:14)  Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц) Более чем достаточно для большинства применений.
|
|
|
|
|
Apr 1 2018, 20:30
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-03-06
Пользователь №: 14 880

|
Цитата(ataradov @ Apr 1 2018, 23:21)  Для разной периферии по-разному, но в общем случае нет. В GPIO pull-up/pull-down контролируется теми-же сигналами, что и установка 1 и 0. Так что pull-up/pull-down не будут работать для периферии, которая использует пины на выход, хотя бы часть времени (I2C, например). Но для EIC они будут работать как нужно.
Более чем достаточно для большинства применений. Интересует pullup для UART RX. В общем-то все равно проверю, ошибка на плате будет себе дороже. Хотя доп резистор ставить не хочу. Для I2C там пулапы прописаны в стандарте функции. Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля.
|
|
|
|
|
Apr 1 2018, 20:38
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (Aal6 @ Apr 1 2018, 13:30)  Интересует pullup для UART RX. В общем-то все равно проверю, ошибка на плате будет себе дороже. Хотя доп резистор ставить не хочу. Я точно не знаю - не проверял. Но внешний резистор я бы поставил. QUOTE (Aal6 @ Apr 1 2018, 13:30)  Для I2C там пулапы прописаны в стандарте функции. В смысле? Внутренних pull-up там нет совсем. QUOTE (Aal6 @ Apr 1 2018, 13:30)  Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля. Пины помеченные как I2C обладают повышенной нагрузочной способностью, но в остальном любые пины, на которые можно назначить PAD[0] и PAD[1] могут работать как I2C. По крайней мере в не-fast режиме.
|
|
|
|
|
Apr 10 2018, 09:01
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-03-06
Пользователь №: 14 880

|
Добрый день!
Нет ли у кого бутлоадера под SAMD10/11, которым не жалко поделится?
Из примеров ASF уж очень большой компилится(4.5k без шифрования под i2c), задача влезть в 4к из 16 на борту c шифрованием под Uart или i2c.
И хорошо бы файл для линкера, который переносит компиляцию основной задачи на 4к выше.
С уважением, Алексей.
|
|
|
|
|
Apr 14 2018, 11:38
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-03-06
Пользователь №: 14 880

|
Добрый день! Подскажите, где взять файлы к Secure UART Bootloader for SAM D10? http://www.microchip.com/wwwappnotes/appno...ppnote=en603279 Не могу понять. Буду благодарен за ссылку или сами файлы. С уважением, Алексей.
|
|
|
|
|
Apr 18 2018, 08:29
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-03-06
Пользователь №: 14 880

|
Получил с Микрочипа.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|