From e32ff92716c745b1d4e352cbbb37287b4f2500d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=B3=20=D0=91=D0=BE=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Sun, 2 Feb 2025 21:12:33 +0200 Subject: [PATCH] fmrds 2 --- radio.c | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/radio.c b/radio.c index 40122c0..7f2ad2a 100644 --- a/radio.c +++ b/radio.c @@ -70,22 +70,31 @@ uint8_t radio_get_status(void) { #define RST_PIN PB4 + +uint8_t radio_read_cts(void) { + uint8_t cts = 0; + uint8_t rcount = 20; + i2c_start(); + i2c_write(RX_I2CADDR); + i2c_write(CMD_GET_INTSTAT); + i2c_restart(); + i2c_write(RX_I2CADDR | BIT(I2CADDR_WRITE_BIT)); + for (uint8_t i = 0; i < rcount; i++) { + cts = i2c_read_ack(); + if ((cts &= BIT(STATUS_CTS_BIT)) != 0) { + break; + } + } + i2c_read_nack(); + i2c_stop(); + return cts; +} + + void radio_wait_cts(void) { uint8_t cts = 0; - uint8_t rcount = 17; while ((cts &= BIT(STATUS_CTS_BIT)) == 0) { - i2c_start(); - i2c_write(RX_I2CADDR); - i2c_write(CMD_GET_INTSTAT); - i2c_restart(); - i2c_write(RX_I2CADDR | BIT(I2CADDR_WRITE_BIT)); - for (uint8_t i = 0; i < rcount; i++) { - cts = i2c_read_ack(); - if ((cts &= BIT(STATUS_CTS_BIT)) != 0) { - break; - } - } - i2c_stop(); + cts = radio_read_cts(); } } @@ -100,7 +109,6 @@ void radio_powerup_fmrds(void) { } void radio_set_fm_freq(uint16_t freq) { - //uint8_t cts = 0x00; i2c_start(); i2c_write(RX_I2CADDR); @@ -111,9 +119,12 @@ void radio_set_fm_freq(uint16_t freq) { i2c_write(0); #if 0 + uint8_t cts = 0x00; + i2c_restart(); i2c_write(RX_I2CADDR | BIT(I2CADDR_WRITE_BIT)); - while (cts == 0x00) { + + while (cts == 0) { cts = i2c_read_ack(); cts &= BIT(STATUS_CTS_BIT); } @@ -142,7 +153,7 @@ void radio_set_rx_mute(void) { i2c_write(HI_BYTE(PROP_RX_HARD_MUTE)); i2c_write(LO_BYTE(PROP_RX_HARD_MUTE)); i2c_write(0x00); - i2c_write(0x00 | BIT(PROP_HMUTE_R_BIT)); + i2c_write(BIT(PROP_HMUTE_L_BIT)); i2c_stop(); } @@ -180,20 +191,17 @@ void radio_init(void) { radio_powerup_fmrds(); radio_wait_cts(); - uint16_t freq = 10010; radio_set_fm_freq(freq); radio_wait_cts(); + radio_set_rx_mute(); + radio_wait_cts(); + uint8_t volume = 38; radio_set_rx_volume(volume); radio_wait_cts(); return; - - radio_set_rx_mute(); - radio_wait_cts(); } -void radio_unmute(void) {} -void radio_volume(void) {}