我已经能够让 McBSP 从 CPU1工作、但现在我需要将其移至 CPU2。 这样、我就没有时钟了。 我在 SPI 模式下运行。
两个 McBSP 器件均分配给 CPU2 (来自 CPU1):
DevCfgRegs.CPUSEL9.ALL = 0x00000003;
ClkCfgRegs.LOSPP.ALL = 2;
CPU2中的时钟启用:
CpuSysRegs.PCLKCR11.bit.McBSP_A = 1;
CpuSysRegs.PCLKCR11.bit.McBSP_B = 1;
CPU1中的 GPIO 多路复用:
GpioCtrlRegs.GPACSEL1.bit.GPIO1 = 2;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 3;//MFSRB
GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 3;
GpioCtrlRegs.GPACSEL1.bit.GPIO3=2;
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 3;//MCLKRB
GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3;
GpioCtrlRegs.GPACSEL2.bit.GPIO14=2;
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 3;//MCLKXB
GpioCtrlRegs.GPACSEL4.bit.GPIO25 = 2;
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3;//MDRB
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3;
GpioCtrlRegs.GPACSEL4.bit.GPIO27 = 2;
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 3;//MFDXB
CPU2中的 Mcbspb 设置:
McbspbRegs.SPCR2.all=0x0000;//重置 FS 发生器、采样率发生器和发送器
McbspbRegs.SPCR1.all=0x0000;//复位接收器、右对齐字、数字回路中断
McbspbRegs.SPCR1.bit.DLB = 0;
McbspbRegs.pcr.all = 0x0F08;//(CLKXM=CLKRM=FSXM=FSRM=1、FSXP=1)
McbspbRegs.SPCR1.bit.CLKSTP= 2;//与 CLKXP/CLKRP 一起
//确定计时方案
McbspbRegs.pcr.bit.CLKXP = 0;// CPOL = 0、CPHA = 0上升沿
//无延迟
McbspbRegs.pcr.bit.CLKRP = 0;
McbspbRegs.pcr.bit.SCLKME = 0;
McbspbRegs.RCR2.bit.RDATDLY = 01;// FSX 设置时间1处于主控模式。
// 0表示从机模式(接收)
McbspbRegs.XCR2.bit.XDATDLY = 01;// FSX 设置时间1在主控模式中。
// 0表示从机模式(发送)
McbspbRegs.RCR1.bit.RWDLEN1 = 2;// 16位字
McbspbRegs.XCR1.bit.XWDLEN1 = 2;// 16位字
McbspbRegs.SRGR2.all = 0x2000;// CLKSM=1、FPER = 1个 CLKG 周期
McbspbRegs.SRGR1.all = 0x000F;//帧宽度= 1 CLKG 周期、
// CLKGDV=16
McbspbRegs.SRGR2.bit.FPER = 15;
McbspbRegs.SPCR2.bit.GRST=1;//启用采样率发生器
for (us_temp=0;us_temp<(1000);us_temp++);//等待至少2个 SRG 时钟周期
McbspbRegs.SPCR2.bit.XRST=1;//从复位中释放 TX
McbspbRegs.SPCR1.bit.RRST=1;//从复位中释放 RX
McbspbRegs.SPCR2.bit.frst=1;//帧同步发生器复位
McBSPb 只用于接收。 有什么不知道为什么我看不到时钟? 既未 设置错误位、RFULL 也未设置 RSYNCERR。
Lee