搜索
bottom↓
回复: 11

求一个MSP430F249的硬模块I2C程序

[复制链接]

出0入0汤圆

发表于 2011-9-1 11:58:24 | 显示全部楼层 |阅读模式
求一个MSP430F249的硬模块I2C程序,申明模拟的已经有了,现在想要一个249自带的I2C程序,怎么249的资料里都没有写明这些I2C的寄存器如何设置,如何使用

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

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

出0入0汤圆

 楼主| 发表于 2011-9-1 12:02:10 | 显示全部楼层
回复【楼主位】tianyaxtujxlg
-----------------------------------------------------------------------

发现249的资料资料很少具体涉及哪些寄存器的设置方法???

出0入0汤圆

发表于 2011-9-1 12:14:20 | 显示全部楼层
官方网站没有示例程序么?你去找找吧

出0入0汤圆

 楼主| 发表于 2011-9-1 15:07:15 | 显示全部楼层
回复【2楼】lcofjp C语言砖家
-----------------------------------------------------------------------

硬件I2C的还真是没找到,真奇怪,怎么会没有这个的程序,明明249是有这个功能的,竟然没人写这个功能的程序,连官网都没有

出0入0汤圆

发表于 2011-9-1 16:22:17 | 显示全部楼层
http://www.ti.com/product/msp430f249?qgpn=msp430f249
MSP430F23x, MSP430F24x(1), MSP430F2410 Code Examples (Rev. E)  (ZIP 431 KB )   1,611 views
官网是有的,是你没注意好好看吧。
msp430x24x_uscib0_i2c_01.c等等
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1OUT  = 0;
  P1DIR |= 0x01;                            // P1.0 output
  P3SEL |= 0x06;                            // Assign I2C pins to USCI_B0
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
  UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
  UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
  UCB0BR1 = 0;
  UCB0I2CSA = 0x4E;                         // Set slave address
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
  IE2 |= UCB0RXIE;                          // Enable RX interrupt
  TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode

  while (1)
  {
    RxByteCtr = 2;                          // Load RX byte counter
    UCB0CTL1 |= UCTXSTT;                    // I2C start condition
    __bis_SR_register(CPUOFF + GIE);        // Enter LPM0, enable interrupts
                                            // Remain in LPM0 until all data
                                            // is RX'd

    if (RxWord < 0x1d00)                    // >28C?
      P1OUT &= ~0x01;                       // No, P1.0 = 0
    else
      P1OUT |= 0x01;                        // Yes, P1.0 = 1

    __disable_interrupt();
    TACCTL0 |= CCIE;                        // TACCR0 interrupt enabled
    __bis_SR_register(CPUOFF + GIE);        // Enter LPM0, enable interrupts
                                            // Remain in LPM0 until TACCR0
                                            // interrupt occurs
    TACCTL0 &= ~CCIE;                       // TACCR0 interrupt disabled
  }
}

出0入0汤圆

 楼主| 发表于 2011-9-3 11:30:44 | 显示全部楼层
回复【4楼】lcofjp C语言砖家
-----------------------------------------------------------------------

非常感谢四楼提供的代码,我找这个硬I2C的程序找好久了,一直就没找到,另外有没有关于硬I2C的寄存器具体设置方法和数据手册,我也是找了好久也没找到,如果楼上有的话,传一份给我吧!我的邮箱是57462554@qq.com

出0入0汤圆

发表于 2011-9-3 12:51:38 | 显示全部楼层
回复【5楼】tianyaxtujxlg  
-----------------------------------------------------------------------

找不到用户手册么?
用户手册:
http://www.ti.com.cn/cn/lit/ug/slau144h/slau144h.pdf
样例程序:
http://www.ti.com/cn/litv/zip/slac149e

出0入0汤圆

 楼主| 发表于 2011-9-5 15:39:54 | 显示全部楼层
回复【6楼】jlhgold
-----------------------------------------------------------------------

用户手册倒是有,但是上面只介绍了如何把引脚设为相应的功能,其他具体这种功能的其他寄存器的设置方式一个都没有,249又是新出的一个芯片,弄的我也是找了好久都没有找到,感谢6楼提供的资料!!!

出0入0汤圆

 楼主| 发表于 2011-9-7 16:30:50 | 显示全部楼层
回复【6楼】jlhgold
-----------------------------------------------------------------------

六楼,你的资料我看了,确实对我帮助很大,在此再次感谢下你,另外还有个问题想向你请教一下,你传的程序包中程序msp430x24x_uscib0_i2c_15,程序中的这两条语句是什么意思,我也是查了很多手册,但是还是没看明白,还望六楼帮忙解释一下:

__bis_SR_register(CPUOFF + GIE);        // Enter LPM0 w/ interrupts

__bic_SR_register_on_exit(CPUOFF);      // Exit LPM0

出0入0汤圆

 楼主| 发表于 2011-9-7 18:11:47 | 显示全部楼层
回复【6楼】jlhgold
-----------------------------------------------------------------------

另外那个I2C程序是靠中断来实现传输数据的,他的具体过程是什么样,什么时候产生的中断,然后他们互相之间的应答位在哪里给出的。我看了程序,好像没有提到应答位的给出,这个是不是硬件自动实现的,还是需要软件编程来实现

出0入0汤圆

发表于 2011-9-13 20:18:09 | 显示全部楼层
回复【8楼】tianyaxtujxlg  
-----------------------------------------------------------------------

第一个是进入低功耗模式
第二个是退出低功耗模式

回复【9楼】tianyaxtujxlg  
-----------------------------------------------------------------------

是硬件实现的,如果需要具体的时序,用户手册(user‘s guide)中有提及。

出0入0汤圆

 楼主| 发表于 2011-9-14 18:01:04 | 显示全部楼层
回复【10楼】jlhgold
-----------------------------------------------------------------------

可不可以不采用低功耗模式来进行通信,我既要发送,又需要接受。不采用低功耗模式是不是可以直接把两个发送和接受中断函数写成这样就可以了

#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
     UCB0TXBUF = TxData[TXByteCtr];                   // Transmit data at address PTxData
     TXByteCtr++;                              // Increment TX byte counter
}

#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{

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

本版积分规则

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

GMT+8, 2024-5-25 10:08

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

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