/* * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * Jeroen Domburg wrote this file. As long as you retain * this notice you can do whatever you want with this stuff. If we meet some day, * and you think this stuff is worth it, you can buy me a beer in return. * ---------------------------------------------------------------------------- */ #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 34ULL #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(20); 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)|0xff; 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(); if (gpio_get_level(ADNS_MISO)) out|=mask; gpio_set_level(ADNS_CLK, 1); DELAY(); } gpio_set_level(ADNS_CS, 1); DELAY(); return out&0xff; } int adns9500_init() { volatile int delay; int t; gpio_config_t gpioconf[2]={ { .pin_bit_mask=(1<