微机原理实验四
串行IO接口实验
姓名:英俊哥
学号: 班级:
一、 实验目的
1. 理解UART串行通信协议以及接口设计 2. 理解SPI串行通信协议 3. 掌握UART串行接口设计
4. 掌握SPI串行接口设计(DA、AD串行接口设计)
二、 实验任务
Nexys4开发板通过外界SPIDA模块,实现DA转换,利用DAC121S101DA转换芯片,基于SPI总线控制其Dout输出锯齿波。 扩展
(1) 周期可调 (2) 输出电压可调
(3) 输出其他波形,如正弦波,三角波等
三、 硬件电路框图
AXI总线IrqAXI INTCAXI总线接口InterruptAXI总线接口AXI总线接口SPI IPcoreSS(0)SPI总线接口SCLKMOSIVASYNCSCLKDinDAC121S101GNDVoutInterruptVccIntr0MicroBlaze
四、 硬件平台建立过程
1. 使用XPS创建一个基于AXI总线的最小计算机系统。配置相关参数,选择处
理器频率、BRAM大小为32KB,并增加串口作为标准输入输出接口。创建最小系统的基本操作如前面的实验。
2. 硬件平台要求加入中断控制器课SPI总线接口,如下图所示,在IP Catalog
中添加AXI Interrupt Controller,采用默认设置。
3. 加入AXI SPI接口控制器如下图所示,选择AXI SPI。由于该SPI接口仅需要输
出数据,而且一次传输需要16位数据,一个从设备,且D/A转换芯片要求SCLK最高速率30MHz,由于AXI总线频率为100MHz,因此分频比为4,此时SCLK的频率为25MHz。 4. 具体SPI端口连接配置下图所示。
5. External Ports 如下:
6. 配置UCF,分配物理引脚如下图所示。
五、 软件平台建立
建立一个BSP文件,再建立一个新的空工程,将源码加入新的c源文件中。 下载并运行该工程,将示波器探针连接到J2的1脚,可看到锯齿波的波形。 C源码如下:
* SPIDA1.c *
* Created on: 2015-12-8 * Author: hn_wu_000 */
#include #include
#include
#include #define BUFFER_SIZE 2
void SpiIntrHandler(void *CallBackRef,u32 StatusEvent,u32 ByteCount); //用户定义的SPI中断服务程序 static XIntc IntcInstance; static XSpi SpiInstance; volatile int TransferInProgress; //中断结束状态标志
int Error;
u8 ReadBuffer[BUFFER_SIZE]; u8 WriteBuffer[BUFFER_SIZE];
int main(void) {
int Status,Count;
Status=XSpi_Initialize(&SpiInstance,XPAR_SPI_0_DEVICE_ID); Status=XIntc_Initialize(&IntcInstance,XPAR_INTC_0_DEVICE_ID);
Status=XIntc_Connect(&IntcInstance,XPAR_INTC_0_SPI_0_VEC_ID,(XInterruptHandler)XSpi_InterruptHandler,(void *)&SpiInstance);
Status=XIntc_Start(&IntcInstance,XIN_REAL_MODE); XIntc_Enable(&IntcInstance,XPAR_INTC_0_SPI_0_VEC_ID);
…… 此处隐藏0字 ……
microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler,&IntcInstance);
microblaze_enable_interrupts(); //设置SPI接口用户中断服务函数
XSpi_SetStatusHandler(&SpiInstance,&SpiInstance,(XSpi_StatusHandler)SpiIntrHandler);
//设置SPI接口工作模式
Status=XSpi_SetOptions(&SpiInstance,XSP_MASTER_OPTION|XSP_CLK_PHASE_1_O