-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
kinetis: Set LPUART clock source during uart_lpuart_init #8724
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -63,6 +63,15 @@ | |
#define LPUART_OVERSAMPLING_RATE (16) | ||
#endif | ||
|
||
/* Default LPUART clock setting to avoid compilation failures, define this in | ||
* periph_conf.h to set board specific configuration if using the LPUART. */ | ||
#ifndef LPUART_0_SRC | ||
#define LPUART_0_SRC 0 | ||
#endif | ||
#ifndef LPUART_1_SRC | ||
#define LPUART_1_SRC 0 | ||
#endif | ||
|
||
/** | ||
* @brief Runtime configuration space, holds pointers to callback functions for RX | ||
*/ | ||
|
@@ -296,7 +305,19 @@ static inline void uart_init_lpuart(uart_t uart, uint32_t baudrate) | |
LPUART_Type *dev = uart_config[uart].dev; | ||
uint32_t clk = uart_config[uart].freq; | ||
|
||
/* Remember to select a module clock in board_init! (SIM->SOPT2[LPUART0SRC]) */ | ||
/* Set LPUART clock source */ | ||
#ifdef SIM_SOPT2_LPUART0SRC | ||
if (dev == LPUART0) { | ||
SIM->SOPT2 = (SIM->SOPT2 & ~SIM_SOPT2_LPUART0SRC_MASK) | | ||
SIM_SOPT2_LPUART0SRC(LPUART_0_SRC); | ||
} | ||
#endif | ||
#ifdef SIM_SOPT2_LPUART1SRC | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Though I see a define for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. LPUART1SRC only exist for CPUs which have two or more lpuart modules (LPUART0, LPUART1). Therefore we need the preprocessor conditional to avoid compilation errors on the CPUs which don't have these modules. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok I see, that's right for me. |
||
if (dev == LPUART1) { | ||
SIM->SOPT2 = (SIM->SOPT2 & ~SIM_SOPT2_LPUART1SRC_MASK) | | ||
SIM_SOPT2_LPUART1SRC(LPUART_1_SRC); | ||
} | ||
#endif | ||
|
||
/* Select mode */ | ||
/* transmitter and receiver disabled */ | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The value of this definition doesn't matter? It only needs to be defined to execute the code below? It's just because above there is:
thus the value might be needed or evaluated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They are defined by the vendor headers for the CPUs which have the appropriate hardware module. The definition in cpu_conf_kinetis.h is only a compatibility definition for some CPU headers which have named the bit field LPUARTSRC instead of LPUART0SRC. See the other definitions in the same area in cpu_conf_kinetis.h.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok I got it. Thanks!