完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好!
我用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 #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%lXrn", reg_data); reg_data = (*((volatile uint32_t *)0x60024000 + 0xE0)); printf("SPI_SLAVE_REG=0x%lXrn", reg_data); vTaskDelay(pdMS_TO_TICKS(5000)); } vTaskDelete(NULL);} 得到的响应值为:Code: Select all SPI_CTRL_REG=0x0SPI_SLAVE_REG=0x0 |
|
相关推荐
1个回答
|
|
ESP32S3通过地址访问寄存器响应值不正确的原因可能有以下几点:
1. 寄存器地址错误:请确保您使用的寄存器地址是正确的。在这种情况下,您需要检查0x60024000是否是正确的SPI寄存器基地址。 2. 寄存器偏移错误:在访问寄存器时,您需要确保偏移量是正确的。在这种情况下,0xE0可能不是正确的偏移量。 3. 寄存器位操作错误:在设置寄存器位时,请确保您使用的位操作是正确的。在这种情况下,您使用了1<<27,这可能不是正确的位设置。 4. 没有考虑时序问题:在设置寄存器后,可能需要等待一段时间以确保寄存器值已更新并生效。 为了解决这个问题,您可以尝试以下步骤: 1. 确认寄存器地址:查阅ESP32S3的参考手册,找到正确的SPI寄存器基地址。 2. 确认寄存器偏移:根据参考手册,找到正确的寄存器偏移量。 3. 确认寄存器位操作:根据参考手册,找到正确的位设置。 4. 考虑时序问题:在设置寄存器后,添加适当的延时以确保寄存器值已更新并生效。 5. 使用官方API:尽量使用ESP-IDF提供的官方API来操作寄存器,因为这些API已经经过测试并确保正确性。 如果您仍然遇到问题,建议您查阅ESP-IDF的文档和示例代码,以了解更多关于SPI配置和操作的信息。此外,您还可以在ESP-IDF的GitHub仓库中查找相关问题和解决方案。 |
|
|
|
只有小组成员才能发言,加入小组>>
314浏览 6评论
271浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
261浏览 5评论
266浏览 4评论
242浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-27 15:55 , Processed in 0.742804 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191