Add functions to work with a 74HC595 shift register
This commit is contained in:
parent
3727225940
commit
0e27f675dd
|
@ -0,0 +1,27 @@
|
||||||
|
#include <base.h>
|
||||||
|
#include <reg.h>
|
||||||
|
|
||||||
|
void shift_register_initialize(shift_register_t *reg) {
|
||||||
|
set_line_direction(®->output, LINE_OUT);
|
||||||
|
set_line_direction(®->shift_clock, LINE_OUT);
|
||||||
|
set_line_direction(®->latch_clock, LINE_OUT);
|
||||||
|
|
||||||
|
clear_line(®->output);
|
||||||
|
clear_line(®->shift_clock);
|
||||||
|
clear_line(®->latch_clock);
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_byte_lsb(shift_register_t *reg, uint8_t byte) {
|
||||||
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
|
byte & _BV(i) ? set_line(®->output) : clear_line(®->output);
|
||||||
|
strobe_line(®->shift_clock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void shift_out(shift_register_t *reg, uint8_t byte) {
|
||||||
|
send_byte_lsb(reg, byte);
|
||||||
|
clear_line(®->output);
|
||||||
|
strobe_line(®->latch_clock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
#ifndef __REG_H__
|
||||||
|
#define __REG_H__
|
||||||
|
|
||||||
|
typedef struct SHIFT_REGISTER {
|
||||||
|
gpio_t output;
|
||||||
|
gpio_t shift_clock;
|
||||||
|
gpio_t latch_clock;
|
||||||
|
} shift_register_t;
|
||||||
|
|
||||||
|
|
||||||
|
void shift_register_initialize(shift_register_t *reg);
|
||||||
|
void shift_out(shift_register_t *reg, uint8_t byte);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue