* 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:
parent
09126fe34f
commit
c2ba7ebf46
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue