根据给定的文件信息,我们可以总结出以下关于“AD接口与程序”的相关知识点: ### AD接口与程序概览 在本篇文章中,我们将探讨一种基于DSP2812微控制器的AD(模数转换器)接口及其编程实现。通过解析提供的代码片段,我们可以了解AD接口的工作原理、初始化过程以及中断处理程序的编写方法。 ### AD接口的基本概念 AD接口是模拟信号到数字信号转换的关键组件,在许多电子设备和系统中扮演着核心角色。对于微控制器而言,AD转换器允许它接收外部环境中的模拟信号,并将其转换为可以处理的数字数据。在本案例中,使用的DSP2812是一款高性能的数字信号处理器,内置了AD转换功能,这使得它可以方便地用于各种信号处理应用中。 ### 初始化过程 #### 初始化系统控制寄存器 初始化过程中首先涉及到的是系统控制寄存器的配置。这包括: - **InitSysCtr1()**:该函数用于初始化系统控制寄存器,确保微控制器的系统时钟和其他关键设置符合预期。 - **DINT**:禁用所有中断。 - **IER=0x0000; IFR=0X0000;**:清空中断使能寄存器和中断标志寄存器。 - **InitPieCtr1()**:初始化PIE(Peripheral Interrupt Extension)控制寄存器,扩展中断功能。 - **InitPiectTable()**:初始化PIE向量表,设置中断服务程序的地址。 - **EALLOW**:允许对受保护的寄存器进行写操作。 - **PieVectTable.ADCINT=&ad;**:将AD转换中断指向名为`ad`的中断服务程序。 - **EDIS**:禁止对受保护的寄存器进行写操作。 - **InitAdc()**:初始化AD转换器,设置转换序列等参数。 - **EINT**:使能所有中断。 - **ERTM**:使能实时中断(Debug Mode)。 #### AD转换器的初始化 初始化AD转换器是确保其能够正常工作的关键步骤之一。通过调用`InitAdc()`函数完成初始化工作,这通常涉及配置AD转换器的控制寄存器,指定转换速率、触发源、转换序列等参数。初始化完成后,可以通过循环等待AD转换器准备好进行第一次转换,如: ```c while(AdcRegs.ADC_ST_FLAG.bit.SEQ1_BSY==0) { AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; } ``` 这里的循环持续检查AD转换器的状态标志,直到转换器准备好为止。 ### 中断服务程序 中断服务程序(ISR)是处理AD转换器产生的中断的核心部分。在提供的代码中,定义了一个名为`ad`的中断服务程序: ```c interrupt void ad(void) { IFR=0X0000; PieCtrl.PIEIFR1.all=0; PieCtrl.PIEACK.all=0xffff; a2++; for(int i = 0; i < 8; i++) { a1[i]=((float)AdcRegs.RESULTi)*3.0/65520.0+adclo; } AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1; AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; EINT; } ``` 该程序主要完成了以下几个任务: - 清除中断标志。 - 计数变量`a2`递增。 - 读取AD转换器的结果,并将结果存储在一个浮点数组`a1`中。 - 对每个结果进行相应的计算(如电压转换),这一步骤通常用于将AD转换器返回的原始值转换为实际物理量,例如电压。 - 清除中断标志,准备下一次转换。 - 重新使能中断。 ### 总结 通过以上分析,我们可以看出,AD接口与程序的设计和实现涉及到多个层面的知识,包括硬件配置、中断管理、数据处理等。对于想要深入理解AD转换器及其在微控制器中应用的开发者来说,掌握这些基础知识是非常重要的。



























void _irq IRQ_AD1(void)
{
CCDBuf[AD_NUM]=AD0DR; //读取ADC结果
AD_NUM++;
VICVectADDR=0x00;//中断处理结束
}
while((IO0PIN&PWM_Sign)==0);
T0TCR=0x00;
UART0_SendByte(AD_NUM)
#include"DSP2812_Device.h"
float a1[8];
unsigned int a2=0;
float adclo=0.0;
interrupt void ad(void);
void main(void)
{
InitSysCtr1();
DINT;
IER=0x0000;
IFR=0X0000;
InitPieCtr1();
InitPiectTable();
EALLOW;//写eallow的保护寄存器
PieVectTable.ADCINT=&ad;
EDIS;//禁止写eallow保护寄存器
InitAdc();//使能全局中断和优先级实时调试事件


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


