aboutsummaryrefslogtreecommitdiff
path: root/docs/i2c_driver.md
diff options
context:
space:
mode:
authorskullY <skullydazed@gmail.com>2019-01-27 16:19:55 -0800
committerskullydazed <skullydazed@users.noreply.github.com>2019-02-10 15:37:12 -0800
commit24df54b80794144907db94c2cb5ceca928700e2d (patch)
treeb18b05f7c108c4db34b4796773aa4f93c6e39fe5 /docs/i2c_driver.md
parentcc738e32dd02cbc6e10f3e229332390d3b886e4d (diff)
downloadqmk_firmware-24df54b80794144907db94c2cb5ceca928700e2d.tar.gz
qmk_firmware-24df54b80794144907db94c2cb5ceca928700e2d.zip
Add documentation for led matrix
Diffstat (limited to 'docs/i2c_driver.md')
-rw-r--r--docs/i2c_driver.md18
1 files changed, 11 insertions, 7 deletions
diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md
index ea24dc64f..18546fc62 100644
--- a/docs/i2c_driver.md
+++ b/docs/i2c_driver.md
@@ -33,8 +33,8 @@ The following defines can be used to configure the I2C master driver.
33 33
34|Variable |Description |Default| 34|Variable |Description |Default|
35|------------------|---------------------------------------------------|-------| 35|------------------|---------------------------------------------------|-------|
36|`#F_SCL` |Clock frequency in Hz |400KHz | 36|`F_SCL` |Clock frequency in Hz |400KHz |
37|`#Prescaler` |Divides master clock to aid in I2C clock selection |1 | 37|`Prescaler` |Divides master clock to aid in I2C clock selection |1 |
38 38
39AVRs usually have set GPIO which turn into I2C pins, therefore no further configuration is required. 39AVRs usually have set GPIO which turn into I2C pins, therefore no further configuration is required.
40 40
@@ -63,20 +63,24 @@ Lastly, we need to assign the correct GPIO pins depending on the I2C hardware dr
63 63
64By default the I2C1 hardware driver is assumed to be used. If another hardware driver is used, `#define I2C_DRIVER I2CDX` should be added to the `config.h` file with X being the number of hardware driver used. For example is I2C3 is enabled, the `config.h` file should contain `#define I2C_DRIVER I2CD3`. This aligns the QMK I2C driver with the Chibios I2C driver. 64By default the I2C1 hardware driver is assumed to be used. If another hardware driver is used, `#define I2C_DRIVER I2CDX` should be added to the `config.h` file with X being the number of hardware driver used. For example is I2C3 is enabled, the `config.h` file should contain `#define I2C_DRIVER I2CD3`. This aligns the QMK I2C driver with the Chibios I2C driver.
65 65
66STM32 MCUs allows a variety of pins to be configured as I2C pins depending on the hardware driver used. By default B6 and B7 are set to I2C. 66STM32 MCUs allows a variety of pins to be configured as I2C pins depending on the hardware driver used. By default B6 and B7 are set to I2C. You can use these defines to set your i2c pins:
67 67
68This can be changed by declaring the `i2c_init` function which intentionally has a weak attribute. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function: 68| Variable | Description | Default |
69|-------------|----------------------------------------------|---------|
70| `I2C1_BANK` | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) | `GPIOB` |
71| `I2C1_SCL` | The pin number for the SCL pin (0-9) | `6` |
72| `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` |
73
74You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:
69 75
70```C 76```C
71void i2c_init(void) 77void i2c_init(void)
72{ 78{
73 setPinInput(B6); // Try releasing special pins for a short time 79 setPinInput(B6); // Try releasing special pins for a short time
74 setPinInput(B7); 80 setPinInput(B7);
75 chThdSleepMilliseconds(10); // Wait for the release to happen 81 wait_ms(10); // Wait for the release to happen
76 82
77 palSetPadMode(GPIOB, 6, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); // Set B6 to I2C function 83 palSetPadMode(GPIOB, 6, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); // Set B6 to I2C function
78 palSetPadMode(GPIOB, 7, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); // Set B7 to I2C function 84 palSetPadMode(GPIOB, 7, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); // Set B7 to I2C function
79} 85}
80``` 86```
81
82