1.3.2 SPI硬件设计
图3是本文无线通信系统中SPI模块的结构图,该系统中的SPI主要由时钟生成模块,SPI寄存器组,SPI功能配置的模块组成,并且通过Wishbone总线与控制器相连,具体设计如下:
时钟生成模块:由于SPI模块是基于FPGA来实现的,而FPGA外部提供的时钟较快(50 MHz或100 MHz),不适合与NRF905的SPI接口进行通信
(1 Hz~10 MHz),所以需要分频来使时钟慢下来。但是至于几分频是由SPI功能配置模块来完成的。其次由于SPI协议指出数据可在上升沿或下降沿触发,所以还需要对时钟的上升沿或下降沿进行鉴别(也称抓沿程序),这个功能也由这个模块完成。
SPI寄存器模块:这个模块实现的是一个由16个8位寄存器组成的128位的寄存器组,也就是说通过SPI接口一次性可收发8~128位的串行数据。具体操作由SPI功能配置模块来完成。
SPI功能配置模块:这个模块相当于一个SPI控制器,通过对其寄存器的配置来决定时钟的分频数,收发数据位数,时钟上升沿或下降沿传输数据等,而对这些寄存器的配置是由控制模块完成的。下面就配置寄存器做一些简要说明。
首先介绍控制寄存器:
控制寄存器第O位go:是否开始发送。
控制寄存器第1位rx_negedge:接收数据是下降沿还是上升沿。
控制寄存器第2位tx_negedge:发送数据是下降沿还是上升沿。
控制寄存器第3~9位char_len:发送数据的位数(因为SPI是全双工的,所以这实际上也是接收数据的位数)。
控制寄存器第10位lsb:是从高位发送还是地位发送。
控制寄存器第11位ie:读写完成之后是否发送中断信号。
控制寄存器第12位ass:是否自动产生片选信号。
分频寄存器:spi_divider_sel。
状态寄存器:spi_ctrl_sel。
数据寄存器O:spi_tx_sel[0]。
数据寄存器1:spi_tx_sel[1]。
数据寄存器2:spi_tx_sel[2]。
数据寄存器3:spi_tx_sel[3]。
片选信号寄存器:spi_ss_sel。
1.4 控制模块
对于控制模块来说,其实现方法是利用基于Verilog语言的有限状态机来实现,相当于一条一条的指令来控制SPI模块接收发送数据。控制模块分成三个独立的部分即接收控制模块、发送控制模块及NRF905配置模块。其中接收与发送控制模块分别包含对SPI进行配置的状态。下面对接收控制模块的设计进行说明。图4即为Debussy综合出的状态机转换图。
为了完成无线通讯而设计的状态较多,比较复杂,故只对比较重要的状态做些简要说明。idle空闲状态,完成对端口进行初始化寄差模电感存器清零;config_div状态,对时钟进行分频(定义sclk);configwb_in状态,定义传输数据的位数以及是上升沿收发还是下降沿收发,wb_inl,wb_in2,wb_in3,wb_in4,这四个状态就是通过Wishbone总线接口对SPI配置要写的数(每一个状态对应一个寄存器);configspi_out状态,开始传送数据;done状态,片选置高数据传送完成;readeonfigreg_prel状态,设定发送数据位数;readconfigreg(读寄存器控制字位数电容器和电感器)状态,通过Wishbone总线接口对SPI配置读命令字;readconfigreg_out状态,设定发送/接收数据位;alldone状态,片选置高完成配置数据读取的过程。
PIC16C78系列混合信号嵌入式芯片的原理和应用在对嵌入式系统的体积、耗电、集成度等指标要求越来越高的今天,仅仅有带AD变换电路的MCU已经越来越难以处理外围的其他模拟电路。据此,相继有一些MCU制造商推出了混合了模拟电路的MCU,为设计者提供了新
LT1173风力发电机充电控制器电路如图。由于三连发电机的交流输出电压为1.8VRMs,为提高输出电压,采用了二倍压整流电路,二极管选用低正向压降的肖特基二极管。充电对象为两节镍镉或镍氢电池,满充电时为1.4Vx2=2.8V,防逆流
基于集成直流稳压电源的设计0 引言任何电子设备的工作都离不开直流电源,晶体管、集成电路正常工作都需要直流电源供电。提供直流电的方法主要有干电池和稳压电源两种。干电池具有输出电压稳定便于携带等优点但是其容量低寿命短的缺点也十分明