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

📄 adc.c

📁 实现在TMS320LF2407A的AD模块一路采样32个点
💻 C
字号:
// 该程序用于进行A/D转换的演示,A/D转换的结果存于数足indatr[N]
//  
#include      "register.h"
#define  N  32
#define  M  5
int            indatr[N];	// 定义一个数组用于保存AD转换的结果
volatile  unsigned  int  j;	// 定义一个指针变量j
int       k=0,m=0;
//  屏蔽中断子程序        
void inline disable() 
{
    asm(" setc INTM");
}
// 开总中断子程序
void inline enable()
{
    asm(" clrc INTM"); 
}
// 系统初始化子程序
void  systeminit()
{
   asm(" setc      SXM");	// 符号位扩展有效
   asm(" clrc     OVM");	// 累加器中结果正常溢出
   asm(" clrc      CNF");	// B0被配置为数据存储空间
   SCSR1=0x81FE;	// CLKIN=6M,CLKOUT=4CLKIN=24M
   WDCR=0x0E8;	// 不使能看门狗,因为SCSR2中的WDOVERRIDE
			// 即WD保护位复位后的缺省值为1,故可以用
	  		// 软件禁止看门狗
   IMR=0x0020;	//  允许INT6中断
   IFR=0x0FFFF;	//  清除全部中断标志,"写1清0"
}
// AD初始化子程序
void  adinit()
{
   T1CNT=0x0000;	// T1计数器清0
   T1CON=0x144C;	// T1为连续增计数模式,16分频,且选用内部时钟源
                        //使能定时器操作
   T1PR=0x75;	// 设置T1的周期寄存器
   GPTCONA=0x0100;	// T1周期中断标志触发AD转换
   EVAIFRA=0x0FFFF;	// 清除EVA中断标志,写"1"清0
   ADCTRL1=0x4060;	// 连续转换,低优先级
		
   ADCTRL2=0x4500;	// 可以用EVA的一个事件信号触发AD转换
	// 且用中断模式1
   MAXCONV=0x0;	       // 1通道
   CHSELSEQ1=0x0;       // 转换通道是1
   	  
}

// 若是其它中断则直接返回子程序
void interrupt nothing()
{
   return;
}
// AD中断服务子程序
void  interrupt  ADCINT()
{
   asm(" clrc      SXM");	// 抑制符号位扩展
   j=RESULT0;	// 取得RESULT0的地址
   indatr[k++]=j>>6;   //右移6位

   ADCTRL2=ADCTRL2|0x4200;	// 复位SEQ1,且清除INT FLAG SEQ1标志写"1"清0
   enable();	// 开总中断,因为一进入中断总中断就自动关闭了
}
main()
{
   disable( );   	// 禁止总中断
   systeminit( );	// 系统初始化
   adinit( );	   // AD初始化子程序
   enable( );   	// 开总中断
   
   while(1)
   {
      if(k==N)   break; 	// 如果已发生中断,则停止等待(发生中断后,i=0x10)
   }	// 等待中断发生
   T1CON=T1CON&0x0FFBF;	// 停止定时器1,即间接停止A/D转换
   m=m+1;
}

⌨️ 快捷键说明

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