Kolobokov 0 16 сентября, 2021 Опубликовано 16 сентября, 2021 · Жалоба Нужен совет по конфигурации и работе с UART в отладчике конфигурация для ATSAMD10 такая - Скрытый текст void UART_Init() { PM->APBCMASK.reg |= 0 | 1 * PM_APBCMASK_SERCOM2 | 1 * PM_APBCMASK_SERCOM0; // //***********************************************************************************************// //SERCOM0 //***********************************************************************************************// /* Enable peripheral Multiplexer */ PORT->Group[0].PINCFG[6].reg = 0 | 1 * PORT_PINCFG_PMUXEN; // TXD PORT->Group[0].PINCFG[5].reg = 0 // RXD | 1 * PORT_PINCFG_INEN | 1 * PORT_PINCFG_PULLEN | 1 * PORT_PINCFG_PMUXEN; /* Peripheral Function D selected */ PORT->Group[0].PMUX[3].bit.PMUXO = PORT_PMUX_PMUXO_D_Val; // TXD PORT->Group[0].PMUX[2].bit.PMUXE = PORT_PMUX_PMUXE_D_Val; // RXD /* */ GCLK->CLKCTRL.reg = GCLK_CLKCTRL_GEN(0) | GCLK_CLKCTRL_ID(SERCOM0_GCLK_ID_CORE) | GCLK_CLKCTRL_CLKEN; /* */ SERCOM0->USART.CTRLA.reg = 0 | 1 * SERCOM_USART_CTRLA_DORD // Data Order LSB | SERCOM_USART_CTRLA_TXPO(0x1) // Transmit Data PA6 SERCOM0_PAD[2] | SERCOM_USART_CTRLA_RXPO(0x1) // Receive Data PA5 SERCOM0_PAD[1] | SERCOM_USART_CTRLA_SAMPR(0x0) // Sample Rate 16x | 1 * SERCOM_USART_CTRLA_RUNSTDBY // Run In Standby | 1 * SERCOM_USART_CTRLA_MODE_USART_INT_CLK; // Operating Mode, Internal Clock //SERCOM02->USART.BAUD.reg = BR5; // Baudrate value SERCOM0->USART.BAUD.reg = 55470; // Baudrate value SERCOM0->USART.CTRLB.reg = 0 |SERCOM_USART_CTRLB_CHSIZE(0x0) // Character Size, 8 bits | 1 * SERCOM_USART_CTRLB_TXEN // TX Enable | 1 * SERCOM_USART_CTRLB_RXEN; // RX Enable while(SERCOM0->USART.SYNCBUSY.bit.CTRLB); // synchronization SERCOM0->USART.CTRLA.reg |= SERCOM_USART_CTRLA_ENABLE; // SERCOM0 peripheral enabled while(SERCOM0->USART.SYNCBUSY.reg & SERCOM_USART_SYNCBUSY_ENABLE); // synchronization busy } просто хочу послать байт - if(SERCOM0->USART.INTFLAG.bit.DRE) /* Flag DRE check */ { SERCOM0->USART.DATA.reg = Data_OUT_8bit; /* */ } ****************************************************************************************** вопросы такие - 1 - с конфигурацией все в порядке ? 2 - при выполнении SERCOM0->USART.DATA.reg = Data_OUT_8bit; не вижу в отладчике появления данных в DATA - так должно быть ? 3 - при выполнении SERCOM0->USART.DATA.reg = Data_OUT_8bit; флаг DRE должен меняться сам - но в отладчике остается прежним Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 6 17 сентября, 2021 Опубликовано 17 сентября, 2021 (изменено) · Жалоба Все UARTы, которые мне доводилось видеть, имели два физически разных регистра данных на одном адресе. Один для приема, второй для передачи. Поэтому переданные данные никогда нельзя увидеть в регистре DATA - там могут быть только принятые данные. Игогда может иметься возможность "закольцевать" приемник с передатчиком, то есть соединить выход передатчика со входом приемника - в этом случае - да, возможен прием "эха", и в регистре данных можно наблюдать переданные данные. Конкретно по ATSAMD и его уарту ничего сказать не могу, сам только начинаю эту тему, но у меня ATSAML - вынужденно переползаю в связи с дефицитом STM32. Изменено 17 сентября, 2021 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться