|
|
@@ -20,6 +20,7 @@
|
|
|
#include "esp_rom_sys.h"
|
|
|
#include "clk_ctrl_os.h"
|
|
|
#include "esp_private/periph_ctrl.h"
|
|
|
+#include "esp_memory_utils.h"
|
|
|
|
|
|
static __attribute__((unused)) const char *LEDC_TAG = "ledc";
|
|
|
|
|
|
@@ -1236,8 +1237,15 @@ esp_err_t ledc_cb_register(ledc_mode_t speed_mode, ledc_channel_t channel, ledc_
|
|
|
{
|
|
|
LEDC_ARG_CHECK(speed_mode < LEDC_SPEED_MODE_MAX, "speed_mode");
|
|
|
LEDC_ARG_CHECK(channel < LEDC_CHANNEL_MAX, "channel");
|
|
|
+ LEDC_ARG_CHECK(cbs, "callback");
|
|
|
LEDC_CHECK(p_ledc_obj[speed_mode] != NULL, LEDC_NOT_INIT, ESP_ERR_INVALID_STATE);
|
|
|
LEDC_CHECK(ledc_fade_channel_init_check(speed_mode, channel) == ESP_OK, LEDC_FADE_INIT_ERROR_STR, ESP_FAIL);
|
|
|
+ if (cbs->fade_cb && !esp_ptr_in_iram(cbs->fade_cb)) {
|
|
|
+ ESP_LOGW(LEDC_TAG, "fade callback not in IRAM");
|
|
|
+ }
|
|
|
+ if (user_arg && !esp_ptr_internal(user_arg)) {
|
|
|
+ ESP_LOGW(LEDC_TAG, "user context not in internal RAM");
|
|
|
+ }
|
|
|
s_ledc_fade_rec[speed_mode][channel]->ledc_fade_callback = cbs->fade_cb;
|
|
|
s_ledc_fade_rec[speed_mode][channel]->cb_user_arg = user_arg;
|
|
|
return ESP_OK;
|