微机原理实验预习报告串行I/O接口实验
1)理解RS232串行通信协议以及接口设计
2)理解SPI串行通信协议
3)掌握RS232串行接口设计
4)掌握SPI串行接口设计
5)掌握串行AD/DA接口设计
二实验任务
SPI接口DA转换输出锯齿波满量程下的锯齿波
硬件电路框图
软件流程图
四实现步骤
硬件实现
1、加入中断控制器和SPI总线接口
2、配置SPI接口参数,:一次传输16位数据,分频比为4,SCLK的频率为25MHz
3、端口连接配置
4、UCF配置
软件实现1、导出到SDK
2、建立一个新的空工程
3、将源码加入新的c源文件中
源代码及注释:
#include"xparameters.h"
#include"xspi.h"
#include"xintc.h"
#include"xil_exception.h"
#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 = XSpi_Initialize(&SpiInstance,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);
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_OPTION);
//设置从设备选择信号
Status = XSpi_SetSlaveSelect(&SpiInstance,1);
//使能SPI接口
XSpi_Start(&SpiInstance);
//循环输出数据到SPI接口控制DAC输出锯齿波
while(1){
WriteBuffer[0] = (u8) (Count);
//SPI输出数据的低8位
WriteBuffer[1] = (u8) (Count>>8)&0x0f;
// SPI输出数据的高8位,其中高4位清零,使得Vout正常输出电压
Count=Count+32;
if (Count==4096)
Count=0;
//12位DAC转换数据达到最大值时,恢复到0
TransferInProgress = TRUE; // 设置传输状态标志为1
XSpi_Transfer(&SpiInstance, WriteBuffer, (void*)0, 2);
//一次传输2个字节
while (TransferInProgress);
// 等待传输结束
}
return XST_SUCCESS;
}
void SpiIntrHandler(void *CallBackRef, u32 StatusEvent, u32 ByteCount)
{
TransferInProgress = FALSE;
//进入中断表示传输结束,修改传输状态标志为0
if (StatusEvent != XST_SPI_TRANSFER_DONE){
Error++;
}
}
五实验验证
观察峰峰值为3.3v左右,即为满量程的工作电压
六实验总结
1)通过实验学会了在AXI总线上连接SPI接口2)学会了并行I/O接口的设计
3)知道了波形的输出条件和量程的选择。