123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include "bf16-brd-control.h"
- #include "miner.h"
- #define BV(x) (1 << x)
- static uint32_t ctrl_read(uint8_t gpio, uint8_t reg)
- {
- gpio_rq_t rq;
- rq.gpioIndex = gpio;
- rq.regIndex = reg;
- gpio_read_ctrl(&rq);
- return rq.data;
- }
- static int8_t ctrl_write(uint8_t gpio, uint8_t reg, uint32_t data)
- {
- gpio_rq_t rq;
- rq.gpioIndex = gpio;
- rq.regIndex = reg;
- rq.data = data;
- return gpio_write_ctrl(&rq);
- }
- void brd_init(void)
- {
- uint32_t data = ctrl_read(GPIO0_INDEX, OE_REG_INDEX);
- data &= ~(BV(CH1_MSP_RST_PIN) | BV(LED_GREEN_PIN));
- ctrl_write(GPIO0_INDEX, OE_REG_INDEX, data);
- data = ctrl_read(GPIO1_INDEX, OE_REG_INDEX);
- data &= ~(BV(LED_RED_PIN) | BV(CH2_MSP_RST_PIN) | BV(CH1_SPI_RES_PIN));
- ctrl_write(GPIO1_INDEX, OE_REG_INDEX, data);
- data = ctrl_read(GPIO2_INDEX, OE_REG_INDEX);
- data &= ~(BV(BUZZER_PIN) | BV(CH2_SPI_RES_PIN));
- ctrl_write(GPIO2_INDEX, OE_REG_INDEX, data);
- }
- int get_hw_ver(void)
- {
- uint32_t data1 = ctrl_read(GPIO2_INDEX, DATAIN_REG_INDEX);
- uint32_t data2 = ctrl_read(GPIO1_INDEX, DATAIN_REG_INDEX);
- uint8_t result = BIT_STATE(data1, BRD_VER0_PIN);
- result |= BIT_STATE(data1, BRD_VER1_PIN) ? 2 : 0;
- result |= BIT_STATE(data1, BRD_VER2_PIN) ? 4 : 0;
- result |= BIT_STATE(data2, BRD_VER3_PIN) ? 8 : 0;
- return result;
- }
- int get_btn_fr(void)
- {
- uint32_t data = ctrl_read(GPIO2_INDEX, DATAIN_REG_INDEX);
- return BIT_INV_STATE(data, BRD_BUT1_PIN);
- }
- int get_btn_discovery(void)
- {
- uint32_t data = ctrl_read(GPIO0_INDEX, DATAIN_REG_INDEX);
- return BIT_INV_STATE(data, BRD_BUT2_PIN);
- }
- int get_ch1_det(void)
- {
- uint32_t data = ctrl_read(GPIO0_INDEX, DATAIN_REG_INDEX);
- return BIT_INV_STATE(data, BRD_DET1_PIN);
- }
- int get_ch2_det(void)
- {
- uint32_t data = ctrl_read(GPIO1_INDEX, DATAIN_REG_INDEX);
- return BIT_INV_STATE(data, BRD_DET2_PIN);
- }
- static uint8_t _direct_state_reg_index(uint8_t state)
- {
- return (state != 0) ? DATASET_REG_INDEX : DATACLR_REG_INDEX;
- }
- static uint8_t _inverse_state_reg_index(uint8_t state)
- {
- return (state != 0) ? DATACLR_REG_INDEX : DATASET_REG_INDEX;
- }
- int8_t set_buzzer(uint8_t state)
- {
- return ctrl_write(GPIO2_INDEX, _direct_state_reg_index(state), BV(BUZZER_PIN));
- }
- int8_t set_led_green(uint8_t state)
- {
- return ctrl_write(GPIO0_INDEX, _direct_state_reg_index(state), BV(LED_GREEN_PIN));
- }
- int8_t set_led_red(uint8_t state)
- {
- return ctrl_write(GPIO1_INDEX, _direct_state_reg_index(state), BV(LED_RED_PIN));
- }
- int8_t set_ch1_rst(uint8_t state)
- {
- return ctrl_write(GPIO0_INDEX, _inverse_state_reg_index(state), BV(CH1_MSP_RST_PIN));
- }
- int8_t set_ch2_rst(uint8_t state)
- {
- return ctrl_write(GPIO1_INDEX, _inverse_state_reg_index(state), BV(CH2_MSP_RST_PIN));
- }
- int8_t set_ch1_spi(uint8_t state)
- {
- return ctrl_write(GPIO2_INDEX, _direct_state_reg_index(state), BV(CH1_SPI_RES_PIN));
- }
- int8_t set_ch2_spi(uint8_t state)
- {
- return ctrl_write(GPIO1_INDEX, _direct_state_reg_index(state), BV(CH2_SPI_RES_PIN));
- }
|