打印
[ZLG-ARM]

LPC2103与AD7684的连接接口问题,请教周工

[复制链接]
2501|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
海辰|  楼主 | 2009-9-7 21:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在做一个模数转换实验,用到了AD7684芯片,碰巧它的三个接口与SPI0接口是兼容的。我将AD7684的CLK接P0.4-SCK0, DOUT接P0.5-MISO0, CS接P0.7-SSEL0,P0.6-MOSI0就悬空着.设计了以下程序,可是总是没有结果,串口接收不到数据,请问有哪位知道是什么错误。谢谢!
# include "config.h"
# include "UART.h"
# include "stdio.h"
# define SLAVE_CS  1 << 7           /*  P0.7口作为AD7684从机的片选   */
uint16 const data = 0x99;
uint16  uiVal;                  
void DelayNS (uint32  uiDly)
{
    uint32  i;
   
    for(; uiDly > 0; uiDly--)
    {
        for(i = 0; i < 50000; i++);
    }
}
/*********************************************************************************************************
** Function name:  MSPIInit
** Descriptions:  初始化SPI接口,设置为主机
*
*********************************************************************************************************/
void MSPIInit(void)
{
PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00001500;                     /*  设置SPI引脚连接    */
SPI_SPCCR   = 0x52;         /*  设置SPI时钟分频   SPI_SPCCR时钟计数寄存器*/
SPI_SPCR    = 1 << 2 |                                              /*  每次传输和接受16位数据      */
               0 << 3 |      /*  CPHA = 0第一个时钟采样  SPI_SPCR控制寄存器*/
               1 << 4 |       /*  CPOL = 1,SCK低有效    */
               1 << 5 |      /*  MSTR = 1,设置为主模式   */
               0 << 6 |      /*  LSBF = 0,SPI传输MSB在先  */
               0 << 7 |      /*  SPIE = 0,SPI中断禁止   */
               0x0<< 8;                                             /*  每次传输16位*/
}
/*********************************************************************************************************
** Function name:  SSPIInit
** Descriptions:  初始化SPI接口,设置为从机
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void SSPIInit(void)
{
PINSEL1 = (PINSEL1 & 0xFFFFF00F) | 0x00000540;                      /*  设置SSP引脚连接    */

SSPCR0  =   0x07 << 0 |            /*  DSS 数据长度为8位    */
             0x00 << 4 |            /*  FRF 格式:SPI    */
             0x01 << 6 |            /*  CPOL = 1,SCK低电平有效   每帧传输之间保持低电平*/
             0x00 << 7 |            /*  CPHA = 0, 第一个时钟SCK下降沿采样*/
             0x05 << 8 ;            /*  SCR 设置SPI时钟分频   */  
    SSPCR1   =      0 << 0 |            /*  LBM 回写模式 :正常工作  */
             1 << 1 |            /*  SSE SSP使能:SSP控制器可以与其它总线上的器件相互通信*/
             1 << 2 |            /*  MSTR = 1,设置为从机   */
             0 << 3 ;            /*  SOD  = 0, 从机输出允许  */
               
SSPCPSR   = 0x52;             /*  设置SSP时钟分频     */
SSPIMSC   = 0x02;             /*  使能接收超时中断,软件置位 SSPIMSC中断使能寄存器*/
SSPICR    = 0x03;             /*  写1清除中断标志 SSPICR中断清楚寄存器*/
}
/*********************************************************************************************************
** Function name:  MSPISendData
** Descriptions:  SPI主模式发送数据
** input parameters:    uiData: 将要发送的数据
** output parameters:   无
** Returned value:      S0SPDR: 返回值为读取的数据
*********************************************************************************************************/
uint16 MSPISendData(uint16 uiData)
{
IO0CLR    = SLAVE_CS;            /*  片选AD,P0.7输出低电平 */
SPI_SPDR = uiData;                                                  /*  数据寄存器SPI_SPDR存值   */
while ((SPI_SPSR & 0x80) == 0);          /*  SPI_SPSR寄存器,1传输完成   等待数据发送完毕*/
IO0SET    = SLAVE_CS;                                                /*  P0.7输出高电平 */

return(SPI_SPDR);
}
/*********************************************************************************************************
** Function name:  SPI_RcvByte
** Descriptions:  从SPI总线接收1字节数据
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
uint16 MSPIRcvByte (void)
{
while ((SPI_SPSR & 0x80) == 0);                                     /*  等待数据接收完成           */

return (SPI_SPDR);
}
/*********************************************************************************************************
** Function name:  SSPSendByte
** Descriptions:  SSP接口向总线发送1字节数据
** input parameters:    uiDat  待发送的数据
** output parameters:   无
** Returned value:      接收到的数据
*********************************************************************************************************/
uint8 SSPSendByte(uint8 uiDat)
{
IOCLR    = SLAVE_CS;                                                /* P0.13输出低电平 */
SSPDR = uiDat;
while((SSPSR & 0x01) == 0);                                         /* 等待TFE置位,即发送FIFO空    */
IOSET    = SLAVE_CS;                                                /* P0.13输出高电平 */

return(SSPDR);
}
/*********************************************************************************************************
** Function name:  SSPRcvByte
** Descriptions:  SSP接口从总线接收1字节数据
** input parameters:    无
** output parameters:   无
** Returned value:      接收到的数据
*********************************************************************************************************/
uint8 SSPRcvByte(void)
{
while((SSPSR & 0x04) == 0);                                         /* 等待RFF置位,即接收FIFO不为空*/

return(SSPDR);
}
/*********************************************************************************************************
** Function name:  main
** Descriptions:  SPI做主机、SSP做从机进行数据通信,并将SPI发送的数据通过串口发送到PC机显示
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/           
int main(void)
{
char   cStr[20];
PINSEL0 = PINSEL0 & (~(0x03 << 14));        /*  设置GPIO引脚连接 P0.7  */
//PINSEL0 = PINSEL0 & (~(0x02A << 8));        /*  P0.4-CLK,P0.5-MISO,P0.6-MOSI*/
IO0DIR  = SLAVE_CS;             /*  设置AD片选为输出 P0.7输出低电平,选中ADS7684*/
  
MSPIInit();           /*  初始化SPI接口     */
UARTInit();            
while(1)  
{
   IO0CLR  = SLAVE_CS;
   DelayNS(10);
                                       
   SPI_SPDR = data;                                                      /*  主模式SPI发送数据,启动SDK */
      while((SPI_SPSR & 0x80)==0);                                            /*  等待数据发送结束            */
   
   
   uiVal = SPI_SPDR;   
   IO0SET = SLAVE_CS;                                                 /* P0.7输出高电平 */
  
   sprintf(cStr,"hello %4d\n",uiVal);   //将数据以字符形式存储
   ISendStr(0,0,0x30,cStr);         //通过向PC机发送数据
   
}                                             

return 0;
}

相关帖子

沙发
海辰|  楼主 | 2009-9-8 14:14 | 只看该作者
有没有大侠知道啊!是不是AD7684的连接电路有什么讲究的啊?

使用特权

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

本版积分规则

14

主题

32

帖子

0

粉丝