我将 McBSP 用作时钟停止模式下的 SPI 主器件。 我按照 Example_2833xMcBSP_SPI_DLB.c 所述设置外设、而不是以回送和8位数据的方式进行设置。 出于某种原因、我继承的代码设置为使用 GPIO 作为片选、但它仅连接到单个器件、因此我可以始终将其设置为低电平有效。
问题是、我在序列开始和结束时看到的时钟信号小于8。 我加入了示波器图以供回顾。 谢谢
// McBSP-A 寄存器设置
McbspaRegs.SPCR2.all=0x0000;//复位 FS 发生器、采样频率发生器和发送器
McbspaRegs.SPCR1.All=0x0000;//复位接收器、右对齐字、数字环回断开
McbspaRegs.pcr.all=0x0F08;//(CLKxM=CLKRM=FSXM=FSRM= 1、FSXP = 1)
//McbspaRegs.SPCR1.bit.DLB = 1;
McbspaRegs.SPCR1.bit.CLKSTP = 2;//与 CLKXP/CLKRP 一起确定计时方案
McbspaRegs.pcr.bit.CLKXP = 0;// CPOL = 0、CPHA = 0上升沿无延迟
McbspaRegs.pcr.bit.CLKRP = 0;
McbspaRegs.RCR2.bit.RDATDLY=01;//主模式下的 FSX 设置时间1。 0表示从机模式(接收)
McbspaRegs.XCR2.bit.XDATDLY=01;//主模式下的 FSX 设置时间1。 0表示从机模式(发送)
McbspaRegs.RCR1.bit.RWDLEN1=0;// 8位字
McbspaRegs.XCR1.bit.XWDLEN1=0;// 8位字
McbspaRegs.SRGR2.all=0x2000;// CLKSM=1、FPER = 1 CLKG 周期
// McbspaRegs.SRGR1.all= 0x000F;//帧宽度= 1个100MHz 周期,CLKGDV=16,CLKGDV/16= 6.25MHz
// McbspaRegs.SRGR1.all= 0x000A;//帧宽度= 1个100MHz 周期,CLKGDV=8,CLKGDV/8 = 12.5MHz
McbspaRegs.SRGR1.all= 0x00040;//帧宽度= 1个100MHz 周期、CLKGDV=64、CLKGDV/64 = 1.5MHz 6.5us
// McbspaRegs.RCR2.bit.RFIG = 1;//忽略帧同步信号
// McbspaRegs.XCR2.bit.Xconfig = 1;//忽略帧同步信号
McbspaRegs.SPCR2.bit.GRST=1;//启用采样频率发生器
delay_loop ();//等待至少2个 SRG 时钟周期
McbspaRegs.SPCR2.bit.XRST=1;//从复位中释放 TX
McbspaRegs.SPCR1.bit.RRST=1;//从复位中释放 RX
McbspaRegs.SPCR2.bit.frst=1;//帧同步发生器复位