feat(ex02): done
This commit is contained in:
parent
b7580c043c
commit
0fe7dbdc0f
23 changed files with 1469 additions and 0 deletions
57
ex02/include/i2c.h
Normal file
57
ex02/include/i2c.h
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#ifndef I2C_H
|
||||
#define I2C_H
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <util/twi.h>
|
||||
|
||||
#define PCA9555_ADDR_OTHER 0b0100111
|
||||
#define PCA9555_ADDR_SELF 0b0100000
|
||||
|
||||
#define REG_INPUT_PORT0 0x00
|
||||
#define REG_INPUT_PORT1 0x01
|
||||
|
||||
#define REG_OUTPUT_PORT0 0x02
|
||||
#define REG_OUTPUT_PORT1 0x03
|
||||
|
||||
#define REG_CONFIG_PORT0 0x06
|
||||
#define REG_CONFIG_PORT1 0x07
|
||||
|
||||
#define I2C_CLOCK 100000UL
|
||||
|
||||
#define I2C_ADDR(ADDR, RW) ((ADDR) << 1 | (RW & 1))
|
||||
|
||||
void i2c_init(void);
|
||||
void i2c_start(void);
|
||||
void i2c_stop(void);
|
||||
void i2c_write(uint8_t);
|
||||
uint8_t i2c_read_nack(void);
|
||||
uint8_t i2c_read_ack(void);
|
||||
uint8_t pca9555_read(uint8_t addr, uint8_t reg);
|
||||
|
||||
void pca9555_write(uint8_t addr, uint8_t reg, uint8_t value);
|
||||
|
||||
static inline void pca9555_set_output(uint8_t addr, uint8_t port, uint8_t mask) {
|
||||
uint8_t cfg = pca9555_read(addr, port);
|
||||
cfg &= ~mask;
|
||||
pca9555_write(addr, port, cfg);
|
||||
}
|
||||
|
||||
static inline void pca9555_set_low(uint8_t addr, uint8_t port, uint8_t mask) {
|
||||
uint8_t out = pca9555_read(addr, port);
|
||||
out &= ~mask; // clear bit
|
||||
pca9555_write(addr, port, out);
|
||||
}
|
||||
|
||||
static inline void pca9555_set_high(uint8_t addr, uint8_t port, uint8_t mask) {
|
||||
uint8_t out = pca9555_read(addr, port);
|
||||
out |= mask; // set bit;
|
||||
pca9555_write(addr, port, out);
|
||||
}
|
||||
|
||||
static inline void pca9555_toggle(uint8_t addr, uint8_t port, uint8_t mask) {
|
||||
uint8_t out = pca9555_read(addr, port);
|
||||
out ^= mask;
|
||||
pca9555_write(addr, port, out);
|
||||
}
|
||||
|
||||
#endif /* I2C_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue