主题中讨论的其他器件: ADS7254
尊敬的先生/女士:
我使用的是 ADs7254外部 ADC 以及使用 SPI 的 LaunchPad TMS320F28379D。 我已经尝试了回送示例、并且工作正常。 但是、当我使用 ADC 加载配置时、我会在"SpiaRegs.SPIRXBUF"寄存器中读取"0"。 DSP 处于主模式、SPI 时钟为500kHz。
我没有在 SPISOMI 上接收任何数据、只要有时钟、我就一直读取0。 当时钟不存在时、它会变为高电平。 此外,两个 SPI 通道之间存在延迟,我不明白为什么?
我在 SPI 配置下连接。 我还尝试发送到 ADC 0x0800而不是0x8800、因为我想在 16-CLK、双 SDO 模式(CFR.B11 = 1、CFR.B10 = 0)下工作、但我始终读为0。
谢谢你。
#define SPI_BRR ((200E6 / 4)/ 500E3)- 1.
//=================== SPI - A ================================= //======================================================================================== //Init GPIO SPIA EALLOW; GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO16上的上拉 GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO17上的上拉 GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO18上的上拉 GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;//启用 GPIO19上的上拉 GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO17 GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO18 GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;//异步输入 GPIO19 GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将 GPIO16配置为 SPI GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3; GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3; GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3; GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;//将 GPIO17配置为 SPI GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;//将 GPIO18配置为 SPI GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;//将 GPIO19配置为 SPI GpioCtrlRegs.GPBDIR.bit.GPIO58 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO59 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO60=1; GpioCtrlRegs.GPBDIR.bit.GPIO61=1; //=================== SPI - B ================================= //=========== 初始化 GPIO SPIB =================== GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;//启用 GPIO24上的上拉 GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;//启用 GPIO25上的上拉 GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;//启用 GPIO26上的上拉 GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0;//启用 GPIO27上的上拉 GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3;//异步输入 GPIO24 GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3;//异步输入 GPIO25 GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3;//异步输入 GPIO26 GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;//异步输入 GPIO27 GpioCtrlRegs.GPAGMUX2.bit.GPIO24=1;//配置 GPIO24 GpioCtrlRegs.GPAGMUX2.bit.GPIO25=1; GpioCtrlRegs.GPAGMUX2.bit.GPIO26 = 1; GpioCtrlRegs.GPAGMUX2.bit.GPIO27 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2;//作为 SPI GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2;//将 GPIO25配置为 SPI GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 2;//将 GPIO26配置为 SPI GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 2;//将 GPIO27配置为 SPI GpioCtrlRegs.GPADIR.bit.GPIO24 = 1; GpioCtrlRegs.GPADIR.bit.GPIO25 = 0; GpioCtrlRegs.GPADIR.bit.GPIO26 = 1; GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; EDIS; void SPI_init (){ //Init SPI A SpiaRegs.SPICCR.bit.SPISWRESET=0; SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//输出上升沿,输入被锁存下降沿 SpiaRegs.SPICCR.bit.HS_MODE = 0;//高速模式禁用 SpiaRegs.SPICCR.bit.SPICHAR=15; SpiaRegs.SPICCR.bit.SPILBK=0; //Loopback Disable (测试模式) SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; SpiaRegs.SPICTL.bit.TALK = 1; SpiaRegs.SPICTL.bit.CLK_PHASE = 0; SpiaRegs.SPICTL.bit.SPIINTENA=0; SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR; SpiaRegs.SPICCR.bit.SPISWRESET=1; //Init SPI B SpibRegs.SPICCR.bit.SPISWRESET=0; SpibRegs.SPICCR.bit.CLKPOLARITY = 0;//输出上升沿,输入被锁存下降沿 SpibRegs.SPICCR.bit.HS_MODE = 0;//高速模式禁用 SpibRegs.SPICCR.bit.SPICHAR=15; SpibRegs.SPICCR.bit.SPILBK=0; //Loopback Disable (测试模式) SpibRegs.SPICTL.bit.MASTER_SLAVE = 1; SpibRegs.SPICTL.bit.TALK = 1; SpibRegs.SPICTL.bit.CLK_PHASE = 0; SpibRegs.SPICTL.bit.SPIINTENA=0; SpibRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR; SpibRegs.SPICCR.bit.SPISWRESET=1; } __interrupt void epwm1_ISR (void) { SpiaRegs.SPITXBUF = 0x8800; SpibRegs.SPITXBUF = 0x8800; while (! SpiaRegs.SPISTS.bit.INT_FLAG ){} SPI_A = SpiaRegs.SPIRXBUF; while (! SpibRegs.SPISTS.bit.INT_FLAG ){} SPI_B = SpibRegs.SPIRXBUF; }