cursed input flags stuff
This commit is contained in:
parent
b1d7574a80
commit
485f617515
2 changed files with 56 additions and 27 deletions
|
|
@ -144,6 +144,21 @@ impl Default for InputFlags {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl InputFlags {
|
||||||
|
pub fn set_sense_coin_flag(&mut self, val: bool) {
|
||||||
|
self.sense_coin_flag = val;
|
||||||
|
}
|
||||||
|
pub fn set_main_btn_flag(&mut self, val: bool) {
|
||||||
|
self.main_btn_flag = val;
|
||||||
|
}
|
||||||
|
pub fn set_volume_btn_flag(&mut self, val: bool) {
|
||||||
|
self.volume_btn_flag = val;
|
||||||
|
}
|
||||||
|
pub fn set_light_ctrl_btn_flag(&mut self, val: bool) {
|
||||||
|
self.light_ctrl_btn_flag = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static mut INPUT_FLAGS: InputFlags = InputFlags {
|
static mut INPUT_FLAGS: InputFlags = InputFlags {
|
||||||
sense_coin_flag: false,
|
sense_coin_flag: false,
|
||||||
main_btn_flag: false,
|
main_btn_flag: false,
|
||||||
|
|
@ -157,7 +172,9 @@ impl Handler<hal::interrupt::typelevel::EXTI7_0> for Test {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("on_interrupt()");
|
println!("on_interrupt()");
|
||||||
critical_section::with(|_| unsafe {
|
critical_section::with(|_| unsafe {
|
||||||
INPUT_FLAGS = system::clear_interrupt(2, 6);
|
let flags = system::clear_interrupt(2, 6);
|
||||||
|
INPUT_FLAGS.sense_coin_flag = flags.sense_coin_flag;
|
||||||
|
INPUT_FLAGS.main_btn_flag = flags.main_btn_flag;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -249,11 +266,11 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
|
|
||||||
// adc
|
// adc
|
||||||
let mut adc = hal::adc::Adc::new(p.ADC1, Default::default());
|
let mut adc = hal::adc::Adc::new(p.ADC1, Default::default());
|
||||||
let mut adc_pin = p.PD4;
|
let mut batt_monitor_pin = p.PD4;
|
||||||
|
|
||||||
// adc2
|
// adc2
|
||||||
// let mut usb_detect_dc = hal::adc::Adc::new(p.ADC1, Default::default());
|
// let mut usb_detect_dc = hal::adc::Adc::new(p.ADC1, Default::default());
|
||||||
let mut usb_adc_pin = p.PD5;
|
let mut usb_detect_pin = p.PD5;
|
||||||
|
|
||||||
// println!("ADC_PIN CHANNEL: {}", adc_pin.channel().channel());
|
// println!("ADC_PIN CHANNEL: {}", adc_pin.channel().channel());
|
||||||
delay.delay_ms(1000);
|
delay.delay_ms(1000);
|
||||||
|
|
@ -268,20 +285,8 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
let volume_btn_pin = p.PC6;
|
let volume_btn_pin = p.PC6;
|
||||||
let light_ctrl_btn_pin = p.PC7;
|
let light_ctrl_btn_pin = p.PC7;
|
||||||
let amp_en = p.PC5;
|
let amp_en = p.PC5;
|
||||||
|
let extra_io_1 = p.PD0;
|
||||||
// println!(
|
let extra_io_2 = p.PD3;
|
||||||
// "coin pin: {} | coin port: {}",
|
|
||||||
// coin_pin.pin(),
|
|
||||||
// coin_pin.port()
|
|
||||||
// );
|
|
||||||
// println!(
|
|
||||||
// "push pin: {} | push port: {}",
|
|
||||||
// button_pin.pin(),
|
|
||||||
// button_pin.port()
|
|
||||||
// );
|
|
||||||
|
|
||||||
//2025-09-10 00:32:23.514: coin pin: 4 | coin port: 3
|
|
||||||
// 2025-09-10 00:32:23.515: push pin: 6 | push port: 3
|
|
||||||
|
|
||||||
// set up interrupts
|
// set up interrupts
|
||||||
unsafe { system::init_gpio_irq(sense_coin_pin.pin(), sense_coin_pin.port(), false, true) };
|
unsafe { system::init_gpio_irq(sense_coin_pin.pin(), sense_coin_pin.port(), false, true) };
|
||||||
|
|
@ -473,8 +478,8 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
}
|
}
|
||||||
|
|
||||||
if adc1_timer.need_service() {
|
if adc1_timer.need_service() {
|
||||||
let val = adc.convert(&mut adc_pin, hal::adc::SampleTime::CYCLES241);
|
let val = adc.convert(&mut batt_monitor_pin, hal::adc::SampleTime::CYCLES241);
|
||||||
let val = adc.convert(&mut usb_adc_pin, hal::adc::SampleTime::CYCLES241);
|
let val = adc.convert(&mut usb_detect_pin, hal::adc::SampleTime::CYCLES241);
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("ADC value: {}", val);
|
println!("ADC value: {}", val);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use hal::println;
|
||||||
pub unsafe fn init_gpio_irq(pin: u8, port: u8, rising: bool, falling: bool) {
|
pub unsafe fn init_gpio_irq(pin: u8, port: u8, rising: bool, falling: bool) {
|
||||||
critical_section::with(|_| {
|
critical_section::with(|_| {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("init_gpio_irq");
|
println!("init_gpio_irq {pin}:{port}");
|
||||||
let exti = &hal::pac::EXTI;
|
let exti = &hal::pac::EXTI;
|
||||||
let afio = &hal::pac::AFIO;
|
let afio = &hal::pac::AFIO;
|
||||||
|
|
||||||
|
|
@ -20,7 +20,6 @@ pub unsafe fn init_gpio_irq(pin: u8, port: u8, rising: bool, falling: bool) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: should return a vec of the interrupts
|
|
||||||
pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags {
|
pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags {
|
||||||
let mut input_flags = crate::InputFlags::default();
|
let mut input_flags = crate::InputFlags::default();
|
||||||
|
|
||||||
|
|
@ -36,27 +35,52 @@ pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags {
|
||||||
|
|
||||||
// We don't handle or change any EXTI lines above 24.
|
// We don't handle or change any EXTI lines above 24.
|
||||||
let bits = bits.0 & 0x00FFFFFF;
|
let bits = bits.0 & 0x00FFFFFF;
|
||||||
|
println!("bits: {bits:08x}");
|
||||||
|
|
||||||
// coin_flag
|
// coin_flag
|
||||||
if (bits & (0x1 << coin_pin)) != 0x0 {
|
if (bits & (0x1 << coin_pin)) != 0x0 {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("coin irq!");
|
println!("coin irq!");
|
||||||
input_flags.sense_coin_flag = true;
|
input_flags.sense_coin_flag = true;
|
||||||
// unsafe {
|
|
||||||
// INPUT_FLAGS.coin_flag = true;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// button_flag
|
// button_flag
|
||||||
if (bits & (0x1 << button_pin)) != 0x0 {
|
if (bits & (0x1 << button_pin)) != 0x0 {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("button irq!");
|
println!("main_btn irq!");
|
||||||
input_flags.main_btn_flag = true;
|
// CHECK PC6
|
||||||
// unsafe {
|
// unsafe {
|
||||||
// INPUT_FLAGS.button_flag = true;
|
// let mut val = 0;
|
||||||
|
// let reg: u32 = 0x40011008;
|
||||||
|
// val = (reg as *mut u32).read_volatile();
|
||||||
|
// if ((val >> 0x6) & 0x1) == 0x0 {
|
||||||
|
// input_flags.volume_btn_flag = true;
|
||||||
|
// #[cfg(feature = "enable_print")]
|
||||||
|
// println!("volume irq!");
|
||||||
|
// println!("CBANK: {val:08x}");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // CHECK PD6
|
||||||
|
// unsafe {
|
||||||
|
// let mut val = 0;
|
||||||
|
// let reg: u32 = 0x40011408;
|
||||||
|
// val = (reg as *mut u32).read_volatile();
|
||||||
|
// // if ((val >> 0x6) & 0x1) == 0x0 {
|
||||||
|
// input_flags.main_btn_flag = true;
|
||||||
|
// #[cfg(feature = "enable_print")]
|
||||||
|
// println!("main_btn irq!");
|
||||||
|
// println!("DBANK: {val:08x}");
|
||||||
|
// // }
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// light_ctrl_btn_flag
|
||||||
|
// if (bits & (0x1 << light_ctrl_btn_pin)) != 0x0 {
|
||||||
|
// #[cfg(feature = "enable_print")]
|
||||||
|
// println!("light ctrl btn irq!");
|
||||||
|
// input_flags.light_ctrl_btn_flag = true;
|
||||||
|
// }
|
||||||
|
|
||||||
// Clear pending - Clears the EXTI's line pending bits.
|
// Clear pending - Clears the EXTI's line pending bits.
|
||||||
exti.intfr().write(|w| w.0 = bits);
|
exti.intfr().write(|w| w.0 = bits);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue