搜索
bottom↓
回复: 12

求msp430g2553的SPI和I2C的硬件模块代码

[复制链接]

出0入0汤圆

发表于 2012-7-13 23:35:22 | 显示全部楼层 |阅读模式
各位大哥大姐如果有的话请发我下  现在很需要这些

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-7-13 23:41:03 | 显示全部楼层
谢谢各位大哥大姐了

出0入0汤圆

 楼主| 发表于 2012-7-14 12:40:05 | 显示全部楼层
哥哥姐姐们  请帮帮忙啦

出0入0汤圆

发表于 2012-7-29 17:23:06 | 显示全部楼层
帮顶!我也需要啊!

出0入0汤圆

发表于 2012-7-29 23:58:57 | 显示全部楼层
我顶  我也不会呀

出0入0汤圆

发表于 2012-8-1 08:47:55 | 显示全部楼层
貌似这些资料很少

出0入0汤圆

发表于 2012-8-1 20:12:38 | 显示全部楼层
IIC例程里有吧

出0入0汤圆

发表于 2012-8-2 16:00:12 | 显示全部楼层
正在学当中...看User's  guide会疯掉的

出0入0汤圆

发表于 2012-8-4 01:14:41 | 显示全部楼层
新手帮顶!同求啊!呵呵

出0入0汤圆

发表于 2013-11-1 23:02:29 | 显示全部楼层
#include "msp430g2553.h"
#include  "math.h"    //Keil library
#include  "stdio.h"
#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延时x微秒
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //延时x毫秒
#define uint unsigned int
#define uchar unsigned char
uchar TXByteCtr,RXByteCtr;
uchar TxData[2];
uchar RxBuf[6]={0x00};

void Init_I2C(void)
{
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
  UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
  UCB0BR0 = 11;                             // fSCL = SMCLK/12 = ~100kHz
  UCB0BR1 = 0;
  P1SEL |= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
  P1SEL2|= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
  UCB0I2CSA = SlaveAddress;
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
}

void I2C_WriteMode(void)
{
UCB0CTL1 |= UCTR;
IFG2 &=~ UCB0TXIFG;
IE2 &=~ UCB0RXIE;
IE2 |= UCB0TXIE;
}
void I2C_ReadMode(void)
{
UCB0CTL1 &=~ UCTR;
IFG2 &=~ UCB0RXIFG;
IE2 &=~ UCB0TXIE;
IE2 |= UCB0RXIE;                                // 关闭发送中断,开启接收中断
}
/*----------------------------------------------------------------------------
功能:向I2C接口发送1个字节数据
输入:待发送字节个数 num,7-bit从机地址slave_addr
输出:
说明:在发送第1个字节过程中需要置位停止位,待发送数据放在TxData[0]
----------------------------------------------------------------------------*/
void I2C_Txbyte(uchar Reg_addr,uchar Reg_data)
{
  while(UCB0STAT & UCBBUSY);
  I2C_WriteMode();
  TxData[1]=Reg_addr;
  TxData[0]=Reg_data;
  TXByteCtr=2;                                     // Load TX byte counter
  UCB0CTL1 |= UCTXSTT;                 // I2C TX, start condition
  //while (UCB0CTL1 & UCTXSTT);
  __bis_SR_register(CPUOFF + GIE);                   // Enter LPM0 w/ interrupts
  while (UCB0CTL1 & UCTXSTP);
}

void I2C_Rxbyte(uchar Reg_addr)
{
while(UCB0STAT & UCBBUSY);
I2C_WriteMode();
TxData[0]=Reg_addr;
TXByteCtr=1;                                    // Load TX byte counter
UCB0CTL1 |= UCTXSTT;                 // I2C TX, start condition
__bis_SR_register(CPUOFF + GIE);                   // Enter LPM0 w/ interrupts
while (UCB0CTL1 & UCTXSTP);
I2C_ReadMode();
RXByteCtr=1;
UCB0CTL1 |= UCTXSTT;
__bis_SR_register(CPUOFF + GIE);
while (IFG2 & UCB0RXIFG);
while (UCB0CTL1 & UCTXSTP);
}



#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
  if ( IFG2 & UCB0TXIFG )
  {
   if (TXByteCtr)                            // Check TX byte counter
   {
    TXByteCtr--;
    UCB0TXBUF =TxData[TXByteCtr];                 // Load TX buffer                               // Decrement TX byte counter
   }
   else
   {
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
    IFG2&=~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
    //IE2 &=~UCB0TXIE;
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
   }
  }
  if ( IFG2 & UCB0RXIFG )
    {
     if (RXByteCtr)
     {
      RXByteCtr--;
      if(RXByteCtr==0)
      {
       UCB0CTL1 |= UCTXSTP+UCTXNACK;//必须在接受最后一个数据之前发送停止和NACK
      }
      RxBuf[RXByteCtr]=UCB0RXBUF;
      UCB0CTL1 &=~UCTXNACK;
     }
     else
     {
      //UCB0CTL1 |= UCTXSTP;
      IFG2&=~UCB0RXIFG;
       __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
     }
    }
}

出0入0汤圆

发表于 2013-12-3 17:22:13 | 显示全部楼层
去我的帖子里面下载官方的例程,可以按着官方例程的模板来配置寄存器,做相应的更改就可以用了

出0入0汤圆

发表于 2013-12-3 17:23:14 | 显示全部楼层
http://www.amobbs.com/thread-5561447-1-1.html

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-29 23:45

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

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