大家好,我是一个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);
- }
|