打印

msp430f5529的spi发送接受问题

[复制链接]
1993|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家好,我是一个430的初学者,我画的板子是用f5529控制前端的adas1000(ADI的心电采集模拟前端)
需要用spi通信写寄存器以及从spi读取心电数据
现在程序调试的很不顺利 已经折腾个把月了……
现在遇到的困难是

在发送的过程中,byte++就会进入reset vector

而且最无语的是 同样的代码 有时候调试就可以运行 有时候就出问题了……新手遇到这个根本就是抓瞎了= =+




这几个是我调试成功时候的发送波形 我看了一下 和我发的数据是一样的……结果过一会儿就不行了……


另外 求大神帮忙告知SPI接收的情况 比如寄存器的判断什么什么的
您帮我看看我这个代码可行不
/***************************************************************************//**
* [url=home.php?mod=space&uid=247401]@brief[/url] Reads data from SPI.
*
* @param data - Data represents the read buffer.
* @param bytesNumber - Number of bytes to read.
*
* [url=home.php?mod=space&uid=266161]@return[/url] Number of read bytes.
*******************************************************************************/
void SPI_Read(unsigned char* data,
                                           unsigned char bytesNumber)
{
    unsigned char byte = 0;

    P4OUT &= ~BIT0;                               // 将CS置低开始传输
   
    for(byte = 0; byte < bytesNumber; byte++)
      {
        while (!(UCB1IFG&UCTXIFG));
         UCB1TXBUF = 0x55;
        while (!(UCB1IFG&UCTXIFG));
         data[byte] = UCB1RXBUF;                     // Transmit first character           
      }
  
    P4OUT |= BIT0;                               // 将CS置高完成传输
  
        //return bytesNumber;
}
前端ADAS1000的寄存器都是32位的,这是官方给出的读寄存器代码
/***************************************************************************//**
* @brief Reads the value of the selected register
*
* @param regAddress - The address of the register to read.
* @param regVal - Pointer to a variable where to store the read data.
*
* @return None.
*******************************************************************************/
void ADAS1000_GetRegisterValue(unsigned char regAddress,
                                                           unsigned long* regVal)
{
        unsigned char readCmd[4]        = {0, 0, 0, 0};
        unsigned char readData[4]        = {0, 0, 0, 0};

        // Select the register (For register reads, data is shifted out
        // during the next word).
        readCmd[0] = regAddress;        // Register address.
        SPI_Write(readCmd, 4);
       
        // Read the data from the device.
        SPI_Read(readData, 4);
        *regVal = ((unsigned long)readData[1] << 16) +
                          ((unsigned long)readData[2] << 8) +
                          ((unsigned long)readData[3] << 0);
}

相关帖子

沙发
jixueyuan163|  楼主 | 2014-6-5 18:08 | 只看该作者
恳请大神帮忙  快毕不了业了  导师天天骂= =+
如果有北京的大神能线下帮忙的  楼主请吃饭

使用特权

评论回复
板凳
dirtwillfly| | 2014-6-5 20:31 | 只看该作者
可能是调试时电路接触不好

使用特权

评论回复
地板
jixueyuan163|  楼主 | 2014-6-12 10:41 | 只看该作者
又一个星期过去了  我的程序还那逼样……
尼玛不想念书了……

使用特权

评论回复
5
jixueyuan163|  楼主 | 2014-6-12 10:41 | 只看该作者
dirtwillfly 发表于 2014-6-5 20:31
可能是调试时电路接触不好

我上周末又新焊了一块板子……调试的时候还是一样……

使用特权

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

本版积分规则

4

主题

16

帖子

0

粉丝