主题中讨论的其他器件: 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;
}

