ULP
About this
Этот модуль содержит функции для доступа к сопроцессору ESP32 ULP (Ultra Low Power). ULP — это простая конечная машина (FSM), предназначенная для выполнения измерений с использованием АЦП, датчика температуры и внешних I2C датчиков, в то время как основные процессоры находятся в режиме глубокого сна. Сопроцессор ULP может получать доступ к области памяти RTC_SLOW_MEM и регистрам в перифериях RTC_CNTL, RTC_IO и SARADC. Сопроцессор ULP использует инструкции фиксированной ширины 32 бита, 32-битную адресацию памяти и имеет 4 универсальных 16-битных регистра.
ulp.load(filename [, load_address])
Загрузить бинарную программу для сопроцессора ULP.
Аргументы:
- filename: бинарная программа ULP для загрузки.
- load_address (необязательно): адрес для загрузки бинарной программы (по умолчанию: 0).
Возвращает: ничего.
-- Load the ULP program
ulp.load('/examples/ulp/adc-ch4.ulp')
ulp.settimer(tmr1us [, tmr2us, tmr3us, tmr4us])
Установить значения таймера программы ULP. Сопроцессор ULP запускается таймером. Таймер запускается при вызове ulp_run. Таймер считает количество тактов RTC_SLOW_CLK (по умолчанию, генерируемых внутренним RC-генератором 150 кГц). Количество тактов устанавливается для каждого таймера с помощью этой функции. При первом запуске ULP tmr1us будет использоваться для установки количества тактов таймера. Позже программа ULP может выбрать другой регистр таймера (SENS_ULP_CP_SLEEP_CYCx_REG) с помощью инструкции сна.
Аргументы:
- tmr1us (необязательно): количество микросекунд до срабатывания таймера 1
- tmr2us (необязательно): количество микросекунд до срабатывания таймера 2
- tmr3us (необязательно): количество микросекунд до срабатывания таймера 3
- tmr4us (необязательно): количество микросекунд до срабатывания таймера 4
Возвращает: ничего.
-- Set timer to 100ms
ulp.settimer(100000)
ulp.run([entry_point])
Запустить программу сопроцессора ULP.
Аргументы:
entry_point (необязательно): точка входа для запуска бинарной программы (по умолчанию: 0). Возвращает: ничего.
-- Run the ULP coprocessor program
ulp.Run()
ulp.stop()
Остановить программу сопроцессора ULP.
Аргументы: нет
Возвращает: ничего
-- Stop running the ULP coprocessor program
ulp.stop()
ulp.enableadc(channel, [resolution, vref, max value])
Настроить внутренний канал АЦП для использования сопроцессором ULP.
Аргументы:
-
channel (канал): идентификатор канала АЦП. Используйте константу adc.ADC_CHx для этой цели.
-
resolution (разрешение, необязательно): разрешение для использования. Если разрешение не предоставлено, или его значение равно 0 или nil, применяется разрешение по умолчанию.
-
vref (опорное напряжение, необязательно): положительное опорное напряжение в милливольтах. Если vref не предоставлено, или его значение равно 0 или nil, применяется опорное напряжение по умолчанию.
-
max value (максимальное значение, необязательно): максимальное входное напряжение, приложенное к каналу. Если максимальное значение не предоставлено, или его значение равно 0 или nil, применяется опорное напряжение по умолчанию.
Возвращает: ничего
-- Enable GPIO32 to be used by the ULP coprocessor
ulp.enableadc(pio.GPIO32)
ulp.valueat(address [, value])
Читает значения переменных программы ULP из памяти RTC или записывает новые значения в переменные программы ULP в памяти RTC.
Аргументы:
- address (адрес): адрес переменной ULP, как указано в файле .ld при компиляции бинарной программы ULP.
- value (значение, необязательно): если задано значение, то содержимое адреса устанавливается в это значение.
Возвращает:
Если задано значение, то ничего не возвращается. Если значение не задано в качестве параметра, то возвращается значение переменной программы ULP.
-- Load the ULP program
ulp.load('/examples/ulp/adc-ch4.ulp')
-- Set the ULP ADC Sample variable ulp_low_thr to 0
ulp.valueat(0x50000070, 0)
-- Set the ULP ADC Sample variable ulp_high_thr to 2000
ulp.valueat(0x50000074, 2000)
-- Run the ULP coprocessor program
ulp.Run()
-- Read the ULP ADC Sample variable ulp_last_result
ulp_last_result = ulp.valueat(0x5000007c)
ulp.assign(address)
Присваивает переменные программы ULP переменным Lua. Это позволяет создавать более читаемый код Lua без необходимости повторения адресов переменных RTC снова и снова.
Аргументы:
- address (адрес): адрес переменной ULP, как указано в файле .ld при компиляции бинарной программы ULP.
Возвращает: объект ulp-variable (переменная ULP).
-- Assign the ULP ADC Sample variable ulp_last_result to the lua variable ulp_last_result
ulp_last_result = ulp.assign(0x5000007c)
ulp:value([value])
Читает значение назначенной переменной из памяти RTC или записывает новое значение в адрес памяти RTC назначенной переменной.
Аргументы:
- value (значение, необязательно): если задано значение, то содержимое адреса устанавливается в это значение.
Возвращает:
Если задано значение, то ничего не возвращается. Если значение не задано в качестве параметра, то возвращается значение переменной программы ULP.
-- Load the ULP program
ulp.load('/examples/ulp/adc-ch4.ulp')
-- Assign the ULP ADC Sample variable ulp_low_thr to the lua variable ulp_low_thr
ulp_low_thr = ulp.assign(0x50000070)
-- Set the ULP ADC Sample variable ulp_low_thr to 0
ulp_low_thr:value(0)
-- Assign the ULP ADC Sample variable ulp_high_thr to the lua variable ulp_high_thr
ulp_high_thr = ulp.assign(0x50000074)
-- Set the ULP ADC Sample variable ulp_high_thr to 2000
ulp_high_thr:value(2000)
-- Run the ULP coprocessor program
ulp.Run()
-- Assign the ULP ADC Sample variable ulp_last_result to the lua variable ulp_last_result
ulp_last_result = ulp.assign(0x5000007c)
-- Print the RTC memory value at address 0x5000007c
print( ulp_last_result:value() )
ulp:address([address])
Читает адрес памяти RTC из переменной Lua или устанавливает новый адрес памяти RTC для переменной Lua.
Аргументы:
- address (адрес, необязательно): если задан адрес, то переменная Lua устанавливается на этот адрес.
Возвращает:
Если адрес задан, то ничего не возвращается. Если адрес не задан в качестве параметра, то возвращается текущий назначенный адрес памяти RTC.
-- Print the RTC memory address that ulp_last_result is assigned to
print( ulp_last_result:address() )