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的时序图,
首先用示波器看看CS和SCLK的波形 这两个应该问题不大
但是重要的就是SCLK的周期这个要看看手册里面最小周期是多少 频率不能高于它 不然没响应
接下来就是你送入的INSTRUCTION 不知是否合适 SDIO是双向口吧 既要输出还有读入
zhangmangui 发表于 2015-1-12 22:31
首先用示波器看看CS和SCLK的波形 这两个应该问题不大
但是重要的就是SCLK的周期这个要看看手册里面最 ...
谢谢版主,MCBSP配置的是单段帧,一帧一个字,是16bit。前八个数据为指令周期,后八个为数据周期,但现在仔细看了,AD9857一个通信周期好像十七个上升沿,指令周期和数据周期直接有一个闲置时钟,这个我该如何配置呢?
还有我现在只会写数据,读寄存器我不会写,他的时序图是先写指令,再读数据,那么请问在一帧的周期里可以去读写同时吗?怎么操作?直接写?真心求教版主 大人帮忙分分析分析 zhangmangui 发表于 2015-1-12 22:31
首先用示波器看看CS和SCLK的波形 这两个应该问题不大
但是重要的就是SCLK的周期这个要看看手册里面最 ...
SCLK最小时钟周期100ns,这点我是配置了的。
是不是我串行通信频率工作低一点好?比如我设置到5MHZ,时钟周期200ns wushaojay 发表于 2015-1-12 23:44 static/image/common/back.gif
SCLK最小时钟周期100ns,这点我是配置了的。
是不是我串行通信频率工作低一点好?比如我设置到5MHZ,时钟 ...
不要超过手册的值就好 如果对读写速度没有很高要求的话
低了可能稳定些 wushaojay 发表于 2015-1-12 23:38 static/image/common/back.gif
谢谢版主,MCBSP配置的是单段帧,一帧一个字,是16bit。前八个数据为指令周期,后八个为数据周期,但现在 ...
我觉得怎么有些困难啊 你说的空闲时钟我觉得不影响吧
连续送只用上升沿个数够了就行
我想知道SDIO怎么实现 zhangmangui 发表于 2015-1-13 22:29
我觉得怎么有些困难啊 你说的空闲时钟我觉得不影响吧
连续送只用上升沿个数够了就行
我想知道 ...
SDIO接到是DX0引脚,SDO接的是DR0引脚。然后FSR0和FSX0引脚接一起,然后接SYNCIO,CLKX0和CLKR0接一起然后接SCLK。我今天发先。我不把FSX0和FSR0接一起,他们都是有帧信号输出,而且两个帧脉冲有延迟。说明下,AD9857的CS引脚是一直拉低的。SYNCIO是串行通信周期同步引脚。 zhangmangui 发表于 2015-1-13 22:29
我觉得怎么有些困难啊 你说的空闲时钟我觉得不影响吧
连续送只用上升沿个数够了就行
我想知道 ...
上面的时序图不全,方便的话可以看下芯片手册 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 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中的输出,前几个读出来都是零,只有后面才是正确的,这是什么元婴呢
zhangmangui 发表于 2015-1-13 22:58
http://www.deyisupport.com/question_answer/dsp_arm/c5000/f/48/t/46860.aspx?pi239031347=1
大哥,我想问一下,我现在使用两个McBSP,但是经过测定,示波器显示的只有一个有时钟信号输出,另一个没有,如何才能使他俩都同时工作? 麻烦网站 发表于 2017-8-4 22:52
大哥,我想问一下,我现在使用两个McBSP,但是经过测定,示波器显示的只有一个有时钟信号输出,另一个没 ...
这两个应该是独立的。你再检查一下配置 zhangmangui 发表于 2017-8-7 20:47
这两个应该是独立的。你再检查一下配置
我把两个McBSP配置的一样,我只用到发送数据,查了很多资料,说他们不能同时工作,然后我就使用中断,避开这个问题,但是加上中断后,依然只有一个正常工作。这里的正常工作,是用示波器测试引脚输出波形,只有一个输出的波形正确,而另一个只有一个电压信号 zhangmangui 发表于 2017-8-7 20:47
这两个应该是独立的。你再检查一下配置
如果两个MCBSP同时配置成SPI,在配置寄存器时,有没有需要哪些注意事项??
页:
[1]