/ bf16-brd-control.c
bf16-brd-control.c
1 #include "bf16-brd-control.h" 2 #include "miner.h" 3 4 #define BV(x) (1 << x) 5 6 static uint32_t ctrl_read(uint8_t gpio, uint8_t reg) 7 { 8 gpio_rq_t rq; 9 10 rq.gpioIndex = gpio; 11 rq.regIndex = reg; 12 gpio_read_ctrl(&rq); 13 14 return rq.data; 15 } 16 17 static int8_t ctrl_write(uint8_t gpio, uint8_t reg, uint32_t data) 18 { 19 gpio_rq_t rq; 20 21 rq.gpioIndex = gpio; 22 rq.regIndex = reg; 23 rq.data = data; 24 return gpio_write_ctrl(&rq); 25 } 26 27 void brd_init(void) 28 { 29 uint32_t data = ctrl_read(GPIO0_INDEX, OE_REG_INDEX); 30 data &= ~(BV(CH1_MSP_RST_PIN) | BV(LED_GREEN_PIN)); 31 ctrl_write(GPIO0_INDEX, OE_REG_INDEX, data); 32 33 data = ctrl_read(GPIO1_INDEX, OE_REG_INDEX); 34 data &= ~(BV(LED_RED_PIN) | BV(CH2_MSP_RST_PIN) | BV(CH1_SPI_RES_PIN)); 35 ctrl_write(GPIO1_INDEX, OE_REG_INDEX, data); 36 37 data = ctrl_read(GPIO2_INDEX, OE_REG_INDEX); 38 data &= ~(BV(BUZZER_PIN) | BV(CH2_SPI_RES_PIN)); 39 ctrl_write(GPIO2_INDEX, OE_REG_INDEX, data); 40 } 41 42 int get_hw_ver(void) 43 { 44 uint32_t data1 = ctrl_read(GPIO2_INDEX, DATAIN_REG_INDEX); 45 uint32_t data2 = ctrl_read(GPIO1_INDEX, DATAIN_REG_INDEX); 46 47 uint8_t result = BIT_STATE(data1, BRD_VER0_PIN); 48 result |= BIT_STATE(data1, BRD_VER1_PIN) ? 2 : 0; 49 result |= BIT_STATE(data1, BRD_VER2_PIN) ? 4 : 0; 50 result |= BIT_STATE(data2, BRD_VER3_PIN) ? 8 : 0; 51 52 return result; 53 } 54 55 int get_btn_fr(void) 56 { 57 uint32_t data = ctrl_read(GPIO2_INDEX, DATAIN_REG_INDEX); 58 return BIT_INV_STATE(data, BRD_BUT1_PIN); 59 } 60 61 int get_btn_discovery(void) 62 { 63 uint32_t data = ctrl_read(GPIO0_INDEX, DATAIN_REG_INDEX); 64 return BIT_INV_STATE(data, BRD_BUT2_PIN); 65 } 66 67 int get_ch1_det(void) 68 { 69 uint32_t data = ctrl_read(GPIO0_INDEX, DATAIN_REG_INDEX); 70 return BIT_INV_STATE(data, BRD_DET1_PIN); 71 } 72 73 int get_ch2_det(void) 74 { 75 uint32_t data = ctrl_read(GPIO1_INDEX, DATAIN_REG_INDEX); 76 return BIT_INV_STATE(data, BRD_DET2_PIN); 77 } 78 79 static uint8_t _direct_state_reg_index(uint8_t state) 80 { 81 return (state != 0) ? DATASET_REG_INDEX : DATACLR_REG_INDEX; 82 } 83 84 static uint8_t _inverse_state_reg_index(uint8_t state) 85 { 86 return (state != 0) ? DATACLR_REG_INDEX : DATASET_REG_INDEX; 87 } 88 89 int8_t set_buzzer(uint8_t state) 90 { 91 return ctrl_write(GPIO2_INDEX, _direct_state_reg_index(state), BV(BUZZER_PIN)); 92 } 93 94 int8_t set_led_green(uint8_t state) 95 { 96 return ctrl_write(GPIO0_INDEX, _direct_state_reg_index(state), BV(LED_GREEN_PIN)); 97 } 98 99 int8_t set_led_red(uint8_t state) 100 { 101 return ctrl_write(GPIO1_INDEX, _direct_state_reg_index(state), BV(LED_RED_PIN)); 102 } 103 104 int8_t set_ch1_rst(uint8_t state) 105 { 106 return ctrl_write(GPIO0_INDEX, _inverse_state_reg_index(state), BV(CH1_MSP_RST_PIN)); 107 } 108 109 int8_t set_ch2_rst(uint8_t state) 110 { 111 return ctrl_write(GPIO1_INDEX, _inverse_state_reg_index(state), BV(CH2_MSP_RST_PIN)); 112 } 113 114 int8_t set_ch1_spi(uint8_t state) 115 { 116 return ctrl_write(GPIO2_INDEX, _direct_state_reg_index(state), BV(CH1_SPI_RES_PIN)); 117 } 118 119 int8_t set_ch2_spi(uint8_t state) 120 { 121 return ctrl_write(GPIO1_INDEX, _direct_state_reg_index(state), BV(CH2_SPI_RES_PIN)); 122 }