zw122630 2022-01-18 15:13 采纳率: 0%
浏览 29

MSP430 FR5994 I2C写入monzaX代码收不到从机应答

问题遇到的现象和发生背景

任务:通过MSP430 FR5994做I2C主机写入I2C从机monza芯片单字节,但代码收不到应答,请问代码有没有错误。环境:CCS11.1。

问题相关代码,请勿粘贴截图
#include <msp430.h>
unsigned char I2CBUF;
unsigned char checkbit;
#define SCL_H   (P7OUT |= BIT1)      // P7.1为SCL
#define SCL_L   (P7OUT &= ~BIT1)
#define SDA_H   (P7OUT |= BIT0)     //p7.0为SDA
#define SDA_L   (P7OUT &= ~BIT0)
#define SDA_OUT  (P7DIR |= BIT0)
#define SDA_IN  (P7DIR &= ~ BIT0)
#define SDA  (P7IN & BIT0)
#define SDA1  (P7OUT | BIT0)

void I2C_Start(void)    //I2C开始信号
{
 SDA_OUT;
 SCL_L;
 SDA_H;
 __delay_cycles(5);
 SCL_H;
 __delay_cycles(5);
 SDA_L;
 __delay_cycles(5);
 SCL_L;
 __delay_cycles(5);
}

unsigned char testACK(void) {
    SDA_OUT;
    SDA_H;
    __delay_cycles(5);
    SDA_IN;
unsigned char ACK;
    __delay_cycles(5);
    SCL_H;
    __delay_cycles(5);
    SCL_L;
    if(P7IN & BIT0==0){
        ACK=0;}
    else{
        ACK=1;
    }
    return (ACK);
    /*SDA_IN;
 __delay_cycles(5);
 SCL_H;
 __delay_cycles(5);
 checkbit = (P7IN & BIT0) >> 4;
 __delay_cycles(5);
 SCL_L;
 __delay_cycles(5);
 return (checkbit);*/
}

void I2C_WRITE(unsigned char data)
{
 SDA_OUT;
 unsigned char i;
 for (i = 8; i > 0; i--)      //高位循环8次,发送1个字节数据
    {
  if (data & 0x80)   //判断数据高位是0还是1
     {
      SDA_H ;        //高位数据写1
  }
  else
  {
   SDA_L;
  }
  __delay_cycles(5); 
  SCL_H;
  __delay_cycles(5);  //发送数据
  SCL_L;
  __delay_cycles(5);
  data <<= 1;
 }
 SDA_H ;
}

void blink(void) {
    WDTCTL = WDTPW | WDTHOLD;               // Stop watchdog timer
    PM5CTL0 &= ~LOCKLPM5;                   // Disable the GPIO power-on default high-impedance mode
                                            // to activate previously configured port settings
    P1DIR |= 0x01;                          // Set P1.0 to output direction

    for(;;) {
        volatile unsigned int i;            // volatile to prevent optimization

        P1OUT ^= 0x01;                      // Toggle P1.0 using exclusive-OR

        i = 10000;                          // SW Delay
        do i--;
        while(i != 0);
    }
}


void blink1(void) {
    WDTCTL = WDTPW | WDTHOLD;               // Stop watchdog timer
    PM5CTL0 &= ~LOCKLPM5;                   // Disable the GPIO power-on default high-impedance mode
                                            // to activate previously configured port settings
    P1DIR |= 0x01;                          // Set P1.0 to output direction

        P1OUT |= 0x01;                      // Toggle P1.0 using exclusive-OR


}
int main(void)
{
     I2C_Start();
     I2C_WRITE(0X76);
     unsigned char ack=testACK();
     if(ack==0)                      //ack=0表示收到应答,led闪烁,否则LED只亮
            {blink();                   //收到应答就闪灯
            }
     else{
         blink1();
     }
     ;

    return 0;
}
运行结果及报错内容

monzaX芯片I2C从机写地址为0XDC,但收不到从机应答(ack始终为1),请问代码有没有什么错误,谢谢。

我的解答思路和尝试过的方法
我想要达到的结果

通过I2C,MSP430 FR5994做主机写入monzaX芯片内存一个字节,谢谢

  • 写回答

1条回答 默认 最新

  • zw122630 2022-01-18 15:30
    关注

    main函数里的I2C_WRITE应该写成,0XDC,这里打错了,但是还是收不到应答

    评论

报告相同问题?

问题事件

  • 创建了问题 1月18日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题