A-D试验报告
串行IO接口A-D试验
一、实验目的
①.理解RS232串行通信协议以及接口设计。
②.理解SPI串行通信协议。
③.掌握RS232串行接口设计。
④.掌握SPI串行接口设计。
⑤.掌握串行AD/DA接口设计。
二、实验任务
①.SPI接口DA转换输出锯齿波 。 ②.SPI接口AD转换三个电平数据,打印结果到console。 ③.全部采用中断方式。
三、硬件电路框图及实现步骤
硬件电路及AD转换模块为:
其实SPI IP核的结构为:
实验的引脚约束为:
其硬件实现步骤为,当CPOL=1,CPHA=0时,空闲时SCLK为高电平,SCLK上升沿采样数据,这是外部输入的模型信号输入到SPI总线内部,SPI将将从MISO引脚接收到的串行数据转换成并行数据,保存到SPIDRR,然后发出中断请求给中断控制器AXI INTC,中断控制器给处理器发中断请求,处理器相应中断请求开始传输,开始传输。
软件流程图为:
软件源代码为:
#include
#include
#include
#include
#define BUFFER_SIZE 2
//用户定义的SPI中断服务程序
void SpiIntrHandler(void *CallBackRef,u32 StatusEvent,u32 ByteCount);
static XIntc IntcInstance;
static XSpi SpiInstance;
volatile int TransferInProgress;//中断结束标志位
int Error;
u8 ReadBuffer[BUFFER_SIZE];
u8 WriteBuffer[BUFFER_SIZE];
int main(void)
{
int Status;
//初始化SPI设备
Status=XSpi_Initialize(&SpiInstance,XPAR_SPI_0_DEVICE_ID);
Status=XIntc_Initialize(&IntcInstance,XPAR_SPI_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);
//使能相应的SPI设备
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);
while(1){
TransferInProgress=TRUE;//设置传输状态为1
XSpi_Transfer(&SpiInstance,WriteBuffer,ReadBuffer,2);//一次传输2个字节 while(TransferInProgress);//等待传输结束
}
return XST_SUCCESS;
}
void SpiIntrHandler(void *CallBackRef,u32 StatusEvent,u32 ByteCount)
{
TransferInProgress=FALSE;//进入中断表示传输结束,修改传输状态标志为0 if(StatusEvent!=XSP_SR_RX_EMPTY_MASK){ Error++; }
}
四、实验结果及调试过程
连接好硬件模块,将AD模块的J1插针接入试验开发板的JA接口上,J2插针的1号引脚分别连接到GND和VCC,以输入0和3.3V的信号,在调试环境下设置好断电,每次执行一次resume之后,展开readbuffer可以得到传输的值,可以分别得到0x0和0xfff,即为正确的结果。
五、实验心得
这次试验使我在理论课上不甚了解的SPI IP核的工作原理有了更深的了解,对于AD和DA转换模块,也有了基本的掌握,实验的调试过程中出了许多问题,一步一步的解决,最后还是得出来正确结果,这个实验锻炼了我们的动手能力,也是对课堂的理论学习的促进。