aboutsummaryrefslogtreecommitdiff
path: root/drivers/arm
diff options
context:
space:
mode:
authorYaotian Feng <codetector@codetector.cn>2019-09-25 14:52:17 -0400
committerDrashna Jaelre <drashna@live.com>2019-09-25 11:52:17 -0700
commitc61d7d7cb001498e6edf09a9ebc6124c1fe6ed97 (patch)
tree74045b30c256bed3b533b786edd2af06ee20ced0 /drivers/arm
parenteac4ce972d951855ee168705b46bc9421a4d4deb (diff)
downloadqmk_firmware-c61d7d7cb001498e6edf09a9ebc6124c1fe6ed97.tar.gz
qmk_firmware-c61d7d7cb001498e6edf09a9ebc6124c1fe6ed97.zip
[Keyboard] Added support for ErgoDox with STM32 Microcontroller (#5398)
* Began Work On STM32 Ergodox Changes to be committed: new file: keyboards/ergodox_stm32/config.h new file: keyboards/ergodox_stm32/rules.mk * test * Now it compile. Not linking thou * Screw this Linker. It links now! * Blinkly Keyboard * bootloader test code * Working on matrix / i2c stuff * Progress (LED Blink) * Progress on MCP_23017 Status Flag * [WIP] * update * Works! Remeber to change back the bootloader address when the new bootloadrer is ready. * Time to go debug the i2c * Finally, it now works with PCB Rev 1.0.2 * updated for rev.2 pcb * minor compilation fix * Why when debugger is enabled then everything works. * Remeber to call init functions. * Update arm i2c driver to support STM32F103 series device. * fix include once header. Replaced with #pragma once. * complication test
Diffstat (limited to 'drivers/arm')
-rw-r--r--drivers/arm/i2c_master.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/arm/i2c_master.c b/drivers/arm/i2c_master.c
index 18068d3a6..fcfe85b56 100644
--- a/drivers/arm/i2c_master.c
+++ b/drivers/arm/i2c_master.c
@@ -32,6 +32,17 @@
32 32
33static uint8_t i2c_address; 33static uint8_t i2c_address;
34 34
35// ChibiOS uses two initialization structure for v1 and v2/v3 i2c APIs.
36// The F1 series uses the v1 api, which have to initialized this way.
37#ifdef STM32F103xB
38static const I2CConfig i2cconfig = {
39 OPMODE_I2C,
40 400000,
41 FAST_DUTY_CYCLE_2,
42};
43#else
44// This configures the I2C clock to 400khz assuming a 72Mhz clock
45// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
35static const I2CConfig i2cconfig = { 46static const I2CConfig i2cconfig = {
36#ifdef USE_I2CV1 47#ifdef USE_I2CV1
37 I2C1_OPMODE, 48 I2C1_OPMODE,
@@ -41,6 +52,7 @@ static const I2CConfig i2cconfig = {
41 STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), 0, 0 52 STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), 0, 0
42#endif 53#endif
43}; 54};
55#endif
44 56
45static i2c_status_t chibios_to_qmk(const msg_t* status) { 57static i2c_status_t chibios_to_qmk(const msg_t* status) {
46 switch (*status) { 58 switch (*status) {
@@ -60,7 +72,6 @@ __attribute__((weak)) void i2c_init(void) {
60 palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT); 72 palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
61 73
62 chThdSleepMilliseconds(10); 74 chThdSleepMilliseconds(10);
63
64#ifdef USE_I2CV1 75#ifdef USE_I2CV1
65 palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN); 76 palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
66 palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN); 77 palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
@@ -68,8 +79,6 @@ __attribute__((weak)) void i2c_init(void) {
68 palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); 79 palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
69 palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); 80 palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
70#endif 81#endif
71
72 // i2cInit(); //This is invoked by halInit() so no need to redo it.
73} 82}
74 83
75i2c_status_t i2c_start(uint8_t address) { 84i2c_status_t i2c_start(uint8_t address) {