Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/npm/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded 如何传输数据A1A2A3A4。。从ATxmega128A1的内部存储器通过SPI主从形式进入两个独立的DAC转换器?_Embedded_Avr_Atmel_Atmelstudio - Fatal编程技术网

Embedded 如何传输数据A1A2A3A4。。从ATxmega128A1的内部存储器通过SPI主从形式进入两个独立的DAC转换器?

Embedded 如何传输数据A1A2A3A4。。从ATxmega128A1的内部存储器通过SPI主从形式进入两个独立的DAC转换器?,embedded,avr,atmel,atmelstudio,Embedded,Avr,Atmel,Atmelstudio,我想传输数据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; {

我想传输数据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++;
    }
}
//通过SPI将数据从内存从主设备传输到单个从设备
如果((开关端口L.IN&PIN2_bm)==0)
{
翻转=错误;
j=0;
{
//打开LED 2
LEDPORT.start=PIN2_bm;
//打开LED 3
LEDPORT.start=PIN3_bm;
}
while(j延迟0.7us
//将从属选择线路设置为高(非活动)
PORTC.start=PIN4_bm;
_延迟_us(1.9);//延迟以调整采样频率100 kHz->6.9 us 200kHz->1.9 us
}
翻转=!翻转;
j++;
}
}

您的一般方法是正确的,但是为什么不使用SPSR寄存器的SPIF标志呢?这样就不需要如此精确的
\u延迟\u us(0.7)

另外,看起来您忘记了断言第二个芯片选择行

因此,一般方法应如下所示:

  • 读取偶数字节(A1)
  • 为第一个DAC断言从属选择
  • 将数据字节写入SPIC.data
  • 当SPSR的位SPIF==0时循环
  • 从SPIC.DATA读取以清除SPIF位
  • 为第一个DAC解除从选择
  • 读取奇数字节(A2)
  • 为第二个DAC断言从属选择
  • 重复步骤3-5
  • 从头重复

  • 另外,最好将通过SPI处理数据写入的函数装箱。

    您能帮助我使用上面解释的调用偶数和奇数字节的指令代码吗?