diff --git a/pico-ice/CMakeLists.txt b/pico-ice/CMakeLists.txt index e072ce4..7177d1b 100644 --- a/pico-ice/CMakeLists.txt +++ b/pico-ice/CMakeLists.txt @@ -29,6 +29,7 @@ add_executable(${CMAKE_PROJECT_NAME} main.c) target_link_libraries(${CMAKE_PROJECT_NAME} pico_ice_sdk pico_stdio_usb + hardware_adc ) target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../ diff --git a/pico-ice/builtins.h b/pico-ice/builtins.h index 03d38ba..a0145f4 100644 --- a/pico-ice/builtins.h +++ b/pico-ice/builtins.h @@ -27,6 +27,7 @@ # include "ice_led.h" # include "ice_spi.h" # include "ice_sram.h" +# include "hardware/adc.h" #endif // TODO: Implement RESIZE-FILE. @@ -42,6 +43,7 @@ OPTIONAL_LED_SUPPORT \ OPTIONAL_SPI_SUPPORT \ OPTIONAL_SRAM_SUPPORT \ + OPTIONAL_ADC_SUPPORT \ CALLING_OPCODE_LIST \ FLOATING_POINT_LIST @@ -160,7 +162,29 @@ YV(ice, ice_sram_write_blocking, ice_sram_write_blocking(n2, b1, n0); DROPn(3)) #endif -#define VOCABULARY_LIST V(forth) V(internals) V(ice) +#ifdef UEFORTH_SIM +# define OPTIONAL_ADC_SUPPORT +#else +# define OPTIONAL_ADC_SUPPORT \ + YV(pico, adc_init, adc_init()) \ + YV(pico, adc_gpio_init, adc_gpio_init(n0); DROP) \ + YV(pico, adc_select_input, adc_select_input(n0); DROP) \ + YV(pico, adc_get_selected_input, PUSH adc_get_selected_input()) \ + YV(pico, adc_set_round_robin, adc_set_round_robin(n0); DROP) \ + YV(pico, adc_set_temp_sensor_enabled, adc_set_temp_sensor_enabled(n0); DROP) \ + YV(pico, adc_read, PUSH adc_read()) \ + YV(pico, adc_run, adc_run(n0); DROP) \ + YV(pico, adc_set_clkdiv, adc_set_clkdiv(*fp--)) \ + YV(pico, adc_fifo_setup, adc_fifo_setup(n4, n3, n2, n1, n0); DROPn(5)) \ + YV(pico, adc_fifo_is_empty, PUSH adc_fifo_is_empty()) \ + YV(pico, adc_fifo_get_level, PUSH adc_fifo_get_level()) \ + YV(pico, adc_fifo_get, PUSH adc_fifo_get()) \ + YV(pico, adc_fifo_get_blocking, PUSH adc_fifo_get_blocking()) \ + YV(pico, adc_fifo_drain, adc_fifo_drain()) \ + YV(pico, adc_irq_set_enabled, adc_irq_set_enabled(n0)) +#endif + +#define VOCABULARY_LIST V(forth) V(internals) V(pico) V(ice) #define PATH_MAX 256 static char filename[PATH_MAX]; diff --git a/site/pico-ice.html b/site/pico-ice.html index 0cb4787..8f53d10 100644 --- a/site/pico-ice.html +++ b/site/pico-ice.html @@ -139,6 +139,29 @@ REPOSITION-FILE ( n fh -- ior ) FILE-SIZE ( fh -- n ior ) +
pico vocabulary.
+See here
+for details on the underlying hardware SDK.
++adc_init ( -- ) Initialize HW ADC +adc_gpio_init ( n -- ) Init GPIO for use as ADC +adc_select_input ( n -- ) Select ADC input +adc_get_selected_input ( -- n ) Get selected ADC input +adc_set_round_robin ( mask -- ) Round robin sampler selector +adc_set_temp_sensor_enabled ( f -- ) Enable/disable onboard tempurature sensor +adc_read ( -- u ) Perform a single conversion +adc_run ( f -- ) Enable/disable free-running sample mode +adc_set_clkdiv ( f: clkdiv -- ) Set ADC clock divisor +adc_fifo_setup ( en dreq_en dreq_thresh err_in_fifo byte_shift -- ) Setup ADC FIFO +adc_fifo_is_empty ( -- f ) Check FIFO empty state +adc_fifo_get_level ( -- n ) Get number ADC FIFO entries +adc_fifo_get ( -- n ) Get ADC result from FIFO +adc_fifo_drain ( -- ) Drain FIFO. +adc_fifo_get_blocking ( -- n ) Wait for ADC to have data +adc_irq_set_enabled ( f -- ) Enable/disable ADC interrupts ++
ice vocabulary.
See here