1、 微机原理实验测试串行接口 AD 转换实验专业: 电子信息工程 姓名: 班级: 201401 班学号: U201413278 日期: 年 月 日专业 电子信息与通信学院 班级 电信 1401 班 日期 2016/05/12 第 4 次试验姓名 组别 15 指导老师 成绩 实验课题 串行接口 AD 转换实验一 实验目的1. 理解 RS232 串行通信协议以及接口设计2. 理解 SPI 串行通信协议3. 掌握 RS232 串行接口设计4. 掌握 SPI 串行接口设计5. 掌握串行 AD/DA 接口设计二 实验任务 SPI 接口 AD 转换三个电平数据,打印结果到 console,要求采用中断方式。
2、三 实验原理DAC121S101 中断控制方式接口电路四 实验步骤1. 硬件平台建立1) 参照 11 章使用 XPS 创建一个基于 AXI 总线的最小计算机系统。2) 添加 AXI Interrupt Controller IP 核:a. 在 IP Catalog 标签中,双击下面图标创建 INTC IP 核:b. 将 microblaze_0 实例的 INTERRUPT 引脚选择 axi_intc_0_INTERRUPT,如图:3) 加入 AXI SPI 接口控制器:a. 如图所示,选择 AXI SPI。b. 配置 SPI 接口参数如图所示。这是由于该 SPI 接口仅需要输出数据,而且一次传
3、输需要 16 位数据,一个从设备,且 D/A 转换芯片要求SCLK 最高速率 30MHz,由于 AXI 总线频率为 100MHz,一次分频比为8,此时 SCLK 的频率仅为 12.5MHz。c. 设置端口连接配置,如图:4) 为 AXI INTC 添加中断源,如图:5) 配置 UCF 文件:在 UCF 文件中修改如图所示配置,此时是通过 PMOD JA 上排插针进行连接:NET “CLK“ TNM_NET = sys_clk_pin;TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 100000 kHz;NET “CLK“ LOC = “E3“ | IO
4、STANDARD = “LVCMOS33“;NET “RESET“ LOC = “E16“ | IOSTANDARD = “LVCMOS33“;NET “RsRx“ LOC = “C4“ | IOSTANDARD = “LVCMOS33“;NET “RsTx“ LOC = “D4“ | IOSTANDARD = “LVCMOS33“;NET “axi_spi_0_SS_pin“ LOC = “B13“ | IOSTANDARD = “LVCMOS33“;NET “axi_spi_0_MOSI_pin“ LOC = “F14“ | IOSTANDARD = “LVCMOS33“;NET “axi
5、_spi_0_MISO_pin“ LOC = “D17“ | IOSTANDARD = “LVCMOS33“;NET “axi_spi_0_SCK_pin“ LOC = “E17“ | IOSTANDARD = “LVCMOS33“;6) 创建工程过程完成后,a. 在主界面下选择 Hardware-Generate Netlist;b. 在主界面下选择 Hardware-Generate Bitstream;c. 单击 Graphical Design View,可以看到系统的连接图,如下:2. 软件平台建立(1)SDK 提供的外设驱动以及应用程序1. 点击 project-Expert Ha
6、rdware Design to SDK,点击Exportstatic XIntc IntcInstance;static XSpi SpiInstance;volatile int TransferInProgress;int Error;u8 ReadBufferBUFFER_SIZE;u8 WriteBufferBUFFER_SIZE;int main(void)int Status;Status=XSpi_Initialize(Status=XIntc_Initialize(Status=XIntc_Connect(Status=XIntc_Start(XIntc_Enable(mic
7、roblaze_register_handler(XInterruptHandler)XIntc_InterruptHandler,microblaze_enable_interrupts();XSpi_SetStatusHandler(Status = XSpi_SetOptions(Status = XSpi_SetSlaveSelect(XSpi_Start(while(1)TransferInProgress = TRUE;XSpi_Transfer(while(TransferInProgress);u16 temp;temp = ReadBuffer1 8;temp += Read
8、Buffer0;xil_printf(“adc = %dnr“, temp);int i;for(i = 0; i 5000000; i+);return XST_SUCCESS;void SpiIntrandler(void *CallBackRef, u32 StatusEvent, u32 ByteCount)TransferInProgress = FALSE;if (StatusEvent != XSP_SR_RX_EMPTY_MASK)Error+;五 实验结果和调试过程1、连接好硬件模块,并分别将 A/D 模块的 J2 插针 1 号引脚分别连接到GND 和 VCC,在调试环境下,设置断点如下图 1 所示,每次执行 RESUME之后,展开 RENDBUFFER 可以得到如下图 2 和图 3 所示结果。图 1、调试断点设置2、实验结果(1 ) Vin 连接到 3V3 时,可以看到控制台稳定输出 4095(2 ) Vin 连接到 GND 时,可以看到控制台稳定输出 0(3 )当 Vin 悬空时,可以看到控制台输出一串随机数,处于不稳定状态六 实验心得