Skip to content

Commit

Permalink
Closes #2, set redeye to high after break
Browse files Browse the repository at this point in the history
  • Loading branch information
LLeny committed Oct 19, 2024
1 parent f3cbc57 commit f5b6314
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "holani"
version = "0.6.3"
version = "0.6.4"
edition = "2021"

[dependencies]
Expand Down
2 changes: 1 addition & 1 deletion src/mikey/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ impl Mikey {
bus.set_status(BusStatus::PeekDone);
}
MikeyInstruction::PokeSerCtl => {
self.registers.set_serctl(self.registers.data_r() as u8);
self.registers.set_serctl(&mut self.uart, self.registers.data_r() as u8);
self.registers.reset_ir();
trace!("< Poke");
bus.set_status(BusStatus::PokeDone);
Expand Down
7 changes: 6 additions & 1 deletion src/mikey/registers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,17 @@ impl MikeyRegisters {
self.serctl_r.bits()
}

pub fn set_serctl(&mut self, v: u8) {
pub fn set_serctl(&mut self, uart: &mut Uart, v: u8) {
let brk = self.serctl_w_is_flag_set(SerCtlW::tx_brk);
self.serctl_w = match SerCtlW::from_bits(v) {
Some(bits) => bits,
None => SerCtlW::empty()
};

if brk && !self.serctl_w_is_flag_set(SerCtlW::tx_brk) { //Set redeye to high if break has been disabled
uart.set_redeye_pin(uart::redeye_status::RedeyeStatus::High);
}

if self.serctl_w_is_flag_set(SerCtlW::reset_err) {
self.serctl_r_disable_flag(SerCtlR::par_err);
self.serctl_r_disable_flag(SerCtlR::frame_err);
Expand Down
32 changes: 20 additions & 12 deletions src/mikey/uart/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ impl Uart {

if let Some(to_send) = self.transmit_register.pop() {
self.set_redeye_pin(to_send);
}
}
}

fn load_transmit_data(&mut self, mut data: u8, regs: &mut MikeyRegisters) {
Expand Down Expand Up @@ -152,16 +152,24 @@ impl Uart {
self.receive_register_len += 1;
}
9 => {
let par = bool_parity!(self.receive_register_buffer.count_ones() & 1 == 1);
if par == RedeyeStatus::High {
regs.serctl_r_enable_flag(SerCtlR::par_bit);
} else {
regs.serctl_r_disable_flag(SerCtlR::par_bit);
}
if par != redeye_status {
trace!("Parity Error");
regs.serctl_r_enable_flag(SerCtlR::par_err);
}
match regs.serctl_w_is_flag_set(SerCtlW::par_en) {
true => {
let par = bool_parity!(self.receive_register_buffer.count_ones() & 1 == 1);
if par == RedeyeStatus::High {
regs.serctl_r_enable_flag(SerCtlR::par_bit);
} else {
regs.serctl_r_disable_flag(SerCtlR::par_bit);
}
if par != redeye_status {
trace!("Parity Error");
regs.serctl_r_enable_flag(SerCtlR::par_err);
}
}
false => if redeye_status != bool_parity!(regs.serctl_w_is_flag_set(SerCtlW::par_even)) {
trace!("Parity Error");
regs.serctl_r_enable_flag(SerCtlR::par_err);
}
}
self.receive_register_len += 1;
}
10 => {
Expand Down Expand Up @@ -201,7 +209,7 @@ impl Uart {
regs.serctl_r_disable_flag(SerCtlR::tx_empty);
}

fn set_redeye_pin(&mut self, status: RedeyeStatus) {
pub fn set_redeye_pin(&mut self, status: RedeyeStatus) {
self.redeye_pin.set(status);
}

Expand Down

0 comments on commit f5b6314

Please sign in to comment.