* remove the SerialConfig pointer from the SerialDriver structure. This is now simply passed through from sdStart() to sd_lld_start()

* implementation for AT91SAM7 port provided - others will need to be updated

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1875 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
liamstask 2010-04-19 15:29:44 +00:00
parent 09126fe34f
commit c2ba7ebf46
5 changed files with 17 additions and 20 deletions

View File

@ -81,7 +81,7 @@ static const SerialConfig default_config = {
* *
* @param[in] sdp communication channel associated to the USART * @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; AT91PS_USART u = sdp->usart;
/* Disables IRQ sources and stop operations.*/ /* 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; u->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RSTSTA;
/* New parameters setup.*/ /* New parameters setup.*/
if (sdp->config->sc_mr & AT91C_US_OVER) if (config->sc_mr & AT91C_US_OVER)
u->US_BRGR = MCK / (sdp->config->sc_speed * 8); u->US_BRGR = MCK / (config->sc_speed * 8);
else else
u->US_BRGR = MCK / (sdp->config->sc_speed * 16); u->US_BRGR = MCK / (config->sc_speed * 16);
u->US_MR = sdp->config->sc_mr; u->US_MR = config->sc_mr;
u->US_RTOR = 0; u->US_RTOR = 0;
u->US_TTGR = 0; u->US_TTGR = 0;
@ -254,10 +254,10 @@ void sd_lld_init(void) {
* *
* @param[in] sdp pointer to a @p SerialDriver object * @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) if (config == NULL)
sdp->config = &default_config; config = &default_config;
if (sdp->state == SD_STOP) { if (sdp->state == SD_STOP) {
#if USE_SAM7_USART0 #if USE_SAM7_USART0
@ -277,7 +277,7 @@ void sd_lld_start(SerialDriver *sdp) {
} }
#endif #endif
} }
usart_init(sdp); usart_init(sdp, config);
} }
/** /**

View File

@ -90,10 +90,12 @@ typedef uint32_t sdflags_t;
typedef struct { typedef struct {
/** /**
* @brief Bit rate. * @brief Bit rate.
* @details This is written to the US_BRGR register of the appropriate AT91S_USART
*/ */
uint32_t sc_speed; uint32_t sc_speed;
/** /**
* @brief Initialization value for the MR register. * @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; uint32_t sc_mr;
} SerialConfig; } SerialConfig;
@ -105,8 +107,6 @@ typedef struct {
_base_asynchronous_channel_data \ _base_asynchronous_channel_data \
/* Driver state.*/ \ /* Driver state.*/ \
sdstate_t state; \ sdstate_t state; \
/* Current configuration data.*/ \
const SerialConfig *config; \
/* Input queue.*/ \ /* Input queue.*/ \
InputQueue iqueue; \ InputQueue iqueue; \
/* Output queue.*/ \ /* Output queue.*/ \
@ -142,7 +142,7 @@ extern SerialDriver SD2;
extern "C" { extern "C" {
#endif #endif
void sd_lld_init(void); 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); void sd_lld_stop(SerialDriver *sdp);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -146,8 +146,7 @@ void sdStart(SerialDriver *sdp, const SerialConfig *config) {
chDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY), chDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY),
"sdStart(), #1", "sdStart(), #1",
"invalid state"); "invalid state");
sdp->config = config; sd_lld_start(sdp, config);
sd_lld_start(sdp);
sdp->state = SD_READY; sdp->state = SD_READY;
chSysUnlock(); chSysUnlock();
} }

View File

@ -68,10 +68,10 @@ void sd_lld_init(void) {
* *
* @param[in] sdp pointer to a @p SerialDriver object * @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) if (config == NULL)
sdp->config = &default_config; config = &default_config;
} }

View File

@ -70,8 +70,6 @@ typedef struct {
_base_asynchronous_channel_data \ _base_asynchronous_channel_data \
/* Driver state.*/ \ /* Driver state.*/ \
sdstate_t state; \ sdstate_t state; \
/* Current configuration data.*/ \
const SerialConfig *config; \
/* Input queue.*/ \ /* Input queue.*/ \
InputQueue iqueue; \ InputQueue iqueue; \
/* Output queue.*/ \ /* Output queue.*/ \
@ -98,7 +96,7 @@ typedef struct {
extern "C" { extern "C" {
#endif #endif
void sd_lld_init(void); 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); void sd_lld_stop(SerialDriver *sdp);
#ifdef __cplusplus #ifdef __cplusplus
} }