wushaojay 发表于 2015-1-12 15:35

DSP5509用SPI配置AD9857求救,求分析问题

MCBSP_Config Configclockstop8= {
MCBSP_SPCR1_RMK(
    MCBSP_SPCR1_DLB_OFF,                   /* DLB    = 0 禁止数字回环*/
    MCBSP_SPCR1_RJUST_RZF,               /* RJUST= 0 接收数据符号拓展和调整方式*/
    MCBSP_SPCR1_CLKSTP_NODELAY,            /* 重要CLKSTP = 10 时钟停止模式 与CLKXP有关*/
    MCBSP_SPCR1_DXENA_NA,                  /* DXENA= 0 DX引脚延时使能*/
    MCBSP_SPCR1_ABIS_DISABLE,            /* ABIS   = 0 关闭abis*/
    MCBSP_SPCR1_RINTM_RRDY,                /* RINTM= 0 接收中断模式*/
    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_RESET,                /* FRST   = 0 */
    MCBSP_SPCR2_GRST_RESET,                /* 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 帧长为一字*/
MCBSP_RCR1_RWDLEN1_16BIT               /* RWDLEN1 = 0 每字为8bite*/
),
MCBSP_RCR2_RMK(   
    MCBSP_RCR2_RPHASE_SINGLE,            /* RPHASE= 0 模式一:只与RCR1有关*/
    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 帧长为一字*/
    MCBSP_XCR1_XWDLEN1_16BIT               /* XWDLEN1 = 0 每字8bite*/
   
),   
MCBSP_XCR2_RMK(   
   MCBSP_XCR2_XPHASE_SINGLE,            /* XPHASE= 0 模式一:帧长只与XCR1有关*/
    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_RMK(
   MCBSP_SRGR1_FWID_OF(0),                /* 停止模式无效**重要FWID    = 0 帧同步信号的脉宽周期数*/
   MCBSP_SRGR1_CLKGDV_OF(11)               /* 停止模式无效**重要CLKGDV=9 CLKG时钟频率*/
),   
MCBSP_SRGR2_RMK(
    0,//MCBSP_SRGR2_GSYNC_FREE,                /* FREE    = 0 内部时钟帧同步 */
    MCBSP_SRGR2_CLKSP_RISING,            /* 重要CLKSP   = 0 CLKS 引脚极性*/
    MCBSP_SRGR2_CLKSM_INTERNAL,            /* 重要CLKSM   = 1 cpu时钟*/
    MCBSP_SRGR2_FSGM_DXR2XSR,            /* FSGM    = 0 发送帧同步模式,如果FXSM=1,当DXR->XSR时,McBSP产生帧同步信号*/
    MCBSP_SRGR2_FPER_OF(15)    /*重要 FPER    = 0 FSG信号帧同步时钟周期数,应该是7*/
),
MCBSP_MCR1_DEFAULT,
MCBSP_MCR2_DEFAULT,
MCBSP_PCR_RMK(
   MCBSP_PCR_IDLEEN_RESET,               /* IDLEEN   = 0   省电使能*/
   MCBSP_PCR_XIOEN_SP,                     /* XIOEN    = 0   发送GPIO使能*/
   MCBSP_PCR_RIOEN_SP,                     /* RIOEN    = 0   接收GPIO使能*/
   MCBSP_PCR_FSXM_INTERNAL,                /* 重要FSXM   = 1发送帧同步模式,0由FSX引脚提供,1由McBSP提供*/
   MCBSP_PCR_FSRM_INTERNAL,                /* 重要FSRM   = 1   接收帧同步模式,0由FSR引脚提供,1由McBSP提供*/
   MCBSP_PCR_CLKXM_OUTPUT,               /* 关键CLKXM = 1   主从模式*/
   MCBSP_PCR_CLKRM_INPUT,                  /* 关键CLKRM= 0   主从模式*/
   MCBSP_PCR_SCLKME_NO,                  /* SCLKME   = 0   与CLKSM配合使用,cpu时钟模式*/
   0,                                    /* DXSTAT = N/A   DX引脚上的电平*/
MCBSP_PCR_FSXP_ACTIVELOW,            /* 重要FSXP   = 0   发送帧同步极性,0正极性,1负极性*/
   MCBSP_PCR_FSRP_ACTIVELOW,            /* 重要FSRP   = 0   接收帧同步极性,0正极性,1负极性*/
   MCBSP_PCR_CLKXP_RISING,               /* 重要CLKXP   = 0   发送时钟极性,0正极性,1负极性*/
   MCBSP_PCR_CLKRP_RISING//MCBSP_PCR_CLKRP_FALLING               /* 重要CLKRP   = 0   接收时钟极性,0正极性,CLKR引脚上的上升沿,产生CLKG的上升沿,1负极性*/
),
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配置为SPI
这是写寄存器语句
while(!MCBSP_xrdy(mhMcbsp));
        MCBSP_write16(mhMcbsp,0x0610); 现在问题是在示波器里面能观察到一帧16个脉冲上升沿的SCLK时钟,也进去的16bit数据也是跟上升沿脉冲先对应,但是AD9857却没有相应的效果出来
其次,我要读AD9857里的数据读出来一直是零,是不是我时序有问题?或者其他什么问题?求帮帮忙看看
这是AD9857的时序图,




zhangmangui 发表于 2015-1-12 22:31

首先用示波器看看CS和SCLK的波形   这两个应该问题不大
但是重要的就是SCLK的周期这个要看看手册里面最小周期是多少   频率不能高于它   不然没响应
接下来就是你送入的INSTRUCTION    不知是否合适   SDIO是双向口吧    既要输出还有读入

wushaojay 发表于 2015-1-12 23:38

zhangmangui 发表于 2015-1-12 22:31
首先用示波器看看CS和SCLK的波形   这两个应该问题不大
但是重要的就是SCLK的周期这个要看看手册里面最 ...

谢谢版主,MCBSP配置的是单段帧,一帧一个字,是16bit。前八个数据为指令周期,后八个为数据周期,但现在仔细看了,AD9857一个通信周期好像十七个上升沿,指令周期和数据周期直接有一个闲置时钟,这个我该如何配置呢?
还有我现在只会写数据,读寄存器我不会写,他的时序图是先写指令,再读数据,那么请问在一帧的周期里可以去读写同时吗?怎么操作?直接写?真心求教版主 大人帮忙分分析分析

wushaojay 发表于 2015-1-12 23:44

zhangmangui 发表于 2015-1-12 22:31
首先用示波器看看CS和SCLK的波形   这两个应该问题不大
但是重要的就是SCLK的周期这个要看看手册里面最 ...

SCLK最小时钟周期100ns,这点我是配置了的。
是不是我串行通信频率工作低一点好?比如我设置到5MHZ,时钟周期200ns

zhangmangui 发表于 2015-1-13 22:25

wushaojay 发表于 2015-1-12 23:44 static/image/common/back.gif
SCLK最小时钟周期100ns,这点我是配置了的。
是不是我串行通信频率工作低一点好?比如我设置到5MHZ,时钟 ...

不要超过手册的值就好   如果对读写速度没有很高要求的话   
低了可能稳定些

zhangmangui 发表于 2015-1-13 22:29

wushaojay 发表于 2015-1-12 23:38 static/image/common/back.gif
谢谢版主,MCBSP配置的是单段帧,一帧一个字,是16bit。前八个数据为指令周期,后八个为数据周期,但现在 ...

我觉得怎么有些困难啊    你说的空闲时钟我觉得不影响吧   
连续送只用上升沿个数够了就行
我想知道SDIO怎么实现

wushaojay 发表于 2015-1-13 22:38

zhangmangui 发表于 2015-1-13 22:29
我觉得怎么有些困难啊    你说的空闲时钟我觉得不影响吧   
连续送只用上升沿个数够了就行
我想知道 ...

SDIO接到是DX0引脚,SDO接的是DR0引脚。然后FSR0和FSX0引脚接一起,然后接SYNCIO,CLKX0和CLKR0接一起然后接SCLK。我今天发先。我不把FSX0和FSR0接一起,他们都是有帧信号输出,而且两个帧脉冲有延迟。说明下,AD9857的CS引脚是一直拉低的。SYNCIO是串行通信周期同步引脚。

wushaojay 发表于 2015-1-13 22:40

zhangmangui 发表于 2015-1-13 22:29
我觉得怎么有些困难啊    你说的空闲时钟我觉得不影响吧   
连续送只用上升沿个数够了就行
我想知道 ...

上面的时序图不全,方便的话可以看下芯片手册

zhangmangui 发表于 2015-1-13 22:58

wushaojay 发表于 2015-1-13 22:40 static/image/common/back.gif
上面的时序图不全,方便的话可以看下芯片手册

http://www.deyisupport.com/question_answer/dsp_arm/c5000/f/48/t/46860.aspx?pi239031347=1

wushaojay 发表于 2015-1-14 15:58

zhangmangui 发表于 2015-1-13 22:58 static/image/common/back.gif
http://www.deyisupport.com/question_answer/dsp_arm/c5000/f/48/t/46860.aspx?pi239031347=1
现在可以读出数据了,但是新的问题来了,   while(!MCBSP_xrdy(mhMcbsp));
      MCBSP_write16(mhMcbsp,0x00a4);
                  while(!MCBSP_xrdy(mhMcbsp));
      MCBSP_write16(mhMcbsp,0x0144);
                        while(!MCBSP_xrdy(mhMcbsp));
      MCBSP_write16(mhMcbsp,0x0540);
while(1)
{

               while(!MCBSP_xrdy(mhMcbsp));
                MCBSP_write16(mhMcbsp,0x85a2);
                while(!MCBSP_rrdy(mhMcbsp));

                a=MCBSP_read16(mhMcbsp); //读寄存器中的值
                  printf("a=0x%x\n",a);
               while(!MCBSP_xrdy(mhMcbsp));
                MCBSP_write16(mhMcbsp,0x80a2);
                while(!MCBSP_rrdy(mhMcbsp));
                b=MCBSP_read16(mhMcbsp); //读寄存器中的值
                  printf("b=0x%x\n",b);

} 这是我的程序,我读之前需要先配置寄存器,所以之前因为没有配置,而读不成功的。但现在虽然可以读,但如果只读一次的话还是0,循环读,才能有输出读出来
这是CCS中的输出,前几个读出来都是零,只有后面才是正确的,这是什么元婴呢


麻烦网站 发表于 2017-8-4 22:52

zhangmangui 发表于 2015-1-13 22:58
http://www.deyisupport.com/question_answer/dsp_arm/c5000/f/48/t/46860.aspx?pi239031347=1

大哥,我想问一下,我现在使用两个McBSP,但是经过测定,示波器显示的只有一个有时钟信号输出,另一个没有,如何才能使他俩都同时工作?

zhangmangui 发表于 2017-8-7 20:47

麻烦网站 发表于 2017-8-4 22:52
大哥,我想问一下,我现在使用两个McBSP,但是经过测定,示波器显示的只有一个有时钟信号输出,另一个没 ...

这两个应该是独立的。你再检查一下配置

麻烦网站 发表于 2017-8-15 20:10

zhangmangui 发表于 2017-8-7 20:47
这两个应该是独立的。你再检查一下配置

我把两个McBSP配置的一样,我只用到发送数据,查了很多资料,说他们不能同时工作,然后我就使用中断,避开这个问题,但是加上中断后,依然只有一个正常工作。这里的正常工作,是用示波器测试引脚输出波形,只有一个输出的波形正确,而另一个只有一个电压信号

麻烦网站 发表于 2017-8-16 10:39

zhangmangui 发表于 2017-8-7 20:47
这两个应该是独立的。你再检查一下配置

如果两个MCBSP同时配置成SPI,在配置寄存器时,有没有需要哪些注意事项??
页: [1]
查看完整版本: DSP5509用SPI配置AD9857求救,求分析问题