本帖最后由 jixueyuan163 于 2014-5-26 16:49 编辑
大神好,我是一位430的初学者,我自己设计的电路是通过f5529的spi接口控制一个前端的AFE芯片
我画的电路连接方式是用UCB1的3线SPI口(P4.1~P4.3),而P4.0作为前端的片选CS(低有效)
现在遇到的问题是 模拟前端的芯片给出了例如初始化,读写寄存器,复位等的通用代码 并给了一个Communication.c的接口程序用于不同的控制器来控制
在这个C文件中定义了SPI_Init () , SPI_Write () , SPI_Read () 三个函数
初始化函数我觉得自己写的应该没有问题 而读写函数不太会写
/***************************************************************************//**
*
@brief Writes data to SPI.
*
* @param data - data represents the write buffer.
* @param bytesNumber - Number of bytes to write.
*
*
@return Number of written bytes.
*******************************************************************************/
unsigned char SPI_Write(unsigned char* data,
unsigned char bytesNumber)
{
unsigned char byte = 0;
P4OUT &= ~BIT0; // 将CS置低开始传输
for(byte = 0; byte < bytesNumber; byte++)
{
while (!(UCB1IFG&UCTXIFG)); // USCI_B1 TX buffer ready?
UCB1TXBUF = data[byte]; // Transmit first character
}
P4OUT |= BIT0; // 将CS置高完成传输
return bytesNumber;
}
这个是我的写的代码 总觉得哪里不对 在编译debug的时候 似乎在循环执行某句话(我也不知道为啥我的IAR debug的时候看不到绿 {MOD}的箭头指示)
另外附上我的读的代码 读的代码……肯定不对 我在学习spi的时候 理解到的SPI传输方式应该是在写的后半个时钟周期就会自动读……
但是到了自己写代码的时候就模模糊糊不知道怎么判断。另外就是想问,我的那个SPI_Write()代码是轮询方式么?还是中断方式,需不需要写中断向量函数
/***************************************************************************//**
*
@brief Reads data from SPI.
*
* @param data - Data represents the read buffer.
* @param bytesNumber - Number of bytes to read.
*
*
@return Number of read bytes.
*******************************************************************************/
unsigned char SPI_Read(unsigned char* data,
unsigned char bytesNumber)
{
unsigned char byte = 0;
P4OUT &= ~BIT0; // 将CS置低开始传输
for(byte = 0; byte < bytesNumber; byte++)
{
while (!(UCB1IFG&UCTXIFG)); // USCI_B1 RX buffer ready?
data[byte] = UCB1RXBUF; // Transmit first character
}
P4OUT |= BIT0; // 将CS置高完成传输
return bytesNumber;
}
unsigned char bytesNumber)
{
unsigned char byte = 0;
P4OUT &= ~BIT0; // 将CS置低开始传输
for(byte = 0; byte < bytesNumber; byte++)
{
while (!(UCB1IFG&UCTXIFG)); // USCI_B1 RX buffer ready?
UCB1TXBUF = 0x55;
while (!(UCB1IFG&UCTXIFG));
data[byte] = UCB1RXBUF; // Transmit first character
}
P4OUT |= BIT0; // 将CS置高完成传输
return bytesNumber;
}
一周热门 更多>