搜索
bottom↓
回复: 2

发一个自己写的msp430硬件spi驱动rf4432,有不对的请指教啊

[复制链接]

出0入0汤圆

发表于 2011-8-21 17:46:39 | 显示全部楼层 |阅读模式
发一个自己写的msp430硬件spi驱动rf4432,有不对的请指教啊,刚接触430单片机
//spi.c文件
#include <msp430x14x.h>
#include "spi.h"
void SPISetup(void)
{
     U0CTL = CHAR + SYNC + MM + SWRST;         // 8-bit, SPI, Master
     U0TCTL = CKPL + SSEL1 + STC;              // Polarity, SMCLK, 3-wire
     //U0BR0 = 0x04;                           // /4
    //U0BR0 = 0x02;                           // /2
    U0BR0 = 0x01;                           // /1 ,1分频
    U0BR1 = 0;                              //
    P3SEL |= BIT1 | BIT2 | BIT3;
                                            // SPI option select
    P3DIR |= BIT1 | BIT3| BIT5;
                                            // SPI TXD out direction
    U0MCTL = 0x000;
    ME1 = USPIE0;                             // Module enable
    U0CTL &= ~SWRST;                          // SPI enable                 // **Initialize USCI state machine**
    IE1 |= URXIE0 + UTXIE0;                       // RX and TX interrupt enable
     _EINT();                                  // Enable interrupts
}


void SpiWriteRegister(char addr, char value)
{
      SPI_SEL_0 ;    // /CS enable
    IFG1 &= ~URXIFG0;                     // Clear flag
    U0TXBUF = addr;                       // Send address
    while (!(IFG1&URXIFG0));              // Wait for TX to finish
    IFG1 &= ~URXIFG0;                     // Clear flag
    U0TXBUF = value;                      // Send data
    while (!(IFG1&URXIFG0));              // Wait for TX to finish
     SPI_SEL_1;
}

char SpiReadRegister(char addr)
{
     char x;
    SPI_SEL_0 ;        // /CS enable
  while (!(IFG1&UTXIFG0));                // Wait for TX to finish
   U0TXBUF = addr;
  while (!(IFG1&UTXIFG0));                // Wait for TX to finish
  U0TXBUF = 0xff;                            // Dummy write so we can read data
  // Address is now being TX'ed, with dummy byte waiting in TXBUF...
  while (!(IFG1&UTXIFG0));                // Wait for TX to finish
  // Dummy byte RX'ed during addr TX now in RXBUF
  IFG1 &= ~UTXIFG0;                       // Clear flag set during addr write
   SPI_SEL_1;          // /CS disable
  x = U0RXBUF;                            // Read data

  return x;
}
//spi.h
#ifndef SPI_H
#define SPI_H
#include  <msp430x14x.h>
//#define U8 unsigned char
//                           P3.1|-> Data Out (SIMO0)
//             |                 |
//           <-|P3.4         P3.2|<- Data In (SOMI0)
//             |                 |
//      nsel <-|P3.5         P3.3|-> Serial Clock Out (UCLK)
#define SPI_SEL_1  P3OUT |=BIT5  //p3_5口为SPI片选
#define SPI_SEL_0  P3OUT &=~BIT5
#define RF_SDN_1      P2OUT |=BIT0   //p2_0口为输出模式,做为RF_SDN的控制
#define RF_SDN_0      P2OUT &=~BIT0
#define RF4432_SDO    (P2IN &BIT2) //p2_2口为SPI数据输出
#define RF4432_IRQ    (P2IN &BIT5)  //p2_5口为SI4432工作状态指示端口
void SPISetup(void);
void SpiWriteRegister (char reg, char value);
char SpiReadRegister (char reg);
#endif

(原文件名:360截图20110821174537953.jpg)

出0入0汤圆

 楼主| 发表于 2011-8-22 08:21:53 | 显示全部楼层
SpiReadRegister (char reg); ,这个函数写的有问题..,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 02:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表