zoukankan      html  css  js  c++  java
  • 科大讯飞语音芯片xfs5152CE,分享遇到的一些坑

    首先 芯片手册的I2C地址是写地址,是8位的,真正的地址是7位地址,应该是0x40,最低位是读写位,读置1,为0x81,写置0,为0x80.

    如果是模拟I2C倒无所谓,最坑的是我用的是寄存器,所以必须要用7位地址才可以,这个地方坑了我好几天。

    其次,在用uart串口的是时候,每次上电芯片会返回一个状态值0x4A,但I2C是不会主动返回的,需要你去读取

    我是在写入语音之后接着读取状态字节

    上电第一次写入数据并读取,会得到0x4A,之后的再读取都是0x41,0x4F

    程序部分

    我用的是msp430F5438A,I2C3

    1 void i2c3_start(unsigned char address)
    2 {
    3   UCB3I2CSA = address;
    4   while(UCB3CTL1 & UCTXSTP);
    5   UCB3CTL1 |= (UCTR + UCTXSTT);
    6   while(!(UCB3IFG & UCTXIFG));
    7   UCB3IFG &= ~UCTXIFG;
    8 }
    1 void i2c3_writebyte(unsigned char data)
    2 {
    3   UCB3TXBUF =data;
    4   while(!(UCB3IFG & UCTXIFG));
    5   UCB3IFG &= ~UCTXIFG;
    6 }
    1 void i2c3_writeNbyte(unsigned char* data,int len)
    2 {
    3   for(int i=0;i<len;i++)
    4   {
    5     i2c3_writebyte(*data++);
    6   }
    7 }
     1 void i2c3_readNbyte(unsigned char *data,unsigned char len)
     2 {
     3   UCB3CTL1 &= ~UCTR;
     4   UCB3CTL1 |= UCTXSTT;
     5   for(int i=0;i<len;i++)
     6   {
     7     while(!(UCB3IFG & UCRXIFG));
     8     UCB3IFG &= ~UCRXIFG;
     9     if(i==len-1)UCB3CTL1 |= UCTXSTP;
    10     *data++ = UCB3RXBUF;
    11   }
    12 }
    1 int xfs_set(unsigned char* cmd,int len,unsigned char *data,int n)
    2 {
    3   i2c3_start(0x40);
    4   i2c3_writeNbyte(cmd,len);
    5   i2c3_readNbyte(data,n);
    6   return 0;
    7 }

    未完待续

    8月19号更新

    上面的停止条件处需要加上标志位判断,不然后续i2c控制会卡死

    void i2c3_readNbyte(unsigned char *data,unsigned char len)
    {
      UCB3CTL1 &= ~UCTR;
      UCB3CTL1 |= UCTXSTT;
      for(int i=0;i<len;i++)
      {
        while(!(UCB3IFG & UCRXIFG));
        UCB3IFG &= ~UCRXIFG;
        if(i==len-1)
        {
          UCB3CTL1 |= UCTXSTP;
          while(UCB3CTL1 & UCTXSTP);
        }
        *data++ = UCB3RXBUF;
      }
    }
    更新

    以上为原创,请勿转载

    欢迎讨论!

  • 相关阅读:
    什么是J2EE
    JSE,JEE,JME三者之间有什么区别
    windows下git显示文件被修改,实际没有改动的问题解决办法
    laravel 多个项目共享SESSION
    laravel 共享session问题总结
    laravel5 报错419,form 添加crrf_field 后让然失败,本地环境配置问题
    QQ互联登录提示redirect uri is illegal(100010)完美解决方法
    vim鼠标模式打开与关闭
    HTML5----响应式(自适应)网页设计
    file_put_contents () failed to open stream: Permission denied 解决办法
  • 原文地址:https://www.cnblogs.com/yaoshunyu/p/11358662.html
Copyright © 2011-2022 走看看