I2C总线通信协议详解
1. 基于中断的SPI传输
SPI收发器启用中断的接口与UART的接口非常相似。为了正确实现非阻塞事务,需要将读写阶段分开,以便事件触发相关操作。
在SPI1_CR2寄存器中设置以下两个位,分别在发送FIFO为空和接收FIFO非空时启用中断触发:
#define SPI_CR2_TXEIE (1 << 7)
#define SPI_CR2_RXNEIE (1 << 6)
中断向量中包含的相关服务例程可以查看SPI1_SR中的值,将事务推进到下一阶段:
void isr_spi1(void)
{
volatile uint32_t reg;
reg = SPI1_SR;
if (reg & SPI_SR_RX_NOTEMPTY) {
/* End of transmission: new data available on MISO*/
}
if ((reg & SPI_SR_TX_EMPTY)
{
/* End of transmission: the TX FIFO is empty*/
}
}
中断上半部分的实现取决于系统所需的API、事务的性质及其对系统响应性的影响。短而高速的SPI事务可能时间短且分散,因此即使实现阻塞操作对系统延迟的影响也较小。
2. I2C总线概述
I2C是一种串
超级会员免费看
订阅专栏 解锁全文
1828

被折叠的 条评论
为什么被折叠?



