|
ADC芯片是24bit的PCM4201,配置MCBSP 都不能正常工作,于是求助,搞了好几天了,新手。
DSP型号:TMS320VC5509A MCBSP通过CLKX1引脚向MCBSP1提供25MHZ时钟。
原理图:(见图片,DSP的MCBSP接法)
PCM4201接法:(从器件 SCKI =25MHZ; CLKX1,FSX1由DSP提供)(见图片,PCM4201 ADC)
DSP MCBSP配置:
MCBSP_Config Mcbsp_config1 =
{
MCBSP_SPCR1_RMK(
MCBSP_SPCR1_DLB_OFF, /* DLB = 0,禁止自闭环方式 */
MCBSP_SPCR1_RJUST_LZF, /* RJUST = 2 */
MCBSP_SPCR1_CLKSTP_DISABLE, /* CLKSTP = 0 */
MCBSP_SPCR1_DXENA_OFF, /* DXENA = 1 */
0, /* ABIS = 0 */
MCBSP_SPCR1_RINTM_RRDY, /* RINTM = 0 */
MCBSP_SPCR1_RSYNCERR_NO, /* RSYNCER = 0 */
MCBSP_SPCR1_RRST_DISABLE /* RRST = 0 */
),
MCBSP_SPCR2_RMK(
MCBSP_SPCR2_FREE_NO, /* FREE = 0 */
MCBSP_SPCR2_SOFT_NO, /* SOFT = 0 */
MCBSP_SPCR2_FRST_FSG, /* FRST = 0*/
MCBSP_SPCR2_GRST_CLKG, /* GRST = 0 */
MCBSP_SPCR2_XINTM_XRDY, /* XINTM = 0 */
MCBSP_SPCR2_XSYNCERR_NO, /* XSYNCER = N/A */
MCBSP_SPCR2_XRST_DISABLE /* XRST = 0 */
),
MCBSP_RCR1_RMK(
MCBSP_RCR1_RFRLEN1_OF(3), // RFRLEN1 = 1 //
MCBSP_RCR1_RWDLEN1_32BIT // RWDLEN1 = 2 //
),
MCBSP_RCR2_RMK(
MCBSP_RCR2_RPHASE_SINGLE, // RPHASE = 0 //
MCBSP_RCR2_RFRLEN2_OF(3), // RFRLEN2 = 0 //
MCBSP_RCR2_RWDLEN2_32BIT, // RWDLEN2 = 0 //
MCBSP_RCR2_RCOMPAND_MSB, // RCOMPAND = 0 //
MCBSP_RCR2_RFIG_NO, // RFIG = 0//
MCBSP_RCR2_RDATDLY_1BIT // RDATDLY = 1 //
),
MCBSP_XCR1_RMK(
MCBSP_XCR1_XFRLEN1_OF(3), //XFRLEN1 = 1 //
MCBSP_XCR1_XWDLEN1_32BIT //XWDLEN1 = 2 //
),
MCBSP_XCR2_RMK(
MCBSP_XCR2_XPHASE_SINGLE, // XPHASE = 0 //
MCBSP_XCR2_XFRLEN2_OF(3), // XFRLEN2 = 0//
MCBSP_XCR2_XWDLEN2_32BIT, // XWDLEN2 = 0 //
MCBSP_XCR2_XCOMPAND_MSB, // XCOMPAND = 0 //
MCBSP_XCR2_XFIG_NO, // XFIG = 0 //
MCBSP_XCR2_XDATDLY_1BIT // XDATDLY = 1 //
),
MCBSP_SRGR1_RMK(
63,
3 // WHEN CLKSM=0 39 WHEN CLKSM=1
),
MCBSP_SRGR2_RMK(
127, //fper
MCBSP_SRGR2_FSGM_FSG,// FSGM=1 FSR BY MCBSP
MCBSP_SRGR2_CLKSM_INTERNAL,// CLKSM=0
0,
MCBSP_SRGR2_GSYNC_FREE// IF GSYNC=0 FSG=FOER+1
),
MCBSP_MCR1_DEFAULT,
MCBSP_MCR2_DEFAULT,
MCBSP_PCR_RMK(
MCBSP_PCR_IDLEEN_RESET, // IDLEEN = 0
MCBSP_PCR_XIOEN_SP, // XIOEN = 0
MCBSP_PCR_RIOEN_SP, //RIOEN = 0
MCBSP_PCR_FSXM_INTERNAL, // FSXM =1
MCBSP_PCR_FSRM_INTERNAL, // FSRM = 1
0, // DXSTAT = N/A
MCBSP_PCR_CLKXM_OUTPUT, // CLKXM = 1
MCBSP_PCR_CLKRM_OUTPUT, // CLKRM = 1
MCBSP_PCR_SCLKME_BCLK, // SCLKME =1
MCBSP_PCR_FSXP_ACTIVEHIGH, // FSXP = 0
MCBSP_PCR_FSRP_ACTIVEHIGH, // FSRP = 0
MCBSP_PCR_CLKXP_FALLING, // CLKXP = 0
MCBSP_PCR_CLKRP_FALLING// CLKRP =0
),
MCBSP_RCERA_DEFAULT,
MCBSP_RCERB_DEFAULT,
MCBSP_RCERC_DEFAULT,
MCBSP_RCERD_DEFAULT,
MCBSP_RCERE_DEFAULT,
MCBSP_RCERF_DEFAULT,
MCBSP_RCERG_DEFAULT,
MCBSP_RCERH_DEFAULT,
MCBSP_XCERA_DEFAULT,
MCBSP_XCERB_DEFAULT,
MCBSP_XCERC_DEFAULT,
MCBSP_XCERD_DEFAULT,
MCBSP_XCERE_DEFAULT,
MCBSP_XCERF_DEFAULT,
MCBSP_XCERG_DEFAULT,
MCBSP_XCERH_DEFAULT
};
初始化:
//配置寄存器和启动发送 IIS模式 主设备
hMcbsp1 = MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp1,&Mcbsp_config1);
delay_ms(1);
MCBSP_start(hMcbsp1, MCBSP_RCV_START | MCBSP_XMIT_START, 0);
MCBSP_getConfig(hMcbsp1,&Mcbsp_config1test);
//复位PCM4201
asm(" BCLR XF");
delay_ms(1);
asm(" BSET XF");
}
简单的读写IIS
void IIS_process(void)
{
while(!MCBSP_xrdy(hMcbsp1));
MCBSP_write32(hMcbsp1,0);
}
问题描述:按照上面的配置IIS时序中的FSX/R 时序不正常
异常时序图:第2行时序不正常,第一行为CLKX=6.25MHZ,第二行为FSX/R 应该为48K左右
(见不正常时序的图片)
测试别人程序的时序(我没有这个程序例子,CLKX=6.25MHZ FSX/R=48.8K CLKX=128*FSX/R;FSX/R宽度=64CLKX时钟)
|
|