diff options
Diffstat (limited to 'os/hal/platforms/AT91SAM7')
-rw-r--r-- | os/hal/platforms/AT91SAM7/serial_lld.c | 18 | ||||
-rw-r--r-- | os/hal/platforms/AT91SAM7/serial_lld.h | 6 |
2 files changed, 12 insertions, 12 deletions
diff --git a/os/hal/platforms/AT91SAM7/serial_lld.c b/os/hal/platforms/AT91SAM7/serial_lld.c index c5197544d..c166a697d 100644 --- a/os/hal/platforms/AT91SAM7/serial_lld.c +++ b/os/hal/platforms/AT91SAM7/serial_lld.c @@ -81,7 +81,7 @@ static const SerialConfig default_config = { *
* @param[in] sdp communication channel associated to the USART
*/
-static void usart_init(SerialDriver *sdp) {
+static void usart_init(SerialDriver *sdp, const SerialConfig *config) {
AT91PS_USART u = sdp->usart;
/* Disables IRQ sources and stop operations.*/
@@ -89,11 +89,11 @@ static void usart_init(SerialDriver *sdp) { u->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RSTSTA;
/* New parameters setup.*/
- if (sdp->config->sc_mr & AT91C_US_OVER)
- u->US_BRGR = MCK / (sdp->config->sc_speed * 8);
+ if (config->sc_mr & AT91C_US_OVER)
+ u->US_BRGR = MCK / (config->sc_speed * 8);
else
- u->US_BRGR = MCK / (sdp->config->sc_speed * 16);
- u->US_MR = sdp->config->sc_mr;
+ u->US_BRGR = MCK / (config->sc_speed * 16);
+ u->US_MR = config->sc_mr;
u->US_RTOR = 0;
u->US_TTGR = 0;
@@ -254,10 +254,10 @@ void sd_lld_init(void) { *
* @param[in] sdp pointer to a @p SerialDriver object
*/
-void sd_lld_start(SerialDriver *sdp) {
+void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
- if (sdp->config == NULL)
- sdp->config = &default_config;
+ if (config == NULL)
+ config = &default_config;
if (sdp->state == SD_STOP) {
#if USE_SAM7_USART0
@@ -277,7 +277,7 @@ void sd_lld_start(SerialDriver *sdp) { }
#endif
}
- usart_init(sdp);
+ usart_init(sdp, config);
}
/**
diff --git a/os/hal/platforms/AT91SAM7/serial_lld.h b/os/hal/platforms/AT91SAM7/serial_lld.h index e3bb23259..33355ab3d 100644 --- a/os/hal/platforms/AT91SAM7/serial_lld.h +++ b/os/hal/platforms/AT91SAM7/serial_lld.h @@ -90,10 +90,12 @@ typedef uint32_t sdflags_t; typedef struct {
/**
* @brief Bit rate.
+ * @details This is written to the US_BRGR register of the appropriate AT91S_USART
*/
uint32_t sc_speed;
/**
* @brief Initialization value for the MR register.
+ * @details This is written to the US_MR register of the appropriate AT91S_USART
*/
uint32_t sc_mr;
} SerialConfig;
@@ -105,8 +107,6 @@ typedef struct { _base_asynchronous_channel_data \
/* Driver state.*/ \
sdstate_t state; \
- /* Current configuration data.*/ \
- const SerialConfig *config; \
/* Input queue.*/ \
InputQueue iqueue; \
/* Output queue.*/ \
@@ -142,7 +142,7 @@ extern SerialDriver SD2; extern "C" {
#endif
void sd_lld_init(void);
- void sd_lld_start(SerialDriver *sdp);
+ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config);
void sd_lld_stop(SerialDriver *sdp);
#ifdef __cplusplus
}
|