5899|8

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430F149与实时时钟(RTC)芯片DS1390的spi通信 读取和接收数据不对 [复制链接]

程序如下:
#include "SPI.h"
#include "io430.h"
unsigned char rmsec=0, rmin=1,rsec=2,rhr=3, rdow=4, rdate=5,rmon=6,ryr=7;
/*
  函数名:SPI1_Init
  功能:
    MSP430的SPI1模块初始化
  变量:
    无
  返回值:
    无
*/
void SPI1_Init(void)
{
  P5SEL |= 0x0E;                            // P5.1,2,3 设置为SPI引脚                           
  P5DIR |= (0x02 + 0x08+0x10+0x20+0x40+0x80); //P5.1 = SIMO1 和 P5.3 = UCLK1 为输出
   P5OUT |= 0x02;                             //P5.1 = SIMO1 默认输出为高;
  P5DIR &= ~0x04;                           //P5.2 = SOMI1 为输入
  P5OUT_bit.P4=1;                           //p5.4,p5.5默认输出为高
  P5OUT_bit.P5=1;
  P5OUT_bit.P6=1;                           //p5.6,p5.7默认输出为高
  P5OUT_bit.P7=1;
  P6DIR &= ~0x01;
  U1CTL|=SWRST;
  U1CTL |= CHAR + SYNC + MM;                            // 8位 主机
  U1TCTL |= CKPH+CKPL + SSEL1+SSEL0 + STC;              // CKPH = 1, CKPl = 1, SMCLK, 3线SPI
  U1BR0 = 0x08;                                                            // SPICLK = SMCLK/8
  U1BR1 = 0x06;                             
  U1MCTL = 0x00;                            //SPI模式下该寄存器必须赋值为0
  ME2 |= USPIE1;                           // 模块使能
  U1CTL &= ~SWRST;                          // SPI 使能


/片选DS1390,禁止25LC256。。。。。。。。。。。。。。。。。。。。。。。。。。。
void CSDS1390_Enable(void)                     
{  P5OUT_bit.P4=1;
   P5OUT_bit.P5=0;
   delay_spi(600);
}

// 延时程序操作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
void delay_spi(unsigned int time)
{
  unsigned int i;
  i=time;
  while (i--);
}


// 读数据操作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
unsigned char Read_DATA(void)  
{  while((IFG2&URXIFG1)==0) ;
       return(U1RXBUF);   
   
  }

// 发送数据操作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
void SendDATA(unsigned char pWDAT)
{
   while((IFG2&UTXIFG1)==0) ;
      U1TXBUF=pWDAT;
     
}

//DS1390设置校准时间函数.........................................................

void SetTime(void)                                       
{
unsigned char msec=0x01, min=0x26,sec=0x00,hr=0x17, dow=0x04, date=0x26,mon=0x12,yr=0x04;

CSDS1390_Enable( );
SendDATA(0x8e);                                              //写入读地址
SendDATA(0x5f);
SendDATA(0x00);
while((IFG2&UTXIFG1)==0);
P5OUT_bit.P5=1;

CSDS1390_Enable( );  
SendDATA(0x80);                                        //写地址
SendDATA(msec);                                       //写入十分一、百分之一秒,0
SendDATA(sec);                                      //写入秒 0秒
SendDATA(min);                                      //写入分钟 26分
SendDATA(hr);                                       //写入小时
SendDATA(dow);                                      //写入 一周的第几日 :
SendDATA(date);                                    //写入 一个月的第几日  及26日
SendDATA(mon);                                     //写入月份  
SendDATA(yr);                                      //写入年份  
while((IFG2&UTXIFG1)==0);
P5OUT_bit.P5=1;
  
}
//DS1390读取时间函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。
void DS1390Communication(void)                           
{// unsigned char rmsec=0, rmin=0,rsec=0,rhr=0, rdow=0, rdate=0,rmon=0,ryr=0;
   
CSDS1390_Enable( );
SendDATA(0x00);                                         //发送读地址
delay_spi(600);
   SendDATA(1);
rmsec = Read_DATA();                                     //读取时间
   SendDATA(1);
rsec = Read_DATA();
   SendDATA(1);
rmin = Read_DATA();
  SendDATA(1);
rhr = Read_DATA();
   SendDATA(1);
rdow = Read_DATA();
   SendDATA(1);
rdate = Read_DATA();
   SendDATA(1);
rmon = Read_DATA();  
   SendDATA(1);
ryr = Read_DATA();
while((IFG2&URXIFG1)==0);
//delay_spi(600);
P5OUT_bit.P5=1;
  
}

// 时钟模块初始化配置
#include "HardWare.h"
/*******************************************************************************
* 系统时钟的初始化
*******************************************************************************/
void InitClock(void)
{
    unsigned int i;
    BCSCTL1 &= ~(XT2OFF + XTS); //启动XT2晶振,LFXT1选择低频模式
    BCSCTL1 |= DIVA_0;          //ACLK 不分频   
    do                          //等待时钟源转换完成
    {
      IFG1 &= ~OFIFG;           //清OSCFault标志
      for(i=100;i>0;i--);
    }while((IFG1 & OFIFG)!=0);  //查OSCFault,为0时转换完成
    //BCSCTL2 |= SELM_2 + SELS + DIVS_3;    //MCLK为XT2不分频; SMCLK为XT2,8分频
    BCSCTL2 |= SELM_2 + SELS;        ////MCLK为XT2不分频; SMCLK为XT2,不分频,8MHz
}
/*******************************************************************************
* GPIO的初始化
*******************************************************************************/
void InitGPIO(void)
{
    //1-wire器件对应的IO
    P2SEL = 0X00;  //P2口全部设为普通IO
    P2DIR = 0XFF;  //P2为输出
    P2OUT = 0XFF;  //P2输出为1
   
    P4SEL &= ~0X20;  //报警口设置
    P4DIR |= 0X20;
    P4OUT_bit.P5 = 1;
   
    P1SEL_bit.P1 = 0;  //作为普通IO口
    P1DIR_bit.P1 = 0;  //input
    //P1OUT_bit.P1 = 1;
}



main函数

#include "HardWare.h"
#include "io430.h"
#include "SPI.h"
void main( void )
{
   
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
    InitClock();
    InitGPIO();
     SPI1_Init();
    __enable_interrupt();
   SetTime()  ;
   delay_spi(600);
DS1390Communication() ;
}


原理连接图在下方












QQ图片20150623111404.png (81.4 KB, 下载次数: 2)

QQ图片20150623111404.png

QQ图片20150623111441.png (39.96 KB, 下载次数: 2)

QQ图片20150623111441.png

最新回复

他应该是在iar下看寄存器的值得吧  详情 回复 发表于 2015-6-23 21:38
 
点赞 关注

回复
举报

4

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
小弟刚入门 求大神和有经验的人指点指点
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

板凳
 
呵呵,我也是初学。请问下你是怎么判断读取和接收数据不对的呀?
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 
huaiqiao 发表于 2015-6-23 12:59
呵呵,我也是初学。请问下你是怎么判断读取和接收数据不对的呀?

发送和接收的数据不一致

点评

我的意思是你的这个判断发送和接受的数据不一致是靠显示数据来判断还是怎么样的方式呢  详情 回复 发表于 2015-6-23 16:03
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

5
 
一颗狗尾巴草 发表于 2015-6-23 14:38
发送和接收的数据不一致

我的意思是你的这个判断发送和接受的数据不一致是靠显示数据来判断还是怎么样的方式呢

点评

我也没看出来他咋判断的  详情 回复 发表于 2015-6-23 21:25
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
huaiqiao 发表于 2015-6-23 16:03
我的意思是你的这个判断发送和接受的数据不一致是靠显示数据来判断还是怎么样的方式呢

在线调试寄存器接受的值不对 全是0

点评

哦哦,你的意思是读取和接收的数据都是0 ?硬件电路有问题吗?  详情 回复 发表于 2015-6-23 16:38
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

7
 
一颗狗尾巴草 发表于 2015-6-23 16:21
在线调试寄存器接受的值不对 全是0

哦哦,你的意思是读取和接收的数据都是0 ?硬件电路有问题吗?
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

8
 


我也没看出来他咋判断的

点评

他应该是在iar下看寄存器的值得吧  详情 回复 发表于 2015-6-23 21:38
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

9
 
数码小叶 发表于 2015-6-23 21:25
我也没看出来他咋判断的

他应该是在iar下看寄存器的值得吧
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表