msp430F149与cc2500通讯启用USART1,SPI初始化

发布者:EtherealLove最新更新时间:2016-08-21 来源: eefocus关键字:msp430F149  cc2500  USART1  SPI初始化 手机看文章 扫描二维码
随时随地手机看文章
刚开始接触这个SPI,又是与cc2500,看着英文手册,弄了老半天,才把读写寄存器给弄清,分享一下:
 
//=========================================================
//本模块为spi通讯模块,程序启用USART1,针对与cc2500的相互通讯
//=========================================================
#include
#include"spi.h"
#include"cc2500_def.h"
 
#define SPI_SEL P5SEL
#define SPI_DIR P5DIR
#define SPI_IN P5IN
#define SPI_OUT P5OUT
#define CSn BIT0 
#define SIMO BIT1
#define SOMI BIT2
#define UCLK BIT3
 
void init_spi(void)//msp430 spi初始化 同步串行接口
{ SPI_DIR |= CSn;         //CS 禁止
  SPI_OUT |= CSn;
 
  U1CTL |= SWRST;             // 芯片复位
  U1CTL |= CHAR + SYNC + MM;   // 8-bit SPI 主机模式
  U1TCTL |= CKPH + SSEL1 + SSEL0 + STC;   // SMCLK,3线模式
  U1BR0 = 0x02;                // UCLK/2
  U1BR1 = 0x00;                // 0
  U1MCTL = 0x00; 
  ME2 |= USPIE1;               // 使能SPI #define USPIE1   (0x10)
  UCTL1 &= ~SWRST;             // 取消复位
  
  SPI_SEL |= SIMO + SOMI + UCLK;//引脚功能选择,第二功能
  SPI_DIR |= SIMO + UCLK;      // 端口方向设置
}
 
 
 
//写入寄存器,是8位address + 8位data, 8位地址为 0 B A5 A4 A3 A2 A1 A0
//其中,0表示write option  B表示burst写的时候,置1
//在突发方式写cc2500寄存器
//U1TXBUF = addr + CC2500_WRITE_BURST;  发送地址,起始地址加突发头#define CC2500_WRITE_BURST  0x40
 
//写cc2500寄存器
void spi_WriteReg(unsigned char addr,unsigned char value)
{
    SPI_OUT &= ~CSn;          // CS 使能
    while (SPI_IN & SOMI);    // 等待cc2500准备好 CHIP_RDYn,stays high until power and crystal have stabilized . 
                              //Shoule always be low when using the SPI interface. 
    IFG2 &= ~UTXIFG1;         // 清除标志,USART1发送中断标志位
    U1TXBUF = addr;           // 发送地址  UxTXBUF 发送数据寄存器
    while (!(IFG2 & UTXIFG1));// 等待发送完成
    IFG2 &= ~UTXIFG1;         // 清除标志
    U1TXBUF = value;          // 发送内容
    while (!(IFG2  &UTXIFG1));// 等待完成
    SPI_OUT |= CSn;           // CS 禁止
}
 
//突发方式写cc2500寄存器
void spi_WriteBurstReg(unsigned char addr,unsigned char *buffer,unsigned char count)
{
    unsigned char i;
 
    SPI_OUT &= ~CSn;          // CS 使能
    while (SPI_IN & SOMI);    // 等待cc2500准备好
    IFG2 &= ~UTXIFG1 ;
    U1TXBUF = addr + CC2500_WRITE_BURST; // 发送地址,起始地址加突发头#define CC2500_WRITE_BURST  0x40
    while (!(IFG2 & UTXIFG1));           // 等待发送完成
    for (i = 0; i < count; i++)
    {
      U1TXBUF = buffer[i];               // 发送内容
      while (!(IFG2 & UTXIFG1));         // 等待完成
      IFG2 &= ~UTXIFG1 ;
    } 
  // IFG2 &= ~URXIFG1;
  //while(!(IFG2 & UTXIFG1));
   SPI_OUT |= CSn;       // CS 禁止
}
 
 
 
 
//读寄存器,是8位address + 8位data, 8位地址为 1 B A5 A4 A3 A2 A1 A0
//其中,1表示read option  B表示burst读的时候,置1
//burst read cc2500寄存器
//  U1TXBUF = (addr | CC2500_READ_BURST);发送地址#define CC2500_READ_BURST   0xC0
 
//读cc2500寄存器
unsigned char spi_ReadReg(unsigned char addr)
{
  unsigned char x;
 
  SPI_OUT &= ~CSn;      // CS 使能
  while (SPI_IN & SOMI);// 等待cc2500准备好
  IFG2 &= ~UTXIFG1;            //清除标志
  U1TXBUF = (addr | CC2500_READ_SINGLE); // 发送地址 #define CC2500_READ_SINGLE  0x80
  while (!(IFG2 & UTXIFG1));   //等待发送地址完成
  IFG2 &= ~UTXIFG1;            //清除标志
  U1TXBUF = 0;                 //启动传输,以便读取
  while (!(IFG2&URXIFG1));     //等待接收完成
  x = U1RXBUF;                 //读取内容
  while(!(IFG2 & UTXIFG1));    //等待 U1TXBUF = 0发送完成
  SPI_OUT |= CSn;              //CS 禁止
 
  return x;
}
 
//突发方式读cc2500寄存器
void spi_ReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
  unsigned int i;
 
  SPI_OUT &= ~CSn;      // CS使能
  while (SPI_IN & SOMI);// 等待芯片准备好
  IFG2 &= ~UTXIFG1;            //清除标志
  U1TXBUF = (addr | CC2500_READ_BURST);  //发送地址#define CC2500_READ_BURST   0xC0
  while (!(IFG2 & UTXIFG1));             //等待完成
  for (i = 0; i < count; i++)
  {
    U1TXBUF = 0;     
    while (!(IFG2 & URXIFG1));             // 等待
    buffer[i] = U1RXBUF;                   // 接收
    while(!(IFG2 & UTXIFG1));    //等待 U1TXBUF = 0发送完成
    IFG2 &= ~UTXIFG1;            //清除标志
  }
  SPI_OUT |= CSn;         //CS 禁止
}
 
//读cc2500状态
unsigned char spi_ReadStatus(unsigned char addr)
{
  unsigned char x;
 
  SPI_OUT &= ~CSn;      // CS 使能
  while (SPI_IN & SOMI);// 等待cc2500准备好
  IFG2 &= ~UTXIFG1;                         // 清除标志
  U1TXBUF = (addr | CC2500_READ_SINGLE);     // 发送地址 #define CC2500_READ_BURST   0x80
  while (!(IFG2 & UTXIFG1));                // 等待发送完成
  IFG2 &= ~UTXIFG1;                         // 清除标志
  U1TXBUF = 0;                              // 启动传输
  while (!(IFG2&URXIFG1));                  // 等待接收完成
  x = U1RXBUF;                              // 读取数据
  while(!(IFG2 & UTXIFG1));    //等待 U1TXBUF = 0发送完成
  SPI_OUT |= CSn;         // CS 禁止
 
  return x;
}

关键字:msp430F149  cc2500  USART1  SPI初始化 引用地址:msp430F149与cc2500通讯启用USART1,SPI初始化

上一篇:MSP430F149 TimerA 输出pwm信号 C程序代码
下一篇:MSP430F149ADC12单通道单次转换

推荐阅读最新更新时间:2024-03-16 15:06

基于MSP430F149单片机的多路无线温度检测系统
温度在人类日常生活中扮演着极其重要的角色,同时在工农业生产过程中,温度检测具有十分重要的意义。现阶段温度检测主要是有线定点温度检测,其温度检测原理为单片机利用温度传感器检测温度,并在数码管或LCD 上进行温度显示。同时由于系统没有报警功能,故需要人为来判断是否需要进行升温或者降温,这使系统的检测丧失了实时性。另外,在某些环境恶劣的工业环境,以人工方式直接操作设置仪表测量温度也不现实,因此采用无线方式进行温度检测尤为必要。 目前有些设计能够实现无线温度采集,但功耗过高是其最大的缺点。在实际温度控制过程中既要求系统具有稳定性、实时性,又需要使系统功耗低及保证温度的均匀性,因此设计一种低功耗的多点无线温度检测系统很有意义。本文
[单片机]
基于<font color='red'>MSP430F149</font>单片机的多路无线温度检测系统
基于CC2500的无线楼字跟踪系统软硬件设计
1引 言   随着楼宇智能化程度的提高,人们已经不再满足于仅仅使用摄像设备对楼宇中的人员或物品进行跟踪监控。于是基于无线的定位技术在悄然间兴起。这种技术不但可以进行目标跟踪,实施监视目标的行动路线,还可以预测目标的前进轨迹,这些都是传统的摄像监控系统不能做到的。这种定位系统从底层硬件到上层软件涉及到非常多的技术,本文只针对无线定位部分的软硬件进行重点介绍。   无线跟踪系统的关键就是如何定位。目前比较成熟的无线定位技术当属GPS,然而这种技术无法在楼宇中使用,因此需要寻找一种新的定位方式来达到我们的目标。这里选择了基于接收信号强度(RSSI)的带信标定位技术。大多数射频芯片都可以得到RSSI,但综合整体性能,我们采用了Chip
[安防电子]
基于<font color='red'>CC2500</font>的无线楼字跟踪系统软硬件设计
MSP430F149定时数据采集程序
#include msp430x14x.h #define RS_H P5OUT |=BIT3 //Data Register is selected #define RS_L P5OUT &=~BIT3 //Instruction Register is selected #define READ P5OUT |= BIT2 //读LCD #define WRITE P5OUT &= ~BIT2 //写LCD #define EN_H P5OUT |= BIT1 //Enable Read/Write Operation #define EN_L P5OUT
[单片机]
MSP430和CC2500的USB无线数据采集系统
摘要:设计基于MSP430单片机和CC2500无线收发器的USB无线数据采集系统,通过USB调试端口在IDE或CCE开发环境下编写、下载和调试应用程序,其目标板可作为一个独立的具有或没有外部传感器的系统。介绍基于MSP430和CC2500无线开发工具的系统结构,控制模块的硬件结构,无线收发部分和数据采集传输电路的设计,以及软件开发、Simplici TI 协议的引用。 基于MSP430单片机和CC2500的无线数据采集系统是一个功能齐全的无线开发工具,该系统主要由MSP430F系列微控制器和CC2500(2.4 GHz)无线收发器组成。系统可在PC机上利用IAR嵌入式工作平台集成开发环境(IDE)或CCE开发环境编写、下载和调
[单片机]
MSP430和<font color='red'>CC2500</font>的USB无线数据采集系统
MSP430F149与1602LCD模块程序
/*****************MSP430F149与1602LCD模块程序***********************/ /* ShangYu */ /**************************Pins defination***************************/ /* RS P4.4 寄存器选择信号 H-数据寄存器 L-指令寄存器 */ /* RW P4.5 读写信号    H-读     L-写   */ /* E P4.6 片选信号    下降沿触发        */ /* DB0-DB
[单片机]
一种高性能便携型电子血压计的设计
  1引言   测量血压的传统仪器是机械式水银血压计.电 子血压计近几年才在市场上出现。电子血压计与传 统血压计相比,虽然操作简单、使用方便,但准确 性、稳定性往往不太理想。本设计力求准确、稳定, 以适用于老年人或病人随时监测自己血压情况及 临床医学检测。   在研究国内外已有产品或设计构思 的基础上” ,使用先进的信号处理技术与智能控 制技术,尽量消除脉搏提取处理中的噪声干扰与非 线性失真,提高血压测量的准确性与稳定性,并提 高了测量的自动化和智能化。   2系统的硬件设计   本设计采用Motorola公司的MPX53GC硅压式 传感器和TI公司MSP430F149单片机为主要器件, 构成电子血压计,系统构成如图1。系
[单片机]
一种高性能便携型电子血压计的设计
STM32的SPI1、SPI2、SPI3初始化及RF1101的应用(标准库与HAL库)
——基于STM32F103RCT6 ---- 标准库: 说明:相关文件共有两个:bsp_spi_cc1101.h;bsp_spi_cc1101.c;以SPI2为例。 1、“bsp_spi_cc1101.h”中的参数定义: #ifndef _BSP_SPI_1101_H_ #define _BSP_SPI_1101_H_ #include stdio.h #include stm32f10x.h #include misc.h #include os_cfg_app.h #include os.h #include core_cm3.h #include bsp.h #include stm32f10x_s
[单片机]
应用MSP430F149单片机的超低频波形发生器
    摘要: 介绍了应用MSP430F149芯片开发超低频波形发生器的设计原理及其在生理滤波器调试中的应用。     关键词: MSP430F149芯片 单片机 波形发生器 滤波系统 在载人运输系统振动分析仪中常用超低频波形发生器作为仿真的信号源。要求在0.1Hz~100Hz范围内稳定工作,波形失真小,且能以0.1Hz为步长细调。传统超低频波形发生器设计中存在着很多的不足:(1)应用通用电路,元器件多,尤其是电容的体积大,且波形的稳定性差、失真大,调节上极不方便;(2)应用专用电路,如ICL8038、MAX038,其失真和稳定性方面有明显提高,但在超低频应用上仍不合适。而且电路调节器件多,对电源的要求较高,代
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved