我正在参与一个 UPS 开发项目、其中使用双28335 DSP 作为控制器。这两个 DSP 通过 McBSP 进行通信。
我正在计算一个 DSP 无法从另一个 DSP 接收消息的问题。我尝试重新建立 McBSP 外设、它可以正常工作;但有时
DSP 可以关闭。下面是我使用的 McBSP 初始子 rootine、
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 2;// GPIO20是 MDXA 引脚
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 2;// GPIO21是 MDRA 引脚
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 2;// GPIO22是 MCLKXA 引脚
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1;// GPIO58是 MCLKRA 引脚(根据需要注释)
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 2;// GPIO23是 MFSXA 引脚
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 1;// GPIO59是 MFSRA 引脚(根据需要注释)
GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0;//启用 GPIO20 (MDXA)上的上拉
GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;//启用 GPIO21上的上拉(MDRA)
GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0;//启用 GPIO22上的上拉电阻(MCLKXA)
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO58上的上拉电阻(MCLKRA)(需要注释)
GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0;//启用 GPIO23 (MFSXA)上的上拉电阻
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO59上的上拉电阻(MFSRA)(根据需要注释)
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 3;//异步输入 GPIO20 (MDXA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 3;//异步输入 GPIO21 (MDRA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 3;//异步输入 GPIO22 (MCLKXA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO58 (MCLKRA)(需要注释)
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3;//异步输入 GPIO23 (MFSXA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO59 (MFSRA)(需要注释)
EDIS;
//********* 复位 McBSP
McbspaRegs.SPCR2.bit.frst=0;//帧同步发生器复位
McbspaRegs.SPCR2.bit.GRST=0;//采样率发生器复位
McbspaRegs.SPCR2.bit.XRST=0;//发送器复位
McbspaRegs.SPCR1.bit.RRST=0;//接收器复位
McbspaRegs.SPCR1.all=0x0000;//回送禁用,右对齐,
McbspaRegs.SPCR1.bit.CLKSTP= 0;//2014.4.4
McbspaRegs.pcr.all=0x0000;
McbspaRegs.pcr.bit.CLKXM =1;//Vivian20140409
McbspaRegs.pcr.bit.CLKRM =0;
McbspaRegs.pcr.bit.SCLKME = 0;//vivian20140404
McbspaRegs.SRGR2.bit.CLKSM =1;//Vivian20140409
McbspaRegs.SRGR2.bit.GSYNC=1;//vivian20140404
McbspaRegs.pcr.bit.CLKXP = 0;// CPOL = 0、CPHA = 0上升沿无延迟
McbspaRegs.pcr.bit.CLKRP = 0;//Vivian20140409
McbspaRegs.pcr.bit.FSRM = 0;
McbspaRegs.pcr.bit.FSRP=0;//20140404高电平有效
McbspaRegs.pcr.bit.FSXP=0;//20140409 Vivian 高电平有效
McbspaRegs.SRGR2.bit.FSGM=0;
McbspaRegs.pcr.bit.FSXM=1;//////////// Vivian 20140409
McbspaRegs.SRGR1.all= 0x0F;//帧宽度= 1 CLKG 周期、CLKGDV=16 // Ethan 2014.5.5
McbspaRegs.RCR2.bit.RDATDLY=01;// FSX 设置时间1在主控模式下。 0表示从机模式(接收)
McbspaRegs.XCR2.bit.XDATDLY=01;// FSX 设置时间1在主控模式。 0表示从机模式(发送)
McbspaRegs.RCR2.bit.RFIG = 1;//Ethan 2014.4.29
McbspaRegs.XCR2.bit.XFIG = 1;
McbspaRegs.RCR2.bit.RPHASE=0;//// Vivian 20140404
McbspaRegs.RCR1.bit.RFRLEN1 =0;// 2014.24 1字
McbspaRegs.RCR1.bit.RWDLEN1=5;// 32位字//Ethan 2014.4.4.30
McbspaRegs.XCR2.bit.XPhasy=0;//// Vivian 20140409
McbspaRegs.XCR1.bit.XFRLEN1 =0;// 2014.24 1字
McbspaRegs.XCR1.bit.XWDLEN1=5;// 32位字//Ethan 2014.4.4.30
McbspaRegs.SPCR1.bit.RINTM=0;
McbspaRegs.MFFINT.bit.RINT = 1;//启用接收中断
McbspaRegs.SPCR2.bit.GRST=1;//启用采样率发生器
delay_loop ();//等待至少2个 SRG 时钟周期
McbspaRegs.SPCR2.bit.XRST=1;//从复位中释放 TX
McbspaRegs.SPCR1.bit.RRST=1;//从复位中释放 RX
// delay_loop ();
clkg_delay_loop ();
McbspaRegs.SPCR2.bit.frst=1;//帧同步发生器复位
换句话说、是否有通过 McBSP 接口实现双 DSP 通信的参考设计?