morris 0298e6f257 Merge branch 'feature/gpio_num_per_target' into 'master' %!s(int64=2) %!d(string=hai) anos
..
adc_hal.h 73791ff4e0 adc: fix adc continuous driver conv_frame_size not bigger than 4092 issue %!s(int64=2) %!d(string=hai) anos
adc_hal_common.h 5b523a3313 esp_adc: new esp_adc component and adc drivers %!s(int64=3) %!d(string=hai) anos
adc_oneshot_hal.h 5653018cd1 esp_adc: support selecting clock source for oneshot driver %!s(int64=3) %!d(string=hai) anos
adc_types.h 87848110c1 adc: new feature adc digital monitor supported %!s(int64=2) %!d(string=hai) anos
adc_types_private.h 87848110c1 adc: new feature adc digital monitor supported %!s(int64=2) %!d(string=hai) anos
aes_hal.h 51169b0e0c AES/SHA: use GDMA driver instead of LL %!s(int64=5) %!d(string=hai) anos
aes_types.h 457ce080ae AES: refactor and add HAL layer %!s(int64=5) %!d(string=hai) anos
apm_hal.h 8d0f6dab0f apm: added support for APM on esp32c6 %!s(int64=3) %!d(string=hai) anos
apm_types.h 8d0f6dab0f apm: added support for APM on esp32c6 %!s(int64=3) %!d(string=hai) anos
assist_debug_hal.h 4df3ff619e feat(esp_system): implement hw stack guard for riscv chips %!s(int64=2) %!d(string=hai) anos
brownout_hal.h 56a2d0b8a2 BOD: Bringup for ESP32C6 %!s(int64=3) %!d(string=hai) anos
cache_hal.h 0f7e39d15a cache: refactor cache_utils into cache_hal instade %!s(int64=2) %!d(string=hai) anos
cache_types.h c1cbd7bbf6 cache/mmu: implememnt cache and mmu hal APIs in bootloader %!s(int64=4) %!d(string=hai) anos
clk_tree_hal.h 2c9aa4559c clk_tree: Add a general API to get the frequency of different clocks %!s(int64=3) %!d(string=hai) anos
dac_types.h 8ef9fd4623 dac: optimize the dma stratege %!s(int64=3) %!d(string=hai) anos
dma_types.h 73791ff4e0 adc: fix adc continuous driver conv_frame_size not bigger than 4092 issue %!s(int64=2) %!d(string=hai) anos
ds_hal.h f80d6f8c21 Digital Signature support for S3 %!s(int64=4) %!d(string=hai) anos
ecc_hal.h a485b1cb67 esp32h2: Add support for ECC hardware accelerator %!s(int64=3) %!d(string=hai) anos
ecc_types.h a485b1cb67 esp32h2: Add support for ECC hardware accelerator %!s(int64=3) %!d(string=hai) anos
ecdsa_hal.h d634970ed1 ecdsa: Support multiple ECDSA keys %!s(int64=2) %!d(string=hai) anos
ecdsa_types.h d345c684ba esp32h2: Add support for ECDSA peripheral %!s(int64=3) %!d(string=hai) anos
efuse_hal.h ffb40a89d9 adc_cali: supported channel compensation of adc calibration on esp32c6 %!s(int64=2) %!d(string=hai) anos
emac_hal.h 621d5ef724 fixed emac soc structs names to be able to build under C++ %!s(int64=2) %!d(string=hai) anos
esp_flash_err.h 5425ef4ee4 hal: extract hal component from soc component %!s(int64=5) %!d(string=hai) anos
eth_types.h 8da2e4088c esp_eth: Update esp32's EMAC API to decouple driver and vendor config %!s(int64=4) %!d(string=hai) anos
etm_hal.h fb26d0e11f etm: added etm channel allocator %!s(int64=3) %!d(string=hai) anos
gdma_hal.h 83d16aa00c gdma: support IRAM interrupt %!s(int64=4) %!d(string=hai) anos
gdma_types.h f534247a00 driver: add parallel IO TX driver %!s(int64=3) %!d(string=hai) anos
glitch_filter_types.h ca1b182b25 glitch_filter: support derive clock source form IO MUX %!s(int64=3) %!d(string=hai) anos
gpio_hal.h 51777a6862 gpio: Fix io hold functionality on esp32c6 and esp32h2 %!s(int64=3) %!d(string=hai) anos
gpio_types.h d623ce0d53 refactor(gpio): per-target gpio number definition %!s(int64=2) %!d(string=hai) anos
hmac_hal.h 1c233cc508 hmac_hal: Merge hmac hal layer for different into one %!s(int64=3) %!d(string=hai) anos
i2c_hal.h 803fc3fbe0 I2C: Add i2c support for ESP32C6 %!s(int64=3) %!d(string=hai) anos
i2c_types.h ec742abb25 lp-i2c: Added support for LP I2C peripheral to LP core %!s(int64=2) %!d(string=hai) anos
i2s_hal.h 1b22591ea7 i2s: fixed i2s_ll compiling failure under C++ evironment %!s(int64=2) %!d(string=hai) anos
i2s_types.h fa9b022f68 i2s: support 4 line pdm rx on esp32s3 %!s(int64=3) %!d(string=hai) anos
ieee802154_common_ll.h c8c1cd1c55 ieee802154: support driver opensrc %!s(int64=2) %!d(string=hai) anos
lcd_hal.h 454d658309 rgb_lcd: workaround pclk polarity bug by setting mo>=2 %!s(int64=3) %!d(string=hai) anos
lcd_types.h fc1aa2848b rgb_lcd: support yuv converter %!s(int64=3) %!d(string=hai) anos
ledc_hal.h fcc6514dde ledc: Add an all-in-one HAL function to set fade parameters, and refactor ledc_ll_get_max_duty function %!s(int64=2) %!d(string=hai) anos
ledc_types.h ad55230b0a ledc: Add support for esp32h2; Refactor ledc driver clock source selection related code %!s(int64=3) %!d(string=hai) anos
lp_timer_hal.h 01fb28b65b Power Management: move lp_timer_hal.c to upper hal layer for esp32h2 and esp32c6 %!s(int64=2) %!d(string=hai) anos
lp_timer_types.h c0ddaa5920 lp_timer: add hal-layer codes for esp32c6 %!s(int64=3) %!d(string=hai) anos
mcpwm_hal.h f7ff7ac4d0 mcpwm: clean up hal driver and add doc %!s(int64=3) %!d(string=hai) anos
mcpwm_types.h c4e84751a5 driver: fix public header exceptions for driver %!s(int64=3) %!d(string=hai) anos
memprot_types.h 7cb9304b65 Clean IRAM and DRAM address space conversion macros %!s(int64=3) %!d(string=hai) anos
mmu_hal.h bae6680207 mmu: hal function to init, and hal function to unmap all %!s(int64=3) %!d(string=hai) anos
mmu_types.h 82ee8403b6 mmu: mmu_hal_check_valid_ext_vaddr_region %!s(int64=3) %!d(string=hai) anos
modem_clock_hal.h 485f2882d1 modem_clock: rename modem_clock_lp_timer to ble_rtc_timer %!s(int64=3) %!d(string=hai) anos
modem_clock_types.h 63af1e9631 modem clock(driver): implemented the modem clock driver for esp32c6 %!s(int64=3) %!d(string=hai) anos
mpi_hal.h 4ae1ea7b9f bignum: refactored the hardware abstraction of the mpi peripheral %!s(int64=2) %!d(string=hai) anos
mpi_types.h 4ae1ea7b9f bignum: refactored the hardware abstraction of the mpi peripheral %!s(int64=2) %!d(string=hai) anos
mpu_hal.h 66fb5a29bb Whitespace: Automated whitespace fixes (large commit) %!s(int64=5) %!d(string=hai) anos
mpu_types.h 58c3f6a421 hal: explicitly include soc_caps.h %!s(int64=5) %!d(string=hai) anos
parlio_hal.h f534247a00 driver: add parallel IO TX driver %!s(int64=3) %!d(string=hai) anos
parlio_types.h f534247a00 driver: add parallel IO TX driver %!s(int64=3) %!d(string=hai) anos
pau_hal.h b06cadddb3 Power Management: fix REGDMA clock issue when wake up form light sleep %!s(int64=2) %!d(string=hai) anos
pau_types.h d3e0e3e3b6 pau: implement the pau regdma driver for esp32c6 %!s(int64=3) %!d(string=hai) anos
pcnt_hal.h ec8defaa96 pulse_cnt: new driver for PCNT peripheral %!s(int64=4) %!d(string=hai) anos
pcnt_types.h ec8defaa96 pulse_cnt: new driver for PCNT peripheral %!s(int64=4) %!d(string=hai) anos
pmu_types.h a329b15e7e Power Management: support pu xtal in light sleep for esp32h2 %!s(int64=2) %!d(string=hai) anos
readme.md 5425ef4ee4 hal: extract hal component from soc component %!s(int64=5) %!d(string=hai) anos
rmt_hal.h 2fb43820c2 driver_ng: implement new rmt driver %!s(int64=3) %!d(string=hai) anos
rmt_types.h d82981c437 rmt: use gpio_num_t to define gpio number %!s(int64=3) %!d(string=hai) anos
rtc_hal.h 9eae151f7c esp32c6: bringup deepsleep examples %!s(int64=3) %!d(string=hai) anos
rtc_io_hal.h 921713fff4 uart: Support LP_UART port with UART driver on esp32c6 %!s(int64=2) %!d(string=hai) anos
rtc_io_types.h 66fb5a29bb Whitespace: Automated whitespace fixes (large commit) %!s(int64=5) %!d(string=hai) anos
sdio_slave_hal.h f1de9faa71 sdio: c6 support %!s(int64=3) %!d(string=hai) anos
sdio_slave_types.h 507864c4f1 sdio_slave: allow disabling highspeed mode %!s(int64=3) %!d(string=hai) anos
sdm_hal.h 4154eaec93 sdm: clean up soc/hal/ll code %!s(int64=3) %!d(string=hai) anos
sdm_types.h 4154eaec93 sdm: clean up soc/hal/ll code %!s(int64=3) %!d(string=hai) anos
sha_hal.h 51169b0e0c AES/SHA: use GDMA driver instead of LL %!s(int64=5) %!d(string=hai) anos
sha_types.h b7053b46ef esp32h4: remove esp32h4 target from peripherals %!s(int64=2) %!d(string=hai) anos
spi_flash_encrypt_hal.h 0d81edb174 spi_flash: refactoring flash encryption into new api %!s(int64=4) %!d(string=hai) anos
spi_flash_hal.h ed96dadd06 spi_flash: 2nd stage for supporting flash suspend. (1). Support more esp chips (2). Improve real-time performance (3). Making timing more stable (4) Add documents %!s(int64=2) %!d(string=hai) anos
spi_flash_types.h ed96dadd06 spi_flash: 2nd stage for supporting flash suspend. (1). Support more esp chips (2). Improve real-time performance (3). Making timing more stable (4) Add documents %!s(int64=2) %!d(string=hai) anos
spi_hal.h 184145817c spi_master: add feature spi periph clk source selectable %!s(int64=3) %!d(string=hai) anos
spi_slave_hal.h ea0b839302 spi: limit esp32 dma workaround only on esp32 %!s(int64=3) %!d(string=hai) anos
spi_slave_hd_hal.h 66ca403bc6 spi_slave: support spi slave hd append mode on chips other than s2 %!s(int64=3) %!d(string=hai) anos
spi_types.h 184145817c spi_master: add feature spi periph clk source selectable %!s(int64=3) %!d(string=hai) anos
systimer_hal.h 63f852adc8 hal: Adds hal/ll func for SYSTIMER to select clock source: XTAL or RC_FAST_CLK %!s(int64=3) %!d(string=hai) anos
systimer_types.h cd21058097 C/Cxx: unify static assertions with the macro ESP_STATIC_ASSERT %!s(int64=3) %!d(string=hai) anos
temperature_sensor_types.h 4154eaec93 sdm: clean up soc/hal/ll code %!s(int64=3) %!d(string=hai) anos
timer_hal.h a1030307f1 gptimer: bringup driver on esp32c6 %!s(int64=3) %!d(string=hai) anos
timer_types.h 00b6ec28b2 gptimer: support etm event and task %!s(int64=3) %!d(string=hai) anos
touch_sensor_hal.h a5b09cf015 rtc_clk: Clean up some clock related enum and macro in soc/rtc.h, replace with new ones in %!s(int64=3) %!d(string=hai) anos
touch_sensor_types.h 869bed1bb5 soc: don't expose unstable soc header files in public api %!s(int64=4) %!d(string=hai) anos
twai_hal.h a25123f703 twai: bringup on esp32c6 %!s(int64=3) %!d(string=hai) anos
twai_types.h a18d7e24d6 Fix initialization macros for twai_timing_config_t not setting .clk_src and .brp %!s(int64=2) %!d(string=hai) anos
uart_hal.h 921713fff4 uart: Support LP_UART port with UART driver on esp32c6 %!s(int64=2) %!d(string=hai) anos
uart_types.h 921713fff4 uart: Support LP_UART port with UART driver on esp32c6 %!s(int64=2) %!d(string=hai) anos
uhci_types.h c053ef0541 examples: added support of ESP32-S3 chip in controller_hci_uart example %!s(int64=4) %!d(string=hai) anos
usb_dwc_hal.h d333833f59 usb_host: Rename struct/ll/hal symbols to use "usb_dwc" prefix %!s(int64=3) %!d(string=hai) anos
usb_dwc_ll.h d333833f59 usb_host: Rename struct/ll/hal symbols to use "usb_dwc" prefix %!s(int64=3) %!d(string=hai) anos
usb_hal.h 5425ef4ee4 hal: extract hal component from soc component %!s(int64=5) %!d(string=hai) anos
usb_phy_hal.h 1fcd639224 usb: Add usb_phy driver to support operations on USB PHY %!s(int64=4) %!d(string=hai) anos
usb_phy_types.h 1fcd639224 usb: Add usb_phy driver to support operations on USB PHY %!s(int64=4) %!d(string=hai) anos
usb_types_private.h accbaee57c Add USB Host Library %!s(int64=4) %!d(string=hai) anos
wdt_hal.h 9c37441b17 wdt: refactor wdt codes to use unified type %!s(int64=3) %!d(string=hai) anos
wdt_types.h 5e9e8c396f wdt: add support for WDTs on C6 %!s(int64=3) %!d(string=hai) anos
xt_wdt_hal.h 4869b3cd4a WDT: Add support for XTAL32K Watchdog timer %!s(int64=4) %!d(string=hai) anos

readme.md

HAL Layer Readme

The HAL layer is designed to be used by the drivers. We don't guarantee the stability and back-compatibility among versions. The HAL layer may update very frequently with the driver. Please don't use them in the applications or treat them as stable APIs.

The HAL layer consists of two layers: HAL (upper) and Lowlevel(bottom). The HAL layer defines the steps and data required by the peripheral. The lowlevel is a translation layer converting general conceptions to register configurations.

Lowlevel

This layer should be all static inline. The first argument of LL functions is usually a pointer to the beginning address of the peripheral register. Each chip should have its own LL layer. The functions in this layer should be atomic and independent from each other so that the upper layer can change/perform one of the options/operation without touching the others.

HAL

This layer should depend on the operating system as little as possible. It's a wrapping of LL functions, so that the upper layer can combine basic steps into different working ways (polling, non-polling, interrupt, etc.). Without using queues/locks/delay/loop/etc., this layer can be easily port to other os or simulation systems.

To get better performance and better porting ability, contexts are used to hold sustainable data and pass the parameters.

To develop your own driver, it is suggested to copy the HAL layer to your own code and keep them until manual update.