我想传输数据A1A2A3A4。从ATxmega128A1的内部存储器通过SPI主机到从机形成两个独立的DAC转换器,使得DAC1应具有A1A3,DAC2应具有A2A4。
如何在AVR中编写代码
// Transfer data from internal memory via SPI from Master to single Slave
if ( (SWITCHPORTL.IN & PIN2_bm) == 0 )
{
flip = false;
j = 0;
{
// Switch on LED 2
LEDPORT.OUTSET = PIN2_bm;
// Switch on LED 3
LEDPORT.OUTSET = PIN3_bm;
}
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)
{
_delay_us(0.7); // wait for the 2nd 8-bit-block to be send -> delay 0.7us
// Set slave select line high (inactive)
PORTC.OUTSET = PIN4_bm;
_delay_us(1.9); // delay to adjust to sampling frequency 100 kHz -> 6.9us 200kHz -> 1.9us
}
flip = !flip;
j++;
}
}
答案 0 :(得分:0)
您的一般方法是正确的,但为什么不使用SPSR寄存器的SPIF标志?这样就不需要这种精确的_delay_us(0.7)
。
另外,看起来你忘了断言第二个芯片选择线。
因此,一般方法应该如下:
此外,最好创建处理SPI数据写入的函数。