1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include <stdio.h>
- #include <pico/stdlib.h>
- #include "hardware/i2c.h"
- #include "pico/i2c_slave.h"
- #include "hardware/irq.h"
- #include "hardware/spi.h"
- #include "pico/binary_info.h"
- #include "pico/multicore.h"
- #include "hardware/irq.h"
- #include "hardware/adc.h"
- #include "hardware/clocks.h"
- #include "ADRS2040U_i2c.h"
- #include "adc_driver.hpp"
- ADC_Driver adcd;
- static void i2c_slave_handler(i2c_inst_t *i2c, i2c_slave_event_t event)
- {
- static uint8_t ADRS2040U_cmd = ADRS2040_CMD_INVALID;
- uint8_t raw_data;
- switch(event) {
- case I2C_SLAVE_RECEIVE:
- raw_data = i2c_read_byte_raw(i2c);
- if(ADRS2040U_cmd == ADRS2040_CMD_INVALID) {
- ADRS2040U_cmd = raw_data;
- }
- break;
-
- case I2C_SLAVE_REQUEST:
- DEBUG_PRINT("I2C_SLAVE_REQUEST\n");
- if(ADRS2040U_cmd == ADRS2040_CMD_GET_COUNT) {
- i2c_write_byte_raw(i2c,adcd.count());
- }
- else
- i2c_write_byte_raw(i2c, 0);
- break;
- case I2C_SLAVE_FINISH:
- ADRS2040U_cmd = ADRS2040_CMD_INVALID;
- break;
-
- default:
- break;
- }
- }
- void i2c_setup(void)
- {
- i2c_init(i2c0, 100 * 1000);
- gpio_set_function(GPIO_SDA0, GPIO_FUNC_I2C);
- gpio_set_function(GPIO_SCK0, GPIO_FUNC_I2C);
- // ADRS2040Uでは基板上でプルアップされているので
- // プルアップを無効化する
- gpio_disable_pulls(GPIO_SDA0);
- gpio_disable_pulls(GPIO_SCK0);
- // プルアップする場合は以下の通り
- // gpio_pull_up(GPIO_SDA0);
- // gpio_pull_up(GPIO_SCK0);
- i2c_slave_init(i2c0, I2C0_SLAVE_ADDR, &i2c_slave_handler);
- }
- int main(void)
- {
- stdio_init_all();
- while (true)
- {
- ;
- }
- }
|