打印

I2C硬件数据传输

[复制链接]
1759|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CaLipton|  楼主 | 2018-1-25 14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用169做主机发送数据,然后用5529接收数据,现在发现169在发送数据,但是在5529中怎么也进不了接收数据的中断,上拉电阻也加了,大神们给点意见啊,附上代码:169主机的代码:#include <msp430.h>/file:///C:\Users\ADMINI~1\AppData\Local\Temp\)QN1UH78VKP2T7)IA]ZM(FW.gifar TXData = 0;
int main (void)
{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0x0A;                            // Select I2C pins
  P1OUT |= 0x00;
  U0CTL |= I2C + SYNC;                      // Recommended init procedure
  U0CTL &= ~I2CEN;                          // Recommended init procedure
  I2CTCTL |= I2CSSEL1;                      // SMCLK
  I2CNDAT = 0x01;                           // Write one byte
  I2CSA = 0x0048;                           // Slave Address is 048h
  I2CIE = TXRDYIE;                          // Enable RXRDYIFG interrupt
  U0CTL |= I2CEN;                           // Enable I2C
//  I2CDCTL |=0x00;
  __enable_interrupt();                     // Enable interrupts

  while (1)
  {
    U0CTL |= MST;                           // Master mode
    I2CTCTL |= I2CSTT + I2CSTP + I2CTRX;    // Initiate transfer
    __bis_SR_register(CPUOFF);              // Enter LPM0
  }

}

// Common ISR for I2C Module
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USART0TX_VECTOR
__interrupt void I2C_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USART0TX_VECTOR))) I2C_ISR (void)
#else
#error Compiler not supported!
#endif
{

     I2CDRB = 0x5A;                         // TX data
     while (I2CBUSY & I2CDCTL);             // I2C ready?
     P1OUT |= 0x01;
     P1DIR |= 0x01;
     __bic_SR_register_on_exit(CPUOFF);     // Clear LPM0

}

5529从机的代码:

#include <msp430.h>

volatile unsigned char RXData;

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0x03;                            // Assign I2C pins to USCI_B0
  P1OUT = 0;
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMODE_3 + UCSYNC;             // I2C Slave, synchronous mode
  UCB0I2COA = 0x48;                         // Own Address is 048h
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
  UCB0IE |= UCRXIE;                         // Enable RX interrupt

  while (1)
  {
    __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0, enable interrupts(就停在这里了)
    __no_operation();                       // Set breakpoint >>here<< and read
  }                                         // RXData
}

// USCI_B0 Data ISR
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void)
#else
#error Compiler not supported!
#endif
{                                  // Vector 10: RXIFG
    RXData = UCB0RXBUF;                     // Get RX data
    P1DIR |= 0X01;
    P1OUT =0x01;
    __bic_SR_register_on_exit(LPM0_bits);   // Exit LPM0

}

相关帖子

沙发
Rospiers| | 2018-1-25 14:52 | 只看该作者

是不是 在调试中,还是独立运行中发现的问题?

使用特权

评论回复
板凳
Lewisnx| | 2018-1-25 15:06 | 只看该作者
调试的时候发现进不去中断

使用特权

评论回复
地板
CCompton| | 2018-1-25 15:20 | 只看该作者
应该是没有进去中断,所以没有退出睡眠

使用特权

评论回复
5
Richardd| | 2018-1-25 15:37 | 只看该作者
推荐你看个帖子,很有用的,但是不是中断模式,是轮询模式
MSP430F5438 I2C学习笔记——AT24C02
http://bbs.**/forum. ... &fromuid=698700

使用特权

评论回复
6
Mattheww| | 2018-1-25 16:07 | 只看该作者
我用169发,MSP430F6638接数据时可以成功的,因为6638和5529是一个系列的,代码也没差多少,但是为啥我现在移动5529去,169之间就不发送数据了? 169的I2CDRB寄存器运行了,但是根本没有值写进去,这是为啥啊?

使用特权

评论回复
7
dirtwillfly| | 2018-1-25 19:56 | 只看该作者
Mattheww 发表于 2018-1-25 16:07
我用169发,MSP430F6638接数据时可以成功的,因为6638和5529是一个系列的,代码也没差多少,但是为啥我现在 ...

建议先用逻辑分*析仪观察一下时序。确定下是169的问题,还是5529的问题

使用特权

评论回复
8
kkzz| | 2018-1-25 22:05 | 只看该作者
能够接收到数据吗

使用特权

评论回复
9
hudi008| | 2018-1-25 22:05 | 只看该作者
这个硬件iic吗?

使用特权

评论回复
10
lzmm| | 2018-1-25 22:06 | 只看该作者
其他的中断能够执行吗

使用特权

评论回复
11
minzisc| | 2018-1-25 22:06 | 只看该作者
硬件电路的问题。

使用特权

评论回复
12
selongli| | 2018-1-25 22:09 | 只看该作者
软件和硬件都检查了吗?

使用特权

评论回复
13
kkzz| | 2018-1-25 22:13 | 只看该作者
查看一下iic的寄存器。

使用特权

评论回复
14
hudi008| | 2018-1-25 22:13 | 只看该作者
硬件的IIC一直没有配置成功。

使用特权

评论回复
15
lzmm| | 2018-1-25 22:13 | 只看该作者
测试一下其他的中断信号源。

使用特权

评论回复
16
selongli| | 2018-1-25 22:13 | 只看该作者
测量一下IO的电平电压

使用特权

评论回复
17
minzisc| | 2018-1-25 22:13 | 只看该作者
使用上拉电阻。

使用特权

评论回复
18
mmbs| | 2018-2-3 20:51 | 只看该作者
一般都是模拟iic

使用特权

评论回复
19
1988020566| | 2018-2-3 20:51 | 只看该作者
有的芯片的I2C有BUG

使用特权

评论回复
20
lzbf| | 2018-2-3 20:52 | 只看该作者
只适用于某些对速率要求不高的场所

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

126

主题

369

帖子

0

粉丝