打印

用5509配置的SPI ,数据一直写不进,求有心人帮忙看看 分析

[复制链接]
1497|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wushaojay 于 2015-1-9 15:09 编辑
#include <stdio.h>
#include <csl.h>
#include <csl_pll.h>
#include <csl_gpio.h>
#include <csl_mcbsp.h>
//#include <csl_irq.h>

//---------Global constants---------
#define N       20

/*锁相环的设置*/
PLL_Config  myConfig      = {
  0,    //IAI: the PLL locks using the same process that was underway
                //before the idle mode was entered
  1,    //IOB: If the PLL indicates a break in the phase lock,
                //it switches to its bypass mode and restarts the PLL phase-locking
                //sequence
  10,    //PLL multiply value; multiply 24 times
  1             //Divide by 2 PLL divide value; it can be either PLL divide value
                //(when PLL is enabled), or Bypass-mode divide value
                //(PLL in bypass mode, if PLL multiply value is set to 1)
};

//---------Global data definition---------
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_8BIT                 /* 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_8BIT               /* 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(5)               /* 停止模式无效**重要CLKGDV  =9 CLKG时钟频率*/
),   
MCBSP_SRGR2_RMK(  
    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(10)                 /*重要 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引脚上的电平*/
   1,  //MCBSP_PCR_FSXP_ACTIVELOW,              /* 重要FSXP     = 0   发送帧同步极性,0正极性,1负极性*/
   1,//MCBSP_PCR_FSRP_ACTIVELOW,              /* 重要FSRP     = 0   接收帧同步极性,0正极性,1负极性*/
   MCBSP_PCR_CLKXP_RISING,                 /* 重要CLKXP   = 0   发送时钟极性,0正极性,1负极性*/
   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
};      
/* Define a MCBSP_Handle object to be used with MCBSP_open function */
MCBSP_Handle mhMcbsp;

/*********************************************************************
**        SPI定义与函数                                                      
**********************************************************************/


/*************长延时,待使用*********/
void Delay(unsigned int s)
{
        unsigned int i;
        for(i=0; i<s; i++);
        for(i=0; i<s; i++);
}


/******************************************************************************************
延时函数,依照时钟频率而定,待使用
*****************************************************************************************/
void inerDelay_us(unsigned char n)
{
        for(;n>0;n--)
                _nop();
}
/****************************************************************************************************
函数:uint SPI_RW(uint uchar)
功能:SPI写时序     已修改
****************************************************************************************************/
Uchar SPI_RW(MCBSP_Handle mh_Mcbsp,Uchar uchar_d)
{
        Uchar get_data;
        while(!MCBSP_xrdy(mh_Mcbsp));
        MCBSP_write16(mh_Mcbsp,uchar_d); //写寄存器地址
        while(!MCBSP_rrdy(mh_Mcbsp));
    get_data=MCBSP_read16(mh_Mcbsp); //读寄存器中的值
//        printf("%d\n",get_data);
    return(get_data);                             // return read uchar
}
/****************************************************************************************************
函数:uchar SPI_Read(uchar reg)                   已修改
功能:SPI读时序
****************************************************************************************************/
Uchar SPI_Read(MCBSP_Handle mh_Mcbsp,Uchar reg)
{
        Uchar reg_val;        
        SPI_RW(mh_Mcbsp,reg);            // 写寄存器地址.
        reg_val = SPI_RW(mh_Mcbsp,0);    // 读该寄存器中的数据        
        //        printf("%d\n",reg_val);
        return(reg_val);        // 返回寄存器的值
}
/****************************************************************************************************
功能:读写寄存器函数           已修改
****************************************************************************************************/
Uchar SPI_RW_Reg(MCBSP_Handle mh_Mcbsp,Uchar reg, Uchar value)
{
        Uchar status;
        status = SPI_RW(mh_Mcbsp,reg);      // 写寄存器地址
        _nop();        _nop();
        SPI_RW(mh_Mcbsp,value);             //写数据到该寄存器
        return(status);            // 返回写入的数据
}

/*********************************************************************
**        SPI定义与函数                                                      
**********************************************************************/


//---------main routine---------
void main(void)
{
          int a;
            /*初始化CSL库*/
    CSL_init();
         /*EMIF为全EMIF接口*/
    CHIP_RSET(XBSR,0x0a01);   
    /*设置系统的运行速度为144MHz*/
    PLL_config(&myConfig);

    mhMcbsp = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);
    MCBSP_config(mhMcbsp, &Configclockstop8);
    MCBSP_start(mhMcbsp,
                MCBSP_RCV_START|MCBSP_XMIT_START|MCBSP_SRGR_START|MCBSP_SRGR_FRAMESYNC,
                0x300u);
        Delay(100);
         while(1)
        {
         SPI_RW_Reg(mhMcbsp,0x80,1);
        a=SPI_Read(mhMcbsp,0x01);
        printf("%d",a);
        }
}

相关帖子

沙发
wushaojay|  楼主 | 2015-1-9 12:32 | 只看该作者
主要使用SPI配置AD9857寄存器

使用特权

评论回复
板凳
wushaojay|  楼主 | 2015-1-9 13:18 | 只看该作者
这是我在示波器上观察的 FSX引脚和 CLKX引脚
FSXP=1设置的是低电平有效 但不知为何观察的波形是这样的
另外CLKX不是连续发送的吗 我观察的波形都是一段一段的 每段8个上升沿

使用特权

评论回复
地板
wushaojay|  楼主 | 2015-1-9 14:46 | 只看该作者
  在帧引脚低电平有效的时候,正好是因为8个脉冲时钟上升沿,因为用得无压缩模式,所以采用的是8bit数据传输。


  但是在AD9857中 一个通信周期是分两段,先写寄存器地址再写数据,地址八位 数据八位,那么只好要16个时钟周期,而上面设置的SPI一帧(FSX为低电平时)只有8bit,所以我猜是不是这样导致我一直操作不成功。不知道该怎么设置了,感觉这块有点乱

使用特权

评论回复
5
wang168506| | 2015-1-9 14:57 | 只看该作者
你这是啥型号的DSP,我咋感觉挺别扭呢,SPI怎么跟多路缓冲扯到一块去了

使用特权

评论回复
6
wushaojay|  楼主 | 2015-1-9 15:09 | 只看该作者
wang168506 发表于 2015-1-9 14:57
你这是啥型号的DSP,我咋感觉挺别扭呢,SPI怎么跟多路缓冲扯到一块去了

ti5509

使用特权

评论回复
7
wushaojay|  楼主 | 2015-1-9 15:14 | 只看该作者
这是我写的专门写0和写1的程序,测试各个引脚的图,这是程序

这是FSX引脚
这是DX
最后两个是CLKX



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

69

帖子

2

粉丝