微机原理实验四DA

时间:2022-11-22 17:53:26 作者:壹号 字数:3116字

微机原理实验四

串行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