Aal6 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 · Жалоба Добрый день! Помогите победить компаратор в 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; Т.е. проблема в районе железной трансляции выхода компаратора на пин. Не могу понять в чем дело. Помогите, кто сталкивался, второй день пляшу с бубном. Видимо, бубен держу не в той руке. С уважением, Алексей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 (изменено) · Жалоба Действительно, не работает. При переключении PMUX на CMPx выход просто висит в третьем состоянии. Это похоже на баг в документации (таблица PMUX), я попробую выяснить. Но скорее всего придется подождать пару дней пока я смогу найти людей, которые могут проверить куда именно подключен выход. Я ткнул пальцем в небо и по аналогии с D21 попробовал PMUX_G и выход заработал. Так что это ошибка в документации. Я сообщу куда нужно. Вот полный код //----------------------------------------------------------------------------- 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; } Изменено 1 апреля, 2018 пользователем ataradov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aal6 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 (изменено) · Жалоба Все оказалось просто. В даташите в таблице PORT Function Multiplexing указано, что AC CMP[0]-CMP[1] относится к Peripheral function B, а по факту к Peripheral function G. Раскопал в define на чип. Относится к samd10-samd11 семейству. В обоих даташитах имеется определение CMP[0]-CMP[1] в группе B. Блин... Спасибо за ответ! Так все и оказалось. Жаль ответ прочитал позже, чем нашел сам. Изменено 1 апреля, 2018 пользователем Aal6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 · Жалоба Если будут подобные проблемы в будущем - обращайтесь без копания днями. Если что-то не работает, что очевидно должно, то обычно решение известно или можно быстро найти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aal6 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 · Жалоба Если будут подобные проблемы в будущем - обращайтесь без копания днями. Если что-то не работает, что очевидно должно, то обычно решение известно или можно быстро найти. Обычно сперва думаешь, что сам ошибся. Особенно, когда чип не знаком. Вопросы которые мне бы немного помогли: Работает ли PullUp/Down при определении периферийной функции на входах? Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц) С уважением, Алексей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 · Жалоба Работает ли PullUp/Down при определении периферийной функции на входах? Для разной периферии по-разному, но в общем случае нет. В GPIO pull-up/pull-down контролируется теми-же сигналами, что и установка 1 и 0. Так что pull-up/pull-down не будут работать для периферии, которая использует пины на выход, хотя бы часть времени (I2C, например). Но для EIC они будут работать как нужно. Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц) Более чем достаточно для большинства применений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aal6 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 · Жалоба Для разной периферии по-разному, но в общем случае нет. В GPIO pull-up/pull-down контролируется теми-же сигналами, что и установка 1 и 0. Так что pull-up/pull-down не будут работать для периферии, которая использует пины на выход, хотя бы часть времени (I2C, например). Но для EIC они будут работать как нужно. Более чем достаточно для большинства применений. Интересует pullup для UART RX. В общем-то все равно проверю, ошибка на плате будет себе дороже. Хотя доп резистор ставить не хочу. Для I2C там пулапы прописаны в стандарте функции. Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 1 апреля, 2018 Опубликовано 1 апреля, 2018 · Жалоба Интересует pullup для UART RX. В общем-то все равно проверю, ошибка на плате будет себе дороже. Хотя доп резистор ставить не хочу. Я точно не знаю - не проверял. Но внешний резистор я бы поставил. Для I2C там пулапы прописаны в стандарте функции. В смысле? Внутренних pull-up там нет совсем. Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля. Пины помеченные как I2C обладают повышенной нагрузочной способностью, но в остальном любые пины, на которые можно назначить PAD[0] и PAD[1] могут работать как I2C. По крайней мере в не-fast режиме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aal6 0 10 апреля, 2018 Опубликовано 10 апреля, 2018 · Жалоба Добрый день! Нет ли у кого бутлоадера под SAMD10/11, которым не жалко поделится? Из примеров ASF уж очень большой компилится(4.5k без шифрования под i2c), задача влезть в 4к из 16 на борту c шифрованием под Uart или i2c. И хорошо бы файл для линкера, который переносит компиляцию основной задачи на 4к выше. С уважением, Алексей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aal6 0 14 апреля, 2018 Опубликовано 14 апреля, 2018 · Жалоба Добрый день! Подскажите, где взять файлы к Secure UART Bootloader for SAM D10? http://www.microchip.com/wwwappnotes/appno...ppnote=en603279 Не могу понять. Буду благодарен за ссылку или сами файлы. С уважением, Алексей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aal6 0 18 апреля, 2018 Опубликовано 18 апреля, 2018 · Жалоба Получил с Микрочипа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться