ESP32S3通过地址访问寄存器响应值不正确

393877719
Posts: 10
Joined: Wed Jun 13, 2018 5:52 am

ESP32S3通过地址访问寄存器响应值不正确

Postby 393877719 » Wed Jan 24, 2024 10:33 am

大家好!
我用ESP32S3做SPI配置,期望在发送完一帧数据后CS保持有效状态,直到达到设计的条件后再配置使CS失效。
查了SPI外设的SPI,只有配置CS拉低的flags,通过spi_device_release_bus()释放总线后,CS还是会保持为有效状态,直到启动下一次SPI发送之后,CS才会失效。
查了reference manual,发现设置SPI_SOFT_RESET可以"可复位 SPI 时钟线、CS 线和数据线"。但是没有找到对应的API可供调用。
尝试直接写寄存器的方式:(*((volatile uint32_t *)0x60024000+0xE0)) |= (uint32_t)(1<<27);但是,观察CS信号,发现没有影响。
怀疑是地址搞错了,核对了多次,外设内存分布,没有发现问题。
尝试读多个寄存器,将读回来的值与手册的reset值比较,发现不相符,不知道哪里出了问题,还请有经验的朋友或者乐鑫官方技术人员给予帮助。
谢谢!
测试代码如下:

Code: Select all

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

void app_main(void)
{
    uint32_t reg_data;
    while (1)
    {
        reg_data = (*((volatile uint32_t *)0x60024000 + 0x08));
        printf("SPI_CTRL_REG=0x%lX\r\n", reg_data);
        reg_data = (*((volatile uint32_t *)0x60024000 + 0xE0));
        printf("SPI_SLAVE_REG=0x%lX\r\n", reg_data);
        vTaskDelay(pdMS_TO_TICKS(5000));
    }
    vTaskDelete(NULL);
}
得到的响应值为:

Code: Select all

SPI_CTRL_REG=0x0
SPI_SLAVE_REG=0x0
Attachments
RM寄存器地址.jpg
RM寄存器地址.jpg (276.41 KiB) Viewed 971 times

Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 216 guests