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