aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/platforms/SPC56x
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-04-20 15:39:07 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-04-20 15:39:07 +0000
commit3621ac37b0cbab7737d215db0335017561856a10 (patch)
treeb40e3244e794f2dc706b71ff8bff44e1b0fdf0ad /os/hal/platforms/SPC56x
parentd49704990da043573942c0a35de92fc89d62d525 (diff)
downloadChibiOS-3621ac37b0cbab7737d215db0335017561856a10.tar.gz
ChibiOS-3621ac37b0cbab7737d215db0335017561856a10.tar.bz2
ChibiOS-3621ac37b0cbab7737d215db0335017561856a10.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1881 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/platforms/SPC56x')
-rw-r--r--os/hal/platforms/SPC56x/serial_lld.c18
-rw-r--r--os/hal/platforms/SPC56x/serial_lld.h4
2 files changed, 12 insertions, 10 deletions
diff --git a/os/hal/platforms/SPC56x/serial_lld.c b/os/hal/platforms/SPC56x/serial_lld.c
index 91127e767..c99146d02 100644
--- a/os/hal/platforms/SPC56x/serial_lld.c
+++ b/os/hal/platforms/SPC56x/serial_lld.c
@@ -69,15 +69,16 @@ static const SerialConfig default_config = {
* @details This function must be invoked with interrupts disabled.
*
* @param[in] sdp pointer to a @p SerialDriver object
+ * @param[in] config the architecture-dependent serial driver configuration
*/
-static void esci_init(SerialDriver *sdp) {
+static void esci_init(SerialDriver *sdp, const SerialConfig *config) {
volatile struct ESCI_tag *escip = sdp->escip;
- uint8_t mode = sdp->config->sc_mode;
+ uint8_t mode = config->sc_mode;
escip->CR2.R = 0; /* MDIS off. */
escip->CR1.R = 0;
escip->LCR.R = 0;
- escip->CR1.B.SBR = SPC563_SYSCLK / (16 * sdp->config->sc_speed);
+ escip->CR1.B.SBR = SPC563_SYSCLK / (16 * config->sc_speed);
if (mode & SD_MODE_LOOPBACK)
escip->CR1.B.LOOPS = 1;
switch (mode & SD_MODE_PARITY) {
@@ -267,12 +268,15 @@ void sd_lld_init(void) {
* @brief Low level serial driver configuration and (re)start.
*
* @param[in] sdp pointer to a @p SerialDriver object
+ * @param[in] config the architecture-dependent serial driver configuration.
+ * If this parameter is set to @p NULL then a default
+ * configuration is used.
*/
-void sd_lld_start(SerialDriver *sdp) {
+void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
- if (sdp->config == NULL)
- sdp->config = &default_config;
- esci_init(sdp);
+ if (config == NULL)
+ config = &default_config;
+ esci_init(sdp, config);
}
/**
diff --git a/os/hal/platforms/SPC56x/serial_lld.h b/os/hal/platforms/SPC56x/serial_lld.h
index 4da905cd9..7d6ef0352 100644
--- a/os/hal/platforms/SPC56x/serial_lld.h
+++ b/os/hal/platforms/SPC56x/serial_lld.h
@@ -117,8 +117,6 @@ typedef struct {
_base_asynchronous_channel_data \
/* Driver state.*/ \
sdstate_t state; \
- /* Current configuration data.*/ \
- const SerialConfig *config; \
/* Input queue.*/ \
InputQueue iqueue; \
/* Output queue.*/ \
@@ -154,7 +152,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
}