⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 dsp2407ad转换程序
💻 C
字号:
// 该程序用于进行A/D转换的演示,A/D转换的结果存于数组ADRESULT1/2中,
#include           "register.h"
int               ADRESULT1,ADRESULT2;	// 定义一个单元用于保存AD转换的结果
volatile  unsigned  int  *j,*k;	// 定义两个指针变量j,k

//  屏蔽中断子程序        
void inline disable() 
{
    asm(" setc INTM");
}
// 开总中断子程序
void inline enable()
{
    asm(" clrc INTM"); 
}
// 系统初始化子程序
void  initial()
{
   asm(" setc      SXM");	// 符号位扩展有效
   asm(" clrc     OVM");	// 累加器中结果正常溢出
   asm(" clrc      CNF");	// B0被配置为数据存储空间
   *SCSR1=0x81FE;	// CLKIN=6M,CLKOUT=4*CLKIN=24M
   *WDCR=0x0E8;	        // 不使能看门狗,因为SCSR2中的WDOVERRIDE
			// 即WD保护位复位后的缺省值为1,故可以用
	  		// 软件禁止看门狗
   *IMR=0x0003;	        //  允许INT1/2中断
   *IFR=0x0FFFF;	//  清除全部中断标志,"写1清0"
}
// AD初始化子程序
void  ADINIT()
{
   *T1CNT=0X0000;	// T1计数器清0
   *T1CON=0X570C;	// T1为连续增计数模式,128分频,且选用内部时钟源
   *T1PR=0X75;	        // 设置T1的周期寄存器
   *GPTCONA=0x100;	// T1周期中断标志触发AD转换
   //*EVAIMRA=0x80;	// 使能T1周期中断
   *EVAIFRA=0x0FFFF;	// 清除EVA中断标志,写"1"清0
   *ADCTRL1=0x2000;	// 采样时间窗口预定标位ACQ PS3-ACQ PS0为0,
		        // 转换时间预定标位CPS为0,AD为启动/停止模式
   *ADCTRL2=0x0500;	// 可以用EVA的一个事件信号触发AD转换,
	                // 且用中断模式1
   *MAXCONV=0x01;	// 2通道
   *CHSELSEQ1=0x32;	// 转换通道是1-2  
}
// 启动AD转换子程序(通过启动定时器1的方式间接启动)
void  ADSOC()
{
   *T1CON=*T1CON|0X40;	// 启动定时器1
}
// 若是其它中断则直接返回子程序
void interrupt nothing()
{
   return;
}
// AD中断服务子程序
void  interrupt  adint()
{
   asm(" clrc      SXM");	// 抑制符号位扩展
   j=RESULT0;	// 取得RESULT0的地址
   k=RESULT1;   // 取得RESULT1的地址

   ADRESULT1=*j>>6; 	// 把AD转换的结果左移6位后存入规定的数组
   ADRESULT2=*k>>6; 	// 把AD转换的结果左移6位后存入规定的数组
    
   *ADCTRL2=*ADCTRL2|0X4200;	// 复位SEQ1,且清除INT FLAG SEQ1标志写"1"清0
   *ADCTRL2=*ADCTRL2&0xDFFF;    // 清除一个悬挂的SOC请求
   *EVAIFRA=0xFFFF;	// 清除EVA中断标志,写"1"清0
   enable();	// 开总中断,因为一进入中断总中断就自动关闭了
}
void  interrupt t1int()
{ 
  ADRESULT1=0;
  ADRESULT2=0;
  *EVAIFRA=0xFFFF;	// 清除EVA中断标志,写"1"清0
   enable();	// 开总中断,因为一进入中断总中断就自动关闭了
}
 
//主程序
main()
{
   disable( );	// 禁止总中断
   initial( );	// 系统初始化
   ADINIT( );	// AD初始化子程序
   enable( ); 	// 开总中断
   ADSOC( );	// 启动AD转换  
  
   while(1)
   {
       ;
          }	// 死循环,在实际的工程应用中在此可以利用A/D转换的结果用于一些运算
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -