Quantcast
Channel: 数字信号处理器 (DSP) & ARM® 微处理器
Viewing all articles
Browse latest Browse all 21822

帖子: 5509A的MCBSP接口通信问题

$
0
0

感谢您查看我的问题贴,谢谢!

我在用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,没有接收只发送*/     

}


Viewing all articles
Browse latest Browse all 21822

Trending Articles