#include #include #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_system.h" #include "driver/spi_master.h" #include "soc/gpio_struct.h" #include "driver/gpio.h" #include "esp_heap_alloc_caps.h" #define ADNS_MOSI 19 #define ADNS_MISO 21 #define ADNS_CLK 23 #define ADNS_CS 22 //#define DELAY() asm("nop; nop; nop; nop;nop; nop; nop; nop;nop; nop; nop; nop;nop; nop; nop; nop;") #define DELAY() ets_delay_us(10); static void adnsWrite(int adr, int val) { int data=((adr|0x80)<<8)|val; gpio_set_level(ADNS_CS, 0); DELAY(); for (int mask=0x8000; mask!=0; mask>>=1) { gpio_set_level(ADNS_MOSI, (data&mask)?1:0); gpio_set_level(ADNS_CLK, 0); DELAY(); gpio_set_level(ADNS_CLK, 1); DELAY(); } gpio_set_level(ADNS_CS, 1); } static int adnsRead(int adr) { int data=((adr&0x7F)<<8); int out=0; gpio_set_level(ADNS_CS, 0); DELAY(); for (int mask=0x8000; mask!=0; mask>>=1) { gpio_set_level(ADNS_MOSI, (data&mask)?1:0); gpio_set_level(ADNS_CLK, 0); DELAY(); gpio_set_level(ADNS_CLK, 1); if (gpio_get_level(ADNS_MISO)) out|=mask; DELAY(); } gpio_set_level(ADNS_CS, 1); return out&0xff; } int adns9500_init() { volatile int delay; int t; gpio_config_t gpioconf[2]={ { .pin_bit_mask=(1<