5103|9

157

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

I2C主机模式接收的中断标志 [复制链接]

  1. //******************************************************************************

  2. // MSP430G2xx3 Demo - USCI_B0 I2C Master RX single bytes from MSP430 Slave
  3. //
  4. // Description: This demo connects two MSP430's via the I2C bus. The master
  5. // reads from the slave. This is the master code. The data from the slave
  6. // transmitter begins at 0 and increments with each transfer. The received
  7. // data is in R5 and is checked for validity. If the received data is
  8. // incorrect, the CPU is trapped and the P1.0 LED will stay on. The USCI_B0
  9. // RX interrupt is used to know when new data has been received.
  10. // ACLK = n/a, MCLK = SMCLK = BRCLK = default DCO = ~1.2MHz
  11. //
  12. // /|\ /|\
  13. // MSP430G2xx3 10k 10k MSP430G2xx3
  14. // slave | | master
  15. // ----------------- | | -----------------
  16. // -|XIN P1.7/UCB0SDA|<-|---+->|P1.7/UCB0SDA XIN|-
  17. // | | | | | 32kHz
  18. // -|XOUT | | | XOUT|-
  19. // | P1.6/UCB0SCL|<-+----->|P1.6/UCB0SCL |
  20. // | | | P1.0|--> LED
  21. //
  22. // D. Dang
  23. // Texas Instruments Inc.
  24. // February 2011
  25. // Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
  26. //******************************************************************************
  27. #include "msp430g2553.h"

    unsigned char RXData;

  28. unsigned char RXCompare;

    void main(void)

  29. {
  30. WDTCTL = WDTPW + WDTHOLD; // Stop WDT
  31. P1OUT &= ~BIT0; // P1.0 = 0
  32. P1DIR |= BIT0; // P1.0 output
  33. P1SEL |= BIT6 + BIT7; // Assign I2C pins to USCI_B0
  34. P1SEL2|= BIT6 + BIT7; // Assign I2C pins to USCI_B0
  35. UCB0CTL1 |= UCSWRST; // Enable SW reset
  36. UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
  37. UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
  38. UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
  39. UCB0BR1 = 0;
  40. UCB0I2CSA = 0x048; // Slave Address is 048h
  41. UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
  42. IE2 |= UCB0RXIE; // Enable RX interrupt
  43. RXCompare = 0; // Used to check incoming data

    while (1)

  44. {
  45. while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
  46. UCB0CTL1 |= UCTXSTT; // I2C start condition
  47. while (UCB0CTL1 & UCTXSTT); // Start condition sent?
  48. UCB0CTL1 |= UCTXSTP; // I2C stop condition
  49. __bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts

    if (RXData != RXCompare) // Trap CPU if wrong

  50. {
  51. P1OUT |= BIT0; // P1.0 = 1
  52. while (1); // Trap CPU
  53. }

    RXCompare++; // Increment correct RX value

  54. }
  55. }

    // USCI_B0 Data ISR

  56. #pragma vector = USCIAB0TX_VECTOR
  57. __interrupt void USCIAB0TX_ISR(void)
  58. {
  59. RXData = UCB0RXBUF; // Get RX data
  60. __bic_SR_register_on_exit(CPUOFF); // Exit LPM0
  61. }
复制代码
这个是官方例程, 主机模式接收从机发来的一个字节 我很困惑为什么接收模式 #pragma vector = USCIAB0TX_VECTOR 中断标志却是 TX呢 从机发送也是这个标志..... 有没有人可以讲解一下 多谢啦

最新回复

USCI_Ax和USCI_Bx共享相同的中断向量。I2C模块中状态变化中断标志位-USCI_Bx中的UCALIFG、UCNACKIFG、UCSTTIFG 、UCSTPIFG和USCI_Ax中的UCAxRXIFG使用同一个中断向量。I2C模块发送和接收中断标志-USCI_Bx中的UCBxTXIFG、UCBxRXIFG和USCI_Ax中的UCAxTXIFG共享另外一个中断向量。 [ 本帖最后由 zwuguli 于 2012-11-13 15:45 编辑 ]  详情 回复 发表于 2012-11-13 15:36
 
点赞 关注

回复
举报

157

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
中断程序 在最后几行
 
 

回复

157

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
//------------------------------------------------------------------------------
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
// number of bytes by pre-loading TXByteCtr with the byte count.
//------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
  if (TXByteCtr)                            // Check TX byte counter
  {
    UCB0TXBUF = TXData;                     // Load TX buffer
    TXByteCtr--;                            // Decrement TX byte counter
  }
  else
  {
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
    IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
  }
}


这是从机发送的
中断向量 也是 USCIAB0TX_VECTOR
 
 
 

回复

157

帖子

0

TA的资源

一粒金砂(高级)

4
 
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

5
 
我也是相当郁闷 啊.....

点评

好像 STT STP 的中断标志 进RX中断向量 TX RX中断标志 进TX中断向量  详情 回复 发表于 2012-8-8 14:35
 
 
 

回复

157

帖子

0

TA的资源

一粒金砂(高级)

6
 

回复 5楼 xinlangtuibian 的帖子

好像 STT STP 的中断标志 进RX中断向量

TX RX中断标志   进TX中断向量

点评

怎么是这样子的勒...感觉有点乱了......你 是哪里找的资料啊....我现在想模拟的IIC了...  详情 回复 发表于 2012-8-13 13:22
 
 
 

回复

17

帖子

0

TA的资源

禁止访问

7
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 6楼 457887107 的帖子

怎么是这样子的勒...感觉有点乱了......你 是哪里找的资料啊....我现在想模拟的IIC了...

点评

userguide 一个不起眼的小角落...  详情 回复 发表于 2012-8-13 15:04
 
 
 

回复

157

帖子

0

TA的资源

一粒金砂(高级)

9
 

回复 8楼 xinlangtuibian 的帖子

userguide 一个不起眼的小角落...
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

10
 

中断向量的分配

USCI_Ax和USCI_Bx共享相同的中断向量。I2C模块中状态变化中断标志位-USCI_Bx中的UCALIFG、UCNACKIFG、UCSTTIFG 、UCSTPIFG和USCI_Ax中的UCAxRXIFG使用同一个中断向量。I2C模块发送和接收中断标志-USCI_Bx中的UCBxTXIFG、UCBxRXIFG和USCI_Ax中的UCAxTXIFG共享另外一个中断向量。


[ 本帖最后由 zwuguli 于 2012-11-13 15:45 编辑 ]

中断向量的分配.jpg (92.27 KB, 下载次数: 0)

中断向量的分配

中断向量的分配
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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