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.

关于28335的mcbsp的问题

问题1:我采用的是ti例程里的mcbsp中断方式,取消回环测试模式后,能进mcbsp接收中断,但是不进发送中断,而且收到的数据有部分也不对。用示波器观测,通过的mcbsp发送给28335的波形也完全正确。在mcbsp里,接收是每帧长为16字,字长为8位,发送为每帧为8字,字长为8位。

问题2:RCR1和RCR2 ,这两个寄存器里都有每帧长度和字长的设置,的区别是什么,XCR1和XCR2的区别是什么?

问题3:关于mcbsp的配置如下:

void InitMcbspa(void)
{
McbspaRegs.SPCR2.bit.FRST=0; // 帧同步信号产生器复位
McbspaRegs.SPCR2.bit.GRST=0; // 复位采样率发生器
McbspaRegs.SPCR2.bit.XRST=0; // 发送器复位
McbspaRegs.SPCR1.bit.RRST=0; // 接收器复位
McbspaRegs.SPCR2.all=0x0000; // 发送器禁止
McbspaRegs.SPCR1.all=0x0000; // 接收器禁止
McbspaRegs.RCR2.all=0x0F01; // 单相帧模式,无数据延迟
McbspaRegs.RCR1.all=0x0F00; //接收帧长度为每帧16个串行字,每个串行字位8位
McbspaRegs.XCR2.all=0x0701; // 单相帧模式,无数据延迟
McbspaRegs.XCR1.all=0x0700;//一帧8个字节
McbspaRegs.SRGR2.all=0x3140;//采样率发生寄存器
McbspaRegs.SRGR1.all=0x010f;//采样率发生寄存器
McbspaRegs.MCR2.all=0x0;//多通道控制寄存器
McbspaRegs.MCR1.all=0x0;//多通道控制寄存器
McbspaRegs.PCR.all=0x0A00; //引脚控制寄存器
McbspaRegs.MFFINT.bit.XINT = 1; // Enable Transmit Interrupts
McbspaRegs.MFFINT.bit.RINT = 1; // Enable Receive Interrupts
McbspaRegs.SPCR2.bit.GRST=1; //使能采样率生成器
delay_loop(); // Wait at least 2 SRG clock cycles
McbspaRegs.SPCR2.bit.XRST=1; //使能发送单元
McbspaRegs.SPCR1.bit.RRST=1; //使能接收单元
McbspaRegs.SPCR2.bit.FRST=1; //帧同步信号产生器复位
}

void InitMcbspa8bit(void)
{
McbspaRegs.RCR1.bit.RWDLEN1=0; // 8-bit word
McbspaRegs.XCR1.bit.XWDLEN1=0; // 8-bit word
}

void InitMcbspaGpio(void)
{
EALLOW;

/* Configure McBSP-A pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be McBSP functional pins.
// Comment out other unwanted lines.

GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 2; // GPIO20 is MDXA pin
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 2; // GPIO21 is MDRA pin
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 2; // GPIO22 is MCLKXA pin
// GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 2; // GPIO7 is MCLKRA pin (Comment as needed)
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1; // GPIO58 is MCLKRA pin (Comment as needed)
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 2; // GPIO23 is MFSXA pin

GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 1; // GPIO59 is MFSRA pin (Comment as needed)

/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.

GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; // Enable pull-up on GPIO20 (MDXA)
GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; // Enable pull-up on GPIO21 (MDRA)
GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; // Enable pull-up on GPIO22 (MCLKXA)
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0; // Enable pull-up on GPIO58 (MCLKRA) (Comment as needed)
GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; // Enable pull-up on GPIO23 (MFSXA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0; // Enable pull-up on GPIO59 (MFSRA) (Comment as needed)

/* Set qualification for selected input pins to asynch only */
// This will select asynch (no qualification) for the selected pins.
// Comment out other unwanted lines.


GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 3; // Asynch input GPIO21 (MDRA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 3; // Asynch input GPIO22 (MCLKXA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input GPIO58(MCLKRA) (Comment as needed)
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3; // Asynch input GPIO23 (MFSXA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // Asynch input GPIO59 (MFSRA) (Comment as needed)

EDIS;
}