Adding pico ADC.

This commit is contained in:
Brad Nelson
2023-12-16 00:37:37 -08:00
parent d02499511b
commit c31a2cd669
3 changed files with 49 additions and 1 deletions

View File

@ -29,6 +29,7 @@ add_executable(${CMAKE_PROJECT_NAME} main.c)
target_link_libraries(${CMAKE_PROJECT_NAME} target_link_libraries(${CMAKE_PROJECT_NAME}
pico_ice_sdk pico_ice_sdk
pico_stdio_usb pico_stdio_usb
hardware_adc
) )
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../ ${CMAKE_CURRENT_SOURCE_DIR}/../

View File

@ -27,6 +27,7 @@
# include "ice_led.h" # include "ice_led.h"
# include "ice_spi.h" # include "ice_spi.h"
# include "ice_sram.h" # include "ice_sram.h"
# include "hardware/adc.h"
#endif #endif
// TODO: Implement RESIZE-FILE. // TODO: Implement RESIZE-FILE.
@ -42,6 +43,7 @@
OPTIONAL_LED_SUPPORT \ OPTIONAL_LED_SUPPORT \
OPTIONAL_SPI_SUPPORT \ OPTIONAL_SPI_SUPPORT \
OPTIONAL_SRAM_SUPPORT \ OPTIONAL_SRAM_SUPPORT \
OPTIONAL_ADC_SUPPORT \
CALLING_OPCODE_LIST \ CALLING_OPCODE_LIST \
FLOATING_POINT_LIST FLOATING_POINT_LIST
@ -160,7 +162,29 @@
YV(ice, ice_sram_write_blocking, ice_sram_write_blocking(n2, b1, n0); DROPn(3)) YV(ice, ice_sram_write_blocking, ice_sram_write_blocking(n2, b1, n0); DROPn(3))
#endif #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 #define PATH_MAX 256
static char filename[PATH_MAX]; static char filename[PATH_MAX];

View File

@ -139,6 +139,29 @@ REPOSITION-FILE ( n fh -- ior )
FILE-SIZE ( fh -- n ior ) FILE-SIZE ( fh -- n ior )
</pre> </pre>
<h5>pico</h5>
These words are inside the <code>pico</code> vocabulary.
See <a href="https://www.raspberrypi.com/documentation/pico-sdk/hardware.html">here</a>
for details on the underlying hardware SDK.
<pre>
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
</pre>
<h5>ice</h5> <h5>ice</h5>
These words are inside the <code>ice</code> vocabulary. These words are inside the <code>ice</code> vocabulary.
See <a href="https://pico-ice.tinyvision.ai/pico_ice_sdk.html">here</a> See <a href="https://pico-ice.tinyvision.ai/pico_ice_sdk.html">here</a>