主题中讨论的其他器件:C2000WARE、 ADS7809
您好!
我使用的是 McBSP-B 的16位 ADC 输入、GPIO25上的接收串行数据 MDRB、GPIO60上的接收时钟 MCLKRB 和 GPIO61上的接收帧同步 MFSRB。
我的问题是 接收器就绪位 RRDY 未置位、数据输入未加载到数据接收寄存器 DRR1中。
如果在运行时使用仿真器切换发送帧同步极性位 FSRP、我会在 DRR1中获得良好的数据、就像接收帧同步信号 MFSRB 没有开始传输一样。
示波器 CH1为 MFSRB、CH2为 MCLKRB、CH3为 MDRB。 当我使用仿真器读取 GPIO 输入时、所有信号都是正确的。
空 InitMcbspb (空)
{
// McBSP-B 寄存器设置
McbspbRegs.SPCR2.all=0x0000;//重置 FS 发生器、采样率发生器和发送器
McbspbRegs.SPCR1.All=0x0000;//复位接收器、右对齐字
// McbspbRegs.SPCR1.bit.DLB = 1;//为测试启用回送模式。 为正常 McBSP 传输模式注释。
McbspbRegs.MFFINT.All=0x0;//禁用所有中断
McbspbRegs.RCR2.all=0x0;//单相帧、1字/帧、无压扩(接收)
McbspbRegs.RCR1.All=0x0;
McbspbRegs.XCR2.all=0x0;//单相帧、1字/帧、无压扩(发送)
McbspbRegs.XCR1.All=0x0;
McbspbRegs.pcr.bit.FSXM = 1;// FSX 在内部生成、FSR 源自外部源
McbspbRegs.SRGR2.bit.CLKSM = 1;// CLKSM=1 (如果 SCLKME=0、SRG 的 I/p 时钟为 LSPCLK)
McbspbRegs.SRGR2.bit.FPER = 31;// FPER = 32 CLKG 周期
McbspbRegs.SRGR1.bit.FWID = 0;//帧宽度= 1 CLKG 周期
McbspbRegs.SRGR1.bit.CLKGDV = CLKGDV_VAL;// CLKG 频率= LSPCLK/(CLKGDV+1)
delay_loop ();//等待至少2个 SRG 时钟周期
InitMcbspb16bit();// 16位字
McbspbRegs.pcr.bit.FSRP = 1;//帧同步脉冲 FSR 为低电平有效。
McbspbRegs.pcr.bit.CLKRP = 1;//接收数据在 MCLKR 的上升沿被采样
McbspbRegs.pcr.bit.CLKXM = 1;// CLKX 在内部生成、CLKR 取自一个外部源
delay_loop ();//等待至少2个 SRG 时钟周期
McbspbRegs.SPCR2.bit.GRST=1;//启用采样率发生器
clkg_delay_loop ();//等待至少2个 CLKG 周期
McbspbRegs.SPCR2.bit.XRST=1;//从复位中释放 TX
McbspbRegs.SPCR1.bit.RRST=1;//从复位中释放 RX
McbspbRegs.SPCR2.bit.frst=1;//帧同步发生器复位
}
空 InitMcbspa16位(空)
{
McbspaRegs.RCR1.bit.RWDLEN1=2;// 16位字
McbspaRegs.XCR1.bit.XWDLEN1=2;// 16位字
}
空 InitMcbspbGpio (空)
{
EALLOW;
/*使用 GPIO 寄存器配置 McBSP-A 引脚*/
//这指定哪些可能的 GPIO 引脚将是 McBSP 功能引脚。
//注释掉其他不需要的行。
//GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 3;// GPIO12是 MDXB 引脚(根据需要注释)
// GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 3;// GPIO24是 MDXB 引脚(根据需要注释)
//GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 3;// GPIO13是 MDRB 引脚(根据需要注释)
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3;// GPIO25是 MDRB 引脚(根据需要注释)
//GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 3;// GPIO14是 MCLKXB 引脚(根据需要注释)
// GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 3;// GPIO26是 MCLKXB 引脚(根据需要注释)
// GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 3;// GPIO3是 MCLKRB 引脚(根据需要注释)
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 1;// GPIO60是 MCLKRB 引脚(根据需要注释)
//GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 3;// GPIO15是 MFDXB 引脚(根据需要注释)
// GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 3;// GPIO27是 MFSXB 引脚(根据需要注释)
// GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 3;// GPIO1是 MFSRB 引脚(根据需要注释)
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 1;// GPIO61是 MFSRB 引脚(根据需要注释)
/*为所选引脚启用内部上拉*/
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
//注释掉其他不需要的行。
// GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;//启用 GPIO24上的上拉(MDXB)(根据需要注释)
//GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用 GPIO12上的上拉电阻(MDXB)(根据需要注释)
//GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;//启用 GPIO25 (MDRB)上的上拉电阻(根据需要注释)
//GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;//启用 GPIO13上的上拉电阻(MDRB)(根据需要注释)
//GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;//启用 GPIO26上的上拉电阻(MCLKXB)(根据需要注释)
//GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0;//启用 GPIO14上的上拉电阻(MCLKXB)(根据需要注释)
// GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;//启用 GPIO3上的上拉电阻(MCLKRB)(根据需要注释)
//GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO60上的上拉电阻(MCLKRB)(根据需要注释)
// GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0;//启用 GPIO27上的上拉电阻(MFSGB)(根据需要注释)
//GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0;//启用 GPIO15上的上拉电阻(MFSGB)(根据需要注释)
// GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;//启用 GPIO1 (MFSRB)上的上拉电阻(根据需要注释)
//GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;//启用 GPIO61 (MFSRB)上的上拉电阻(根据需要注释)
/*将所选输入引脚的限定条件设置为仅异步*/
//这将为所选引脚选择异步(无限定条件)。
//注释掉其他不需要的行。
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3;//异步输入 GPIO25 (MDRB)(需要注释)
//GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3;//异步输入 GPIO13 (MDRB)(需要注释)
// GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3;//异步输入 GPIO26 (MCLKXB)(需要注释)
//GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 3;//异步输入 GPIO14 (MCLKXB)(需要注释)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3;//异步输入 GPIO3 (MCLKRB)(需要注释)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO60 (MCLKRB)(需要注释)
// GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;//异步输入 GPIO27 (MFSXB)(需要注释)
//GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3;//异步输入 GPIO15 (MFSXB)(需要注释)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 3;//异步输入 GPIO1 (MFSRB)(需要注释)
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;//异步输入 GPIO61 (MFSRB)(需要注释)
EDIS;
}
空 InitXintf32Gpio()
{
EALLOW;
GpioCtrlRegs.GPBMUX2.bit.GPIO48=3;// XD31
GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 3;// XD30
GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 3;// XD29
GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 3;// XD28
GpioCtrlRegs.GPBMUX2.bit.GPIO52=3;// XD27
GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 3;// XD26
GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 3;// XD25
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 3;// XD24
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 3;// XD23
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 3;// XD22
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;// XD21
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;// XD20
// GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;// XD19
// GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;// XD18
GpioCtrlRegs.GPBMUX2.bit.GPIO62=3;// XD17
GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 3;// XD16
GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 3;// XD31异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 3;// XD30异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 3;// XD29异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO51 = 3;// XD28异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO52 = 3;// XD27异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO53 = 3;// XD26异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3;// XD25异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3;// XD24异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3;// XD23异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3;// XD22异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;// XD21异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;// XD20异步输入
// GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;// XD19异步输入
// GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;// XD18异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO62=3;// XD17异步输入
GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3;// XD16异步输入
InitXintf16Gpio();
}
感谢您的帮助、
Curtis Randall