这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 关于SAKURA板上Arduino编译环境下如何实现SPI支持多个器件控制

共3条 1/1 1 跳转至

关于SAKURA板上Arduino编译环境下如何实现SPI支持多个器件控制

助工
2012-12-19 18:05:45     打赏
经过前一个阶段的编程和测试,天籁齐舞项目组的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功能的,一起跟帖讨论,共同学习!
谢谢!





关键词: 关于     SAKURA     板上     Arduino     编译         

助工
2012-12-20 17:57:22     打赏
2楼

如果这样的话,当我传数据的时候直接将数据片选I/O口拉低,可是也无法使PC3管脚旁边的CS管脚拉高(因为SPI会自动地将CS拉低的,也就是说此时会同时选中控制和数据两个从器件),实在不行,我只有考虑使用片选芯片了


助工
2012-12-25 13:38:40     打赏
3楼
嗯,好吧!

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]