【发布时间】:2015-06-09 11:23:48
【问题描述】:
我有一个通用方法,其中 SDRAM 中的数据是传输 SPIC.DATA。我添加了延迟功能,以便使用采样频率调整我的数字信号。
/* Transfer data from internal memory via SPI from Master to Slave */
if ( (SWITCHPORTL.IN & PIN2_bm) == 0 )
{
flip = false;
j = 0;
while (j < NUM_BYTES)
{
if (flip == false)
{
// Set slave select line low (active) for Port C
PORTC.OUTCLR = PIN4_bm;
}
// Give the data to the data register of the Master
SPIC.DATA = __far_mem_read(j+SDRAM_ADDR);
if (flip == true)
{
// wait for the 2nd 8-bit-block to be send
-> delay 0.7us
_delay_us(0.7);
// Set slave select line high (inactive)
PORTC.OUTSET = PIN4_bm;
// delay to adjust to sampling frequency
100 kHz -> 6.9us; 200kHz -> 1.9us
_delay_us(1.9); }
flip = !flip;
j++;
}
}
我如何为此调用两个从设备选择,以便 SDRAM 中的数据应该一个接一个地交替传输到这两个从设备?让我们考虑存储在 SDRAM 中的数据为 A1A2A3A4A5 等,所以 A1 A3 A5 ... 是一组数据应该传输到我的奇数从机选择和 A2 A4 A6... 是偶数组数据到其他从机。
【问题讨论】:
-
您能说说您使用的是什么微控制器吗?有 100 种不同的 AVR。
-
问题不清楚。这些从机是否在同一 SPI 总线上?如果是这样,你如何在它们之间混合?看来您的代码中只有一个从选择引脚。或者这是一个“菊花链”SPI解决方案?请说明有什么硬件。
-
应该很明显,分配给 PORTC.OUTCLR 是关键。看起来可能,鉴于 PIN4_bm 听起来像一个位掩码,您只需要使用不同的值即可在多个设备上启用 MOSI。实际价值当然取决于硬件,你不能把这样的细节放在这样的问题之外。
-
@SijoJohn 再次阅读我之前的评论。从机连接到 SPI 总线至少有 3 种不同的方式,如果你不告诉我们 MOSI、SS 和时钟是如何连接到它们的,以及你打算如何在它们之间多路复用,没人能回答。或者,如果您不知道如何连接它们,如果这是这里的实际问题,您需要在 electronics.stackexchange.com 上提问。