嵌入式开发者社区

标题: spi 与AD DA [打印本页]

作者: quzheng766    时间: 2015-10-4 22:38
标题: spi 与AD DA
按照给的spi flash例程  把里面spi部分拿出来做与AD DA通信的驱动 void um02_spiInit(void)
{
unsigned int spi_mode = SOMI_SIMO_CLK_CS1_CS6;//使用CS1 CS6对应AD和DA   值为(0x00000E42)  转换时CS1 CS6为低电平
/* Resets the SPI */
  SPIReset(SOC_SPI_1_REGS);
/* Brings SPI Out-of-Reset */
SPIOutOfReset(SOC_SPI_1_REGS);
/* Configures SPI in Master Mode */
SPIModeConfigure(SOC_SPI_1_REGS, SPI_MASTER_MODE);
/* Sets SPI Controller for 4-pin Mode with CHIP SELCET */
  SPIPinControl(SOC_SPI_1_REGS, 0, 0, &spi_mode);


SPIDefaultCSSet(SOC_SPI_1_REGS, 0x42);
/*Configures the Prescale bit in Data Format register. */
SPIClkConfigure(SOC_SPI_1_REGS, SOC_SYSCLK_2_FREQ, 1920000,SPI_DATA_FORMAT0);//fs=120000*16(位)
/* Configures SPI Data Format Register */
SPIConfigDataFmtReg(SPI_DATA_FORMAT0);
// 配置 SPI
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x42);
  /*enable spi dma*/
SPIIntEnable(SOC_SPI_1_REGS, SPI_DMA_REQUEST_ENA_INT);

SPIDelayConfigure(SOC_SPI_1_REGS, 0, 0, 10, 20);//瞎写的  感觉没什么影响啊
SPIEnable(SOC_SPI_1_REGS);

}




传输时 好像只能传出一个数 然后就停下了  (spi 发送寄存器是没错的 里面的值一直在刷新) 请问是怎么回事    还有就是有没有写过这方面驱动的能不能分享一下

作者: Lewis    时间: 2015-10-8 09:35
不知道你是怎么判断是只传出一个数,如果是只判断片选的话,有可能是配置问题,可以将:
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1);里的SPI_CSHOLD去掉。

作者: quzheng766    时间: 2015-10-8 15:41
最终发现问题出在没有使能WDEL  和 修改 WDELAY的值   导致  CS一直为低  而DA需要在上升沿将收到的值转换     要不是您提醒我看CSHOLD  我还不会顺便发现这个问题  非常感谢您的解答




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4