ULP

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() )