mirror of https://github.com/rusefi/ChibiOS.git
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5523 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
b0b6214a62
commit
6c8a2507a8
|
@ -497,14 +497,14 @@ void i2c_lld_start(I2CDriver *i2cp) {
|
|||
dmaStreamSetPeripheral(i2cp->dmatx, &dp->TXDR);
|
||||
|
||||
/* Reset i2c peripheral.*/
|
||||
dp->CR1 = i2cp->config->cr1 | I2C_CR1_ERRIE | I2C_CR1_TCIE | I2C_CR1_TXDMAEN | I2C_CR1_RXDMAEN;
|
||||
dp->CR1 = i2cp->config->cr1 | I2C_CR1_ERRIE | I2C_CR1_TCIE |
|
||||
I2C_CR1_TXDMAEN | I2C_CR1_RXDMAEN;
|
||||
|
||||
/* Set slave address field (master mode) */
|
||||
//dp->CR2 = (i2cp->config->cr2 & ~I2C_CR2_SADD) | I2C_CR2_AUTOEND;
|
||||
dp->CR2 = (i2cp->config->cr2 & ~I2C_CR2_SADD);
|
||||
|
||||
/* Setup I2C parameters.*/
|
||||
dp->TIMINGR = i2cp->config->clock_timing;
|
||||
dp->TIMINGR = i2cp->config->timingr;
|
||||
|
||||
/* Ready to go.*/
|
||||
dp->CR1 |= I2C_CR1_PE;
|
||||
|
|
|
@ -35,6 +35,22 @@
|
|||
/* Driver constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name TIMINGR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define STM32_TIMINGR_PRESC_MASK (15U << 28)
|
||||
#define STM32_TIMINGR_PRESC(n) ((n) << 28)
|
||||
#define STM32_TIMINGR_SCLDEL_MASK (15U << 20)
|
||||
#define STM32_TIMINGR_SCLDEL(n) ((n) << 20)
|
||||
#define STM32_TIMINGR_SDADEL_MASK (15U << 16)
|
||||
#define STM32_TIMINGR_SDADEL(n) ((n) << 16)
|
||||
#define STM32_TIMINGR_SCLH_MASK (255U << 8)
|
||||
#define STM32_TIMINGR_SCLH(n) ((n) << 8)
|
||||
#define STM32_TIMINGR_SCLL_MASK (255U << 0)
|
||||
#define STM32_TIMINGR_SCLL(n) ((n) << 0)
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
@ -183,26 +199,26 @@ typedef uint16_t i2caddr_t;
|
|||
*/
|
||||
typedef uint32_t i2cflags_t;
|
||||
|
||||
/**
|
||||
* @brief Supported modes for the I2C bus.
|
||||
*/
|
||||
typedef enum {
|
||||
OPMODE_I2C = 1,
|
||||
OPMODE_SMBUS_DEVICE = 2,
|
||||
OPMODE_SMBUS_HOST = 3,
|
||||
} i2copmode_t;
|
||||
|
||||
/**
|
||||
* @brief Driver configuration structure.
|
||||
*/
|
||||
typedef struct {
|
||||
i2copmode_t op_mode; /**< @brief Specifies the I2C mode. */
|
||||
uint32_t clock_timing; /**< @brief Specifies the clock timing.
|
||||
@note See TRM for further info. */
|
||||
uint32_t cr1; /**< @brief I2C register initialization
|
||||
data. */
|
||||
uint32_t cr2; /**< @brief I2C register initialization
|
||||
data. */
|
||||
/**
|
||||
* @brief TIMINGR register initialization.
|
||||
* @note Refer to the STM32 reference manual, the values are affected
|
||||
* by the system clock settings in mcuconf.h.
|
||||
*/
|
||||
uint32_t timingr;
|
||||
/**
|
||||
* @brief CR1 register initialization.
|
||||
* @note Leave to zero unless you know what you are doing.
|
||||
*/
|
||||
uint32_t cr1;
|
||||
/**
|
||||
* @brief CR2 register initialization.
|
||||
* @note Only the ADD10 bit can eventually be specified here.
|
||||
*/
|
||||
uint32_t cr2;
|
||||
} I2CConfig;
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,6 +17,20 @@
|
|||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
/*
|
||||
* Timing values are taken from the RM except the PRESC set to 9 because
|
||||
* the input clock is 72MHz.
|
||||
* The timings are critical, please always refer to the STM32 Reference
|
||||
* Manual before attempting changes.
|
||||
*/
|
||||
static const I2CConfig i2cconfig = {
|
||||
STM32_TIMINGR_PRESC(8U) | /* 72MHz/9 = 8MHz I2CCLK. */
|
||||
STM32_TIMINGR_SCLDEL(3U) | STM32_TIMINGR_SDADEL(3U) |
|
||||
STM32_TIMINGR_SCLH(3U) | STM32_TIMINGR_SCLL(9U),
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
/*
|
||||
* This is a periodic thread that does absolutely nothing except flashing
|
||||
* a LED.
|
||||
|
@ -49,6 +63,11 @@ int main(void) {
|
|||
halInit();
|
||||
chSysInit();
|
||||
|
||||
/*
|
||||
* Starting the I2C driver 2.
|
||||
*/
|
||||
i2cStart(&I2CD2, &i2cconfig);
|
||||
|
||||
/*
|
||||
* Starting the blinker thread.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue