1. APB接口SPI主控制器设计解析
在嵌入式系统设计中,SPI总线因其简单高效的特性被广泛应用于芯片间通信。今天要分享的是一个基于APB总线的SPI主控制器设计,这个模块实现了CPU通过APB总线对SPI通信的配置和控制。作为在嵌入式领域深耕多年的工程师,我将从实际应用角度详细解析这个设计的架构和实现细节。
这个SPI控制器支持最大128位数据传输(可配置),提供8/16/24/32位从机选择信号,时钟分频器可编程,并支持四种标准SPI工作模式。特别值得一提的是,它实现了自动从机选择和中断机制,大大减轻了CPU的负担。下面我们就从接口定义开始,逐步剖析这个设计的精妙之处。
2. 接口定义与寄存器映射
2.1 APB接口信号解析
APB(Advanced Peripheral Bus)是ARM公司提出的片上总线标准,属于AMBA协议家族中的低速外设总线。我们的SPI控制器作为APB从设备,需要实现完整的APB接口:
verilog复制input PCLK; // APB时钟(通常<50MHz)
input PRESETn; // APB复位(低电平有效)
input [4:0] PADDR; // 地址总线(32字节地址空间)
input [31:0] PWDATA; // 写数据总线
output [31:0] PRDATA; // 读数据总线
input PWRITE; // 读写控制(1=写,0=读)
input PENABLE; // 使能信号
input PSEL; // 片选信号
output PREADY; // 就绪信号
output PSLVERR; // 错误信号(本设计固定为0)
output IRQ; // 中断请求
APB总线采用两阶段传输:SETUP阶段(PSEL=1,PENABLE=0)和ACCESS阶段(PSEL=PENABLE=1)。我们的设计中,PREADY信号会在ACCESS阶段的第一个时钟周期拉高,表示传输完成。
注意:APB协议规定在传输未完成时应保持PREADY=0,我们的设计采用单周期响应,因此PREADY逻辑非常简单。
2.2 SPI接口信号定义
SPI接口采用标准四线制,支持多从机选择:
verilog复制output [`SPI_SS_NB-1:0] ss_pad_o; // 从机选择(低有效)
output sclk_pad_o; // SPI时钟
output mosi_pad_o; // 主机输出从机输入
input miso_pad_i; // 主机输入从机输出
其中SPI_SS_NB是可配置参数,支持8/16/24/
