经过前一个阶段的编程和测试,天籁齐舞项目组的MP3播放器的VS1053B控制部分需要使用SPI分别对VS1053B上的控制从器件和数据从器件进行分别控制,这就要求SPI总线能够分时地被这两个从器件占用。
在SAKURA板上RXCPU的SPI是支持多个从器件控制的,并且SAKURA板能够在支持mini-SD卡基于SPI总线读写的同时,还支持外围SPI总线的控制就证明了这一点。
于是我就学习了瑞萨的web云编译器http://tool-cloud.renesas.com/中的spi.h头文件,并在文件中找到如下说明语句:
//typedef enum {SPI_PORT_NONE, SPI_PORT_CS0_DUINO, SPI_PORT_CS1_MARY1, SPI_PORT_CS2_MARY2, SPI_PORT_CS3_ROM, SPI_PORT_SDMMC} SPI_PORT;
意思是说:SPI_PORT的配置是支持多器件的,通过给SPI_PORT赋不同的值来实现SPI对不同从器件的片选,进而通过SPI总线对片选的从器件进行控制。
同时还找到了:
**********************************************************************/
class CSPI {
private:
int bitOrder;
SPI_CLK_DIVIDER divider;
SPI_DATA_MODE dataMode;
public:
CSPI(SPI_PORT port);
~CSPI();
/*********************************************************************//*
这些是我在SPI.h头文件中所能找到的关于引用SPI_PORT的地方。
但至于如何在程序中来使用并调用来实现SPI控制不同从器件的能力,目前还未测试成功。
在如下的帖子中,我成功地调用了SPI_PORT参数,并且编译后不出现错误,可是当进行
VS1053B库函数测试时才发现,此种调用方法还无法做到使SPI分别控制多个从器件,
http://forum.eepw.com.cn/thread/222742/5#43
具体的代码如下:
void VS_WR_Data(unsigned long data)
{
while(digitalRead(VS_DQ)==0);
SPI.setClockDivider(SPI_CLOCK_DIV64);
SPI.port=SPI_PORT_CS2_MARY2;
SPItemp=SPI.transfer(data);
}
其中的“SPI.port=SPI_PORT_CS2_MARY2;”
就是我设想的实现SPI分控多个从器件的命令语句,可是结果并没有像我想象的那样乐观,
后经测试发现,该语句并未改变SPI对默认管脚CS0的片选,所以上述语句实际上是向命令
控制从器件发送数据,又如何能播放出声音呢。
说了这么多,希望瑞萨工程师能看明白我的问题所在,真心做了多次的测试,终没能找到
一种正确的方法(嘿嘿,这里没有什么理论指导,测试时用的是最基本的试错法),希望
瑞萨工程师看到这个帖子后能帮我解决这个难题,十分感谢!
同时,各位网友大虾目前正在使用SAKURA开发板上的SPI功能的,一起跟帖讨论,共同学习!
谢谢!
打赏帖 | |
---|---|
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 | |
【nRF7002DK】基于sht30的温湿度计被打赏20分 | |
【nRF7002DK】日志打印被打赏20分 | |
rtthread硬件加密-5hash加密分析被打赏10分 | |
【STM32F769】SD卡驱动及其调试经验分享被打赏32分 | |
【分享开发笔记,赚取电动螺丝刀】使用看门狗降低系统隐藏bug触发概率被打赏18分 | |
【STM32F769】调试SD驱动,由于其时钟配置不对引起的错误以及排查记录被打赏35分 | |
【分享开发笔记,赚取电动螺丝刀】MCUXpressoConfigTools配置外设时的异常解决被打赏24分 |