Skip to content

Commit

Permalink
fix(ulp-i2c): fixed ulp i2c not working from main cpu if compiled wit…
Browse files Browse the repository at this point in the history
…h 0S or O2

Compiler would optimize register write to use s8i which do not work for IO registers

Closes #12214
  • Loading branch information
ESP-Marius committed Sep 13, 2023
1 parent b1e8540 commit cb3a98f
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions components/ulp/ulp_riscv/ulp_riscv_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "soc/sens_reg.h"
#include "soc/clk_tree_defs.h"
#include "hal/i2c_ll.h"
#include "hal/misc.h"
#include "driver/rtc_io.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
Expand Down Expand Up @@ -215,7 +216,8 @@ static void ulp_riscv_i2c_format_cmd(uint32_t cmd_idx, uint8_t op_code, uint8_t
i2c_dev->command[cmd_idx].ack_en = ack_check_en; // I2C controller verifies that the ACK bit sent by the
// slave device matches the ACK expected bit during WRITE.
// Ignored during RSTART, STOP, END and READ cmds.
i2c_dev->command[cmd_idx].byte_num = byte_num; // Byte Num
HAL_FORCE_MODIFY_U32_REG_FIELD(i2c_dev->command[cmd_idx], byte_num, byte_num); // Byte Num

#elif CONFIG_IDF_TARGET_ESP32S3
/* Reset cmd register */
i2c_dev->i2c_cmd[cmd_idx].val = 0;
Expand All @@ -230,7 +232,7 @@ static void ulp_riscv_i2c_format_cmd(uint32_t cmd_idx, uint8_t op_code, uint8_t
i2c_dev->i2c_cmd[cmd_idx].i2c_ack_en = ack_check_en; // I2C controller verifies that the ACK bit sent by the
// slave device matches the ACK expected bit during WRITE.
// Ignored during RSTART, STOP, END and READ cmds.
i2c_dev->i2c_cmd[cmd_idx].i2c_byte_num = byte_num; // Byte Num
HAL_FORCE_MODIFY_U32_REG_FIELD(i2c_dev->i2c_cmd[cmd_idx], i2c_byte_num, byte_num); // Byte Num
#endif // CONFIG_IDF_TARGET_ESP32S2
}

Expand Down

0 comments on commit cb3a98f

Please sign in to comment.