芯片设计理念问题,SPI的发送空中断,和其他理念不太一样,一般来说,DR冲有到无产生一个中断,而STM的是只要空就是1,产生中断,我也是研究了半天才弄明白??
void SPI_InterruptISR(void)
{
//u8 temp;
P_SPIfdstr fd=&exspifd;
if (SPI->SR & SPI_FLAG_RXNE) {
if (!fd->full) {
fd->Rxbuff[fd->front++] = (u8)SPI->DR;
fd->front %= MAXSPIRXDBUFFSIZE;
if (fd->front == fd->rear)
fd->full = 1;
}
}
if (SPI->SR & SPI_FLAG_TXE) {
if (fd->full || (fd->write != fd->read)) {
SPI->DR = fd->Txbuff[fd->read++];
fd->read %= MAXSPITXDBUFFSIZE;
fd->full = 0;
} else {
SPI_ITConfig(SPI_IT_TXE, DISABLE);//缓冲区数据发送完成后,关闭中断,再次发送时打开
}
}
}
void spi_send_buf(u8 *buf, u8 len)
{
u8 i=0;
P_SPIfdstr fd=&exspifd;
for (i=0; i<len; i++) {
fd->Txbuff[fd->write++] = *buf++;
fd->write %= MAXSPITXDBUFFSIZE;
}
//SPI->DR = fd->Txbuff[fd->read];
SPI_ITConfig(SPI_IT_TXE, ENABLE);
}