-
Notifications
You must be signed in to change notification settings - Fork 2.1k
kinetis: Set LPUART clock source during uart_lpuart_init #8724
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
Conversation
kYc0o
left a comment
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.
I have some small doubts but looks ok in general.
| #define SIM_SOPT2_LPUART0SRC_MASK SIM_SOPT2_LPUARTSRC_MASK | ||
| #define SIM_SOPT2_LPUART0SRC_SHIFT SIM_SOPT2_LPUARTSRC_SHIFT | ||
| #define SIM_SOPT2_LPUART0SRC SIM_SOPT2_LPUARTSRC | ||
| #endif |
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.
Can these defines be aligned? Just to see that they're actually defining a value.
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.
Will fix
|
|
||
| /* Remember to select a module clock in board_init! (SIM->SOPT2[LPUART0SRC]) */ | ||
| /* Set LPUART clock source */ | ||
| #ifdef SIM_SOPT2_LPUART0SRC |
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:
#define SIM_SOPT2_LPUART0SRC SIM_SOPT2_LPUARTSRCthus 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!
|
|
||
| #ifndef LPUART_0_SRC | ||
| /* Default LPUART clock setting to avoid compilation failures, define this in | ||
| * periph_conf.h to set board specific configuration if using the LPUART. */ |
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.
Maybe this comment can be above the #ifndef?
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.
addressed
| SIM_SOPT2_LPUART0SRC(LPUART_0_SRC); | ||
| } | ||
| #endif | ||
| #ifdef SIM_SOPT2_LPUART1SRC |
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.
Though I see a define for SIM_SOPT2_LPUART0SRC, I can't find for SIM_SOPT2_LPUART1SRC. Is this intentional? Same for SIM_SOPT2_LPUART1SRC_MASK used below, since there is a definition for SIM_SOPT2_LPUART0SRC_MASK.
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.
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 comment
The reason will be displayed to describe this comment to others. Learn more.
Ok I see, that's right for me.
|
@kYc0o aligned definitions in cpu_conf_kinetis.h |
65b4ac7 to
fea2d71
Compare
|
Perfect, I think everything is in order here, so you may squash and merge once everything is green. |
fea2d71 to
2bdf0bf
Compare
|
@kYc0o squashed, missing ACK |
kYc0o
left a comment
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.
ACK.
Contribution description
The Kinetis LPUART hardware module can choose from multiple clock sources, to use the module the user needs to select a clock source by setting a bitfield in the SIM_SOPT2 register. This PR moves this configuration into the periph uart driver, to reduce the code duplication in board_init between different boards and to make it easier to switch UART settings on an existing board.
The only existing board which has a LPUART module is the FRDM-K22F, but the module is not used in the default configuration, so this PR is mainly in preparation for the FRDM-KW41Z in #6995 which only has LPUART type UART hardware modules.
Issues/PRs references
Split from #6995
Required by #6995 for functional UART.