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

ATSAMD UART - нужен совет

Нужен совет по конфигурации и работе с 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 должен меняться сам -

но в отладчике остается прежним

 

 

 

 

 

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


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

Все UARTы, которые мне доводилось видеть, имели два физически разных регистра данных на одном адресе. Один для приема, второй для передачи. Поэтому переданные данные никогда нельзя увидеть в регистре DATA - там могут быть только принятые данные. Игогда может иметься возможность "закольцевать" приемник с передатчиком, то есть соединить выход передатчика со входом приемника - в этом случае - да, возможен прием "эха",  и в регистре данных можно наблюдать переданные данные.
     Конкретно по ATSAMD и его уарту ничего сказать не могу, сам только начинаю эту тему, но у меня ATSAML - вынужденно переползаю в связи с дефицитом STM32.

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

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


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

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

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

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

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

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

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

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

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

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