Add the write method on the YMF262 hal and cretead a policy based system to manipulate gpio
This commit is contained in:
parent
682f8e1753
commit
7898563f39
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef FAKE_GPIO_HPP
|
||||
#define FAKE_GPIO_HPP
|
||||
|
||||
|
||||
#include <cstdint>
|
||||
#include "GPIO.hpp"
|
||||
|
||||
struct FakeGpio {
|
||||
void set_data_bus(uint8_t val){}
|
||||
void set_a0(Port port){}
|
||||
void set_a1(Bank address_bank){}
|
||||
void set_cs(State state){}
|
||||
void set_wr(State state){}
|
||||
void set_ic(State state){}
|
||||
void set_rd(State state){}
|
||||
void delay_ticks(uint32_t n){}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef GPIO_HPP
|
||||
#define GPIO_HPP
|
||||
|
||||
enum class State{
|
||||
ACTIVE,
|
||||
INACTIVE
|
||||
};
|
||||
|
||||
|
||||
enum class Port{
|
||||
DATA,
|
||||
ADDRESS
|
||||
};
|
||||
|
||||
enum class Bank{
|
||||
BANK_0,
|
||||
BANK_1,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -2,11 +2,13 @@
|
|||
#define YMF262_HAL_HPP
|
||||
|
||||
#include <cstdint>
|
||||
#include "GPIO.hpp"
|
||||
|
||||
template <class GPIOPolicy>
|
||||
class YMF262_HAL{
|
||||
private:
|
||||
GPIOPolicy _gpio;
|
||||
|
||||
GPIOPolicy _gpio;
|
||||
uint32_t _t_icw_ticks;
|
||||
uint32_t _t_as_ticks;
|
||||
uint32_t _t_ah_ticks;
|
||||
|
|
@ -20,6 +22,21 @@ class YMF262_HAL{
|
|||
uint32_t _t_rdh_ticks;
|
||||
uint32_t _t_recovery_ticks;
|
||||
|
||||
void write_bus(Bank bank, Port port, uint8_t data){
|
||||
_gpio.set_a0(port);
|
||||
_gpio.set_a1(bank);
|
||||
_gpio.delay_ticks(_t_as_ticks);
|
||||
_gpio.set_cs(State::ACTIVE);
|
||||
_gpio.set_wr(State::ACTIVE);
|
||||
_gpio.set_data_bus(data);
|
||||
_gpio.delay_ticks(_t_wds_ticks);
|
||||
_gpio.set_wr(State::INACTIVE);
|
||||
_gpio.set_cs(State::INACTIVE);
|
||||
_gpio.delay_ticks(_t_wdh_ticks);
|
||||
_gpio.delay_ticks(_t_recovery_ticks);
|
||||
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
|
||||
|
|
@ -38,6 +55,12 @@ class YMF262_HAL{
|
|||
_t_acc_ticks = (uint32_t)(150 * ticks_per_ns);
|
||||
_t_rdh_ticks = (uint32_t)(10 * ticks_per_ns);
|
||||
};
|
||||
|
||||
void write(Bank bank, uint8_t reg, uint8_t data){
|
||||
write_bus(bank,Port::ADDRESS,reg);
|
||||
write_bus(bank,Port::DATA,data);
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue