コード例 #1
0
ファイル: hal_serial_lld.c プロジェクト: mabl/ChibiOS
/**
 * @brief   UART initialization.
 * @details This function must be invoked with interrupts disabled.
 *
 * @param[in] sdp       pointer to a @p SerialDriver object
 * @param[in] config    the architecture-dependent serial driver configuration
 */
static void uart_init(SerialDriver *sdp, const SerialConfig *config) {
#if SAMA_SERIAL_USE_UART && SAMA_SERIAL_USE_FLEXCOM
  if (sdp->uart != NULL)
#endif /* SAMA_SERIAL_USE_UART && SAMA_SERIAL_USE_FLEXCOM */
#if SAMA_SERIAL_USE_UART
  {
    Uart *u = sdp->uart;

    /* Disabling write protection */
    sdDisableWP(u);
    /* Baud rate setting.*/
    u->UART_BRGR = UART_BRGR_CD(sdp->clock / (16 * config->speed));

    u->UART_CR = config->cr;
    u->UART_MR = config->mr;
    u->UART_IER = UART_IER_RXRDY;

    /* Clearing error status bit */
    u->UART_CR |= UART_CR_RSTSTA;
    /* Enabling Tx and Rx */
    u->UART_CR |= UART_CR_RXEN | UART_CR_TXEN;
    /* Enabling write protection */
    sdEnableWP(u);
  }
#endif /* SAMA_SERIAL_USE_UART */
#if SAMA_SERIAL_USE_UART && SAMA_SERIAL_USE_FLEXCOM
  else if (sdp->usart != NULL)
#endif /* SAMA_SERIAL_USE_UART && SAMA_SERIAL_USE_FLEXCOM */
#if SAMA_SERIAL_USE_FLEXCOM
  {
    Flexcom *fl = sdp->flexcom;
    Usart *us = sdp->usart;

    /* Disabling write protection */
    sdFlexDisableWP(us)
    /* Enabling USART on FLEXCOM */
    fl->FLEX_MR = FLEX_MR_OPMODE_USART;
    /* Baud rate setting (OVER = 0 and SYNC = 0)*/
    us->US_BRGR = US_BRGR_CD(sdp->clock / (16 * config->speed));

    us->US_CR = config->cr;
    us->US_MR = config->mr;
    us->US_IER = US_IER_RXRDY;

    /* Clearing status bit */
    us->US_CR |= US_CR_RSTSTA;
    /* Enabling Tx and Rx */
    us->US_CR |= US_CR_RXEN | US_CR_TXEN;
    /* Enabling write protection */
    sdFlexEnableWP(us)
  }
コード例 #2
0
ファイル: uart.c プロジェクト: PrinceBalabis/mahm3lib
void uart_init(const uart_settings_t *settings) {
	/*
	 * reset receiver, transmitter and status bits,
	 * disable receiver and transmitter
	 */
	UART->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX |	UART_CR_RSTSTA |
					UART_CR_RXDIS | UART_CR_TXDIS;
	// configure baud rate
	UART->UART_BRGR = UART_BRGR_CD(settings->baud_rate);
	// configure mode
	UART->UART_MR = UART_MR_CHMODE(settings->ch_mode);
	// enable receiver and transmitter
	UART->UART_CR = UART_CR_RXEN | UART_CR_TXEN;
}
コード例 #3
0
ファイル: uart_sam.c プロジェクト: loicpoulain/zephyr
static int baudrate_set(Uart *const uart, u32_t baudrate,
			u32_t mck_freq_hz)
{
	u32_t divisor;

	__ASSERT(baudrate,
		 "baud rate has to be bigger than 0");
	__ASSERT(mck_freq_hz/16U >= baudrate,
		 "MCK frequency is too small to set required baud rate");

	divisor = mck_freq_hz / 16U / baudrate;

	if (divisor > 0xFFFF) {
		return -EINVAL;
	}

	uart->UART_BRGR = UART_BRGR_CD(divisor);

	return 0;
}