This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

将F2812的McBSP配置成SPI主模式,读取的数据不对

Other Parts Discussed in Thread: TMS320F28335

        将F2812的McBSP配置成SPI主模式来读取AD芯片的转换数据,因为不需要对这个AD芯片进行配置,所以不需要发送数据给这个芯片,因此,我把MDRA接口配置成通用I/O口,来作为AD芯片的启动信号,因为有3个从设备,所以至少要有两个片选信号,将MFSRA和MFSXA配置成通用I/O口,作为片选信号,不知道这么做是否正确。。。

        然后先将程序下载到内部RAM,进行调试,因为不需要对这个AD芯片进行配置,所以发送伪数据来启动数据传输,但是最后读取的数据不对。。。AD芯片是下降沿读取数据。下面是McBSP的配置情况:

McbspaRegs.SPCR2.bit.XRST = 0;
McbspaRegs.SPCR1.bit.RRST = 0;
McbspaRegs.SPCR2.bit.GRST = 0;

McbspaRegs.SPCR1.bit.CLKSTP = 0x03;

McbspaRegs.PCR.bit.CLKXP = 1;
McbspaRegs.PCR.bit.CLKRP = 1;
McbspaRegs.PCR.bit.SCLKME = 0;
McbspaRegs.PCR.bit.CLKXM = 1;
McbspaRegs.PCR.bit.FSXM = 1;
McbspaRegs.PCR.bit.FSRM = 1;

McbspaRegs.XCR2.bit.XDATDLY = 1;
McbspaRegs.RCR2.bit.RDATDLY = 1;
McbspaRegs.RCR1.bit.RWDLEN1 = 2;
McbspaRegs.XCR1.bit.XWDLEN1 = 2;

McbspaRegs.SRGR1.bit.CLKGDV = 0x0E;
McbspaRegs.SRGR2.bit.FSGM = 0;
McbspaRegs.SRGR2.bit.CLKSM= 1;

asm(" RPT #5 || NOP ");

McbspaRegs.SPCR2.bit.GRST = 1;
asm(" RPT #140 || NOP ");
McbspaRegs.SPCR2.bit.XRST = 1;
McbspaRegs.SPCR1.bit.RRST = 1;
asm(" RPT #140 || NOP ");

困扰很久了,哪位高人指导一下,不甚感激

  • Mcbsp可以配置成兼容SPI协议的模式(时钟停止模式),配置成SPI后,有几点需要注意:

    1. 片选CS有效(拉低)到有效数据输出之间的时间间隔与Mcbsp时钟有关系,据我的观察,这个时间不是太固定,为了满足有些从器件的时序要求,可能需要调节Mcbsp时钟;

    2. SPI输出的FIFO功能很是奇怪,除非你一直有大流量的数据需要传输,不然,不推荐使用这个功能,当需要传输的数据为0之前,如果不在FIFO发送中断中处理中断使能位,一旦需要传输的数据为0,则程序就会陷入FIFO中断的死循环,我的观察是这样,不知道寄存器的配置是否正确,仅供参考!

  • 1.McBSP接口总共有几个?每个McBSP接口有几根pin?

    TMS320F28335总共有两个McBSP接口。每个接口有六根pin, 分别是:MFSX, MFSR, MCLKX, MCLKR, MDX, MDR。 

    2.McBSP用于SPI模式时使用那些pin?他们和标准SPI pin的对应关系是什么?

    SPICLK->MCLKX

    SPISIMO->MDX

    SPISOMI->MDR

    SPISTE->MFSX

    SPITXINT->

    SPIRXINT->

    3.McBSP如何开启clock stop mode以兼容SPI接口?

    通过CLKSTP、CLKXP和CLKRP来配置时钟的极性和延时的SPI兼容模式。

    1.McBSP接口总共有几个?每个McBSP接口有几根pin?

    TMS320F28335总共有两个McBSP接口。每个接口有六根pin, 分别是:MFSX, MFSR, MCLKX, MCLKR, MDX, MDR。 

    2.McBSP用于SPI模式时使用那些pin?他们和标准SPI pin的对应关系是什么?

    SPICLK->MCLKX

    SPISIMO->MDX

    SPISOMI->MDR

    SPISTE->MFSX

    SPITXINT->

    SPIRXINT->

    3.McBSP如何开启clock stop mode以兼容SPI接口?

    通过CLKSTP、CLKXP和CLKRP来配置时钟的极性和延时的SPI兼容模式

  • 我用的是F2812,如果我用通用I/O口来模拟SPI时序的话,可以准确地读出数据,但是用McBSP配置成SPI的模式来读的话,结果就不对,好郁闷啊

  • 问题已经解决了,是我的外设McBSP时钟没有使能,同时也证明了上面的配置是没有问题的,即配置成SPI模式时,可以只使用其中的三根信号线,把MDRA接口配置成通用I/O口,做其他用途。