Relocate pca9555 driver to core (#6563)
* Move pca9555 files to central location * Get pca9555 boards compiling * Slight alignment of rules.mkbetter_chibios_wait 0.6.456
parent
a20e6aa022
commit
1c805b3d00
@ -1,78 +0,0 @@ |
|||||||
/* Copyright 2019
|
|
||||||
* |
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 2 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#include "i2c_master.h" |
|
||||||
#include "pca9555.h" |
|
||||||
|
|
||||||
#include "debug.h" |
|
||||||
|
|
||||||
#define SLAVE_TO_ADDR(n) (n << 1) |
|
||||||
#define TIMEOUT 100 |
|
||||||
|
|
||||||
enum { |
|
||||||
CMD_INPUT_0 = 0, |
|
||||||
CMD_INPUT_1, |
|
||||||
CMD_OUTPUT_0, |
|
||||||
CMD_OUTPUT_1, |
|
||||||
CMD_INVERSION_0, |
|
||||||
CMD_INVERSION_1, |
|
||||||
CMD_CONFIG_0, |
|
||||||
CMD_CONFIG_1, |
|
||||||
}; |
|
||||||
|
|
||||||
void pca9555_init(uint8_t slave_addr) { |
|
||||||
static uint8_t s_init = 0; |
|
||||||
if (!s_init) { |
|
||||||
i2c_init(); |
|
||||||
|
|
||||||
s_init = 1; |
|
||||||
} |
|
||||||
|
|
||||||
// TODO: could check device connected
|
|
||||||
// i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE);
|
|
||||||
// i2c_stop();
|
|
||||||
} |
|
||||||
|
|
||||||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) { |
|
||||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); |
|
||||||
uint8_t cmd = port ? CMD_CONFIG_1 : CMD_CONFIG_0; |
|
||||||
|
|
||||||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); |
|
||||||
if (ret != I2C_STATUS_SUCCESS) { |
|
||||||
print("pca9555_set_config::FAILED\n"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) { |
|
||||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); |
|
||||||
uint8_t cmd = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0; |
|
||||||
|
|
||||||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); |
|
||||||
if (ret != I2C_STATUS_SUCCESS) { |
|
||||||
print("pca9555_set_output::FAILED\n"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) { |
|
||||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); |
|
||||||
uint8_t cmd = port ? CMD_INPUT_1 : CMD_INPUT_0; |
|
||||||
|
|
||||||
uint8_t data = 0; |
|
||||||
i2c_status_t ret = i2c_readReg(addr, cmd, &data, sizeof(data), TIMEOUT); |
|
||||||
if (ret != I2C_STATUS_SUCCESS) { |
|
||||||
print("pca9555_readPins::FAILED\n"); |
|
||||||
} |
|
||||||
return data; |
|
||||||
} |
|
@ -1,55 +0,0 @@ |
|||||||
/* Copyright 2019
|
|
||||||
* |
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 2 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#pragma once |
|
||||||
|
|
||||||
/*
|
|
||||||
PCA9555 |
|
||||||
,----------. |
|
||||||
SDA --| SDA P00 |-- P00 |
|
||||||
SCL --| SCL P01 |-- P01 |
|
||||||
INT --| INT P02 |-- P02 |
|
||||||
| P03 |-- P03 |
|
||||||
A0 --| A0 P04 |-- P04 |
|
||||||
A1 --| A1 P05 |-- P05 |
|
||||||
A2 --| A2 P06 |-- P06 |
|
||||||
| P07 |-- P07 |
|
||||||
| | |
|
||||||
| P10 |-- P10 |
|
||||||
| P11 |-- P11 |
|
||||||
| P12 |-- P12 |
|
||||||
| P13 |-- P13 |
|
||||||
| P14 |-- P14 |
|
||||||
| P15 |-- P15 |
|
||||||
| P16 |-- P16 |
|
||||||
| P17 |-- P17 |
|
||||||
`----------' |
|
||||||
*/ |
|
||||||
|
|
||||||
#define PCA9555_PORT0 0 |
|
||||||
#define PCA9555_PORT1 1 |
|
||||||
|
|
||||||
#define ALL_OUTPUT 0 |
|
||||||
#define ALL_INPUT 0xFF |
|
||||||
#define ALL_LOW 0 |
|
||||||
#define ALL_HIGH 0xFF |
|
||||||
|
|
||||||
void pca9555_init(uint8_t slave_addr); |
|
||||||
|
|
||||||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf); |
|
||||||
|
|
||||||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf); |
|
||||||
|
|
||||||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port); |
|
@ -1,78 +0,0 @@ |
|||||||
/* Copyright 2019
|
|
||||||
* |
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 2 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#include "i2c_master.h" |
|
||||||
#include "pca9555.h" |
|
||||||
|
|
||||||
#include "debug.h" |
|
||||||
|
|
||||||
#define SLAVE_TO_ADDR(n) (n << 1) |
|
||||||
#define TIMEOUT 100 |
|
||||||
|
|
||||||
enum { |
|
||||||
CMD_INPUT_0 = 0, |
|
||||||
CMD_INPUT_1, |
|
||||||
CMD_OUTPUT_0, |
|
||||||
CMD_OUTPUT_1, |
|
||||||
CMD_INVERSION_0, |
|
||||||
CMD_INVERSION_1, |
|
||||||
CMD_CONFIG_0, |
|
||||||
CMD_CONFIG_1, |
|
||||||
}; |
|
||||||
|
|
||||||
void pca9555_init(uint8_t slave_addr) { |
|
||||||
static uint8_t s_init = 0; |
|
||||||
if (!s_init) { |
|
||||||
i2c_init(); |
|
||||||
|
|
||||||
s_init = 1; |
|
||||||
} |
|
||||||
|
|
||||||
// TODO: could check device connected
|
|
||||||
// i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE);
|
|
||||||
// i2c_stop();
|
|
||||||
} |
|
||||||
|
|
||||||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) { |
|
||||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); |
|
||||||
uint8_t cmd = port ? CMD_CONFIG_1 : CMD_CONFIG_0; |
|
||||||
|
|
||||||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); |
|
||||||
if (ret != I2C_STATUS_SUCCESS) { |
|
||||||
print("pca9555_set_config::FAILED\n"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) { |
|
||||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); |
|
||||||
uint8_t cmd = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0; |
|
||||||
|
|
||||||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); |
|
||||||
if (ret != I2C_STATUS_SUCCESS) { |
|
||||||
print("pca9555_set_output::FAILED\n"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) { |
|
||||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); |
|
||||||
uint8_t cmd = port ? CMD_INPUT_1 : CMD_INPUT_0; |
|
||||||
|
|
||||||
uint8_t data = 0; |
|
||||||
i2c_status_t ret = i2c_readReg(addr, cmd, &data, sizeof(data), TIMEOUT); |
|
||||||
if (ret != I2C_STATUS_SUCCESS) { |
|
||||||
print("pca9555_readPins::FAILED\n"); |
|
||||||
} |
|
||||||
return data; |
|
||||||
} |
|
@ -1,55 +0,0 @@ |
|||||||
/* Copyright 2019
|
|
||||||
* |
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 2 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#pragma once |
|
||||||
|
|
||||||
/*
|
|
||||||
PCA9555 |
|
||||||
,----------. |
|
||||||
SDA --| SDA P00 |-- P00 |
|
||||||
SCL --| SCL P01 |-- P01 |
|
||||||
INT --| INT P02 |-- P02 |
|
||||||
| P03 |-- P03 |
|
||||||
A0 --| A0 P04 |-- P04 |
|
||||||
A1 --| A1 P05 |-- P05 |
|
||||||
A2 --| A2 P06 |-- P06 |
|
||||||
| P07 |-- P07 |
|
||||||
| | |
|
||||||
| P10 |-- P10 |
|
||||||
| P11 |-- P11 |
|
||||||
| P12 |-- P12 |
|
||||||
| P13 |-- P13 |
|
||||||
| P14 |-- P14 |
|
||||||
| P15 |-- P15 |
|
||||||
| P16 |-- P16 |
|
||||||
| P17 |-- P17 |
|
||||||
`----------' |
|
||||||
*/ |
|
||||||
|
|
||||||
#define PCA9555_PORT0 0 |
|
||||||
#define PCA9555_PORT1 1 |
|
||||||
|
|
||||||
#define ALL_OUTPUT 0 |
|
||||||
#define ALL_INPUT 0xFF |
|
||||||
#define ALL_LOW 0 |
|
||||||
#define ALL_HIGH 0xFF |
|
||||||
|
|
||||||
void pca9555_init(uint8_t slave_addr); |
|
||||||
|
|
||||||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf); |
|
||||||
|
|
||||||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf); |
|
||||||
|
|
||||||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port); |
|
Loading…
Reference in new issue