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.

C6748通过MCBSP与DAC8831通讯进行数模变换过程中遇到问题。



void McBSP1Init(void)
{
#ifdef MCBSP_DAC
// 禁用 FRST GRST XRST RRST
McBSP1Regs.SPCR.bit.FRST=0;
McBSP1Regs.SPCR.bit.GRST=0;
McBSP1Regs.SPCR.bit.XRST=0;
McBSP1Regs.SPCR.bit.RRST=0;

// McBSP0 串行口控制寄存器
McBSP1Regs.SPCR.bit.DLB=0;
McBSP1Regs.SPCR.bit.RJUST=0;
McBSP1Regs.SPCR.bit.CLKSTP = 3; // CLKSTP = 3 CLKSTP = 10b or 11b The clock stop mode (without or with a clock delay) is selected
McBSP1Regs.SPCR.bit.DXENA = 0;

McBSP1Regs.SPCR.bit.FREE=0;
McBSP1Regs.SPCR.bit.SOFT=0;

McBSP1Regs.RCR.bit.RDATDLY = 0; //接收数据延迟配置为1位数据延迟
McBSP1Regs.RCR.bit.RPHASE = 0; //每帧设置为1相
McBSP1Regs.RCR.bit.RFRLEN1 = 0; //每帧1个字
McBSP1Regs.RCR.bit.RWDLEN1 = 2; //每字16位
McBSP1Regs.RCR.bit.RWDREVRS=0; // 无数据位倒置

McBSP1Regs.XCR.bit.XDATDLY = 0; //发送数据延迟配置为0位数据延迟
McBSP1Regs.XCR.bit.XPHASE = 0;
McBSP1Regs.XCR.bit.XFRLEN1 = 0;
McBSP1Regs.XCR.bit.XWDLEN1 = 2; //16位

McBSP1Regs.SRGR.bit.FSGM = 1; //在每个字传输期间FSX信号有效
McBSP1Regs.SRGR.bit.GSYNC = 0;
McBSP1Regs.SRGR.bit.CLKSM = 1; //采样率发生器的始终来源于CPU时钟
McBSP1Regs.SRGR.bit.CLKSP = 0; //CLKS上升沿产生CLKG和FSG
McBSP1Regs.SRGR.bit.CLKGDV = 23; //采样率发生器的始终分频系数设定为23, CLKG=CPU CLOCK/(1+CLKGDV)
McBSP1Regs.SRGR.bit.FPER = 74; //设置帧周期为(FPER+1)*CLKG 74
McBSP1Regs.SRGR.bit.FWID = 16; //设置帧宽度为(1+FWID)*CLKG 16
/*************************************************************/
/* 时钟开始于下降沿(有延迟),缓冲串口在CLKX下降沿前半个时钟周期发送数据,在CLKR下降沿接收数据 */
McBSP1Regs.PCR.bit.CLKXM = 1; //设置CLKX0引脚为输出引脚
McBSP1Regs.PCR.bit.CLKRM = 0;
McBSP1Regs.PCR.bit.FSXM = 1; //配置FSX0引脚为输出
McBSP1Regs.PCR.bit.FSRM = 0;
McBSP1Regs.PCR.bit.SCLKME= 0;

McBSP1Regs.PCR.bit.FSXP = 1;
McBSP1Regs.PCR.bit.FSRP = 1;
McBSP1Regs.PCR.bit.CLKRP = 0;
McBSP1Regs.PCR.bit.CLKXP = 0; //配置FSX引脚高电平有效
// 延时等待内部同步
unsigned char i;
for(i=0;i<200;i++)
asm (" nop");

// 使能 接收
McBSP1Regs.SPCR.bit.RRST = 1;
// 使能 接收帧同步信号
McBSP1Regs.SPCR.bit.FRST = 1;
// 使能 内部采样率生成器
McBSP1Regs.SPCR.bit.GRST = 1;
// 使能 发送
McBSP1Regs.SPCR.bit.XRST = 1;
for(i=0;i<100;i++)
asm (" nop ");
#endif
}

这样配置时,写入发送寄存器的数值和模拟量输出的数值在(-2.5V——1V左右)能够对应,超过一定值后就直接升高到了2.5V,这是为什么呢?