感谢您查看我的问题贴,谢谢!
我在用DSP的5509A的mcbsp接口和FPGA做通信测试,测试过程是:
mcbsp1发送一个16bit的数据到fpga,mcbsp只发送不接收,只发送一次。
现在的问题出现在mcbsp这里,debug时检测不到xrdy位置1。这个问题困扰我很久了,测试一直不成功,万般无奈特来求助,望技术人员指点思路,万分感谢!期待您的回复!
下面我贴出我的配置代码,main函数不复杂很简单,都是些配置。
我觉得应该是PCR的配置和mcbsp写入数据那里有问题,其他的我感觉问题不大。我想配置的初衷是:接收帧同步由FSR脚提供,接收/发送时钟由内部的采样率发生器提供,发送帧同步脉冲由采样率发生器提供。
#include <csl.h>
#include <csl_i2c.h>
#include <stdio.h>
#include <csl_pll.h>
#include <csl_mcbsp.h>
/*锁相环的设置CPU144mhz*/
PLL_Config myConfig = {
0,
1,
12,
1
};
/*采样率发生器的输入时钟源 CPU
CPU2分频得到CLKG
单相,一帧一个字节,每字节16bit
发送/接收帧1bit延迟
发送数据在上升沿,接收数据在下降沿
发送/接收帧同步脉冲高电平使能
发送/接收时钟由内部发生器产生
发送同步脉冲由mcbsp产生,当DXR拷贝数据到XSR时产生
接收同步脉冲由外部FSR脚产生
*/
MCBSP_Config Mcbsp1Config = {
MCBSP_SPCR1_RMK(
MCBSP_SPCR1_DLB_OFF, /* DLB = 0,禁止自闭环方式 */
MCBSP_SPCR1_RJUST_LZF, /* RJUST = 2左对齐低位补0 */
MCBSP_SPCR1_CLKSTP_DISABLE, /* CLKSTP = 0 ,禁止clock stop模式*/
MCBSP_SPCR1_DXENA_ON, /* DXENA = 1 ,发送延迟使能*/
0, /* ABIS = 0 */
MCBSP_SPCR1_RINTM_RRDY, /* RINTM = 0 mcbsp给cpu发送中断使能*/
0, /* 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 */
0, /* XSYNCER = N/A */
MCBSP_SPCR2_XRST_DISABLE /* XRST = 0 */
),
MCBSP_RCR1_RMK(
MCBSP_RCR1_RFRLEN1_OF(0), /* RFRLEN1 = 0 ,接收帧长1个字节*/
MCBSP_RCR1_RWDLEN1_16BIT /* RWDLEN1 = 2 ,一个字节16bit*/
),
MCBSP_RCR2_RMK(
MCBSP_RCR2_RPHASE_SINGLE, /* RPHASE = 0 ,单相*/
MCBSP_RCR2_RFRLEN2_OF(0), /* RFRLEN2 = 0 */
MCBSP_RCR2_RWDLEN2_8BIT, /* RWDLEN2 = 0 */
MCBSP_RCR2_RCOMPAND_MSB, /* RCOMPAND = 0 */
MCBSP_RCR2_RFIG_YES, /* RFIG = 0 */
MCBSP_RCR2_RDATDLY_1BIT /* RDATDLY = 1 ,接收帧1bit数据延迟*/
),
MCBSP_XCR1_RMK(
MCBSP_XCR1_XFRLEN1_OF(0), /* XFRLEN1 = 0,发送帧长1个字节 */
MCBSP_XCR1_XWDLEN1_16BIT /* XWDLEN1 = 2 ,一个字节16bit*/
),
MCBSP_XCR2_RMK(
MCBSP_XCR2_XPHASE_SINGLE, /* XPHASE = 0 */
MCBSP_XCR2_XFRLEN2_OF(0), /* XFRLEN2 = 0 */
MCBSP_XCR2_XWDLEN2_8BIT, /* XWDLEN2 = 0 */
MCBSP_XCR2_XCOMPAND_MSB, /* XCOMPAND = 0 */
MCBSP_XCR2_XFIG_YES, /* XFIG = 0 */
MCBSP_XCR2_XDATDLY_1BIT /* XDATDLY = 1 ,发送帧1bit延迟*/
),
MCBSP_SRGR1_DEFAULT, /*默认值是帧脉冲宽度是1个CLKG周期,输入频率2分频得到CLKG*/
MCBSP_SRGR2_DEFAULT, /*CLKSM=1*/
MCBSP_MCR1_DEFAULT,
MCBSP_MCR2_DEFAULT,
MCBSP_PCR_RMK(
MCBSP_PCR_IDLEEN_RESET, /* IDLEEN = 0 , 当PERIPH域空闲时,MCBSP保持使能 */
MCBSP_PCR_XIOEN_SP, /* XIOEN = 0 , CLKX,FSX,DX,CLKS脚是串口脚 */
MCBSP_PCR_RIOEN_SP, /* RIOEN = 0 , CLKR,FSR,DR,CLKS脚是串口脚*/
MCBSP_PCR_FSXM_INTERNAL, /* FSXM = 1 , 发送帧同步脉冲由内部mcbsp提供 */
MCBSP_PCR_FSRM_EXTERNAL, /* FSRM = 0 , 接收帧同步脉冲由外部FSR脚提供 */
0, /* DXSTAT = N/A */
MCBSP_PCR_CLKXM_OUTPUT, /* CLKXM = 1, 发送器时钟由采样率发生器获得,CLKX脚作为输出脚 */
MCBSP_PCR_CLKRM_INPUT, /* CLKRM = 0 , 接收器时钟由CLKR引脚获得*/
MCBSP_PCR_SCLKME_NO, /* SCLKME = 0 , 采样率时钟源来自CPU或者CLKS */
MCBSP_PCR_FSXP_ACTIVEHIGH, /* FSXP = 0 , 发送帧脉冲高电平使能 */
MCBSP_PCR_FSRP_ACTIVEHIGH, /* FSRP = 0 ,接收帧脉冲高电平使能 */
MCBSP_PCR_CLKXP_RISING, /* CLKXP = 0 , 发送数据被驱动在CLKX的上升沿 */
MCBSP_PCR_CLKRP_FALLING /* CLKRP = 0 接收数据在CLKR下降沿沿采样 */
),
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
};
/*定义McBSP的句柄*/
MCBSP_Handle hMcbsp;
void main(void)
{
int a;
CSL_init();
/*设置系统的运行速度为140MHz*/
PLL_config(&myConfig);
/*初始化McBSP1在使用MCBSP之前必须要做的一步*/
hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);
/*设置McBSP1*/
MCBSP_config(hMcbsp,&Mcbsp1Config);
/* Start Sample Rate Generator and Frame Sync */
MCBSP_start(hMcbsp, MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,0x300);
/* Enable MCBSP transmit and receive */
MCBSP_start(hMcbsp, MCBSP_RCV_START | MCBSP_XMIT_START, 0);
a = MCBSP_rrdy(hMcbsp); /*定义a变量的目的是在ccs中观察a的值,即查看xrdy位是否能够为1*/
while(!a)
{}
MCBSP_write16(hMcbsp,0x1234);/*向发送寄存器DXR1写入0x1234,没有接收只发送*/
}