原创 LM3S ADC使用

2010-5-9 08:28 4866 5 5 分类: MCU/ 嵌入式

LM3S ADC使用


这是我个人以前的调试经验.....


Stellaris 系列 ARM 集成有一个 10 位的 ADC 模块,支持 8 个输入通道,以及一个内部温度传感器。ADC 模块含有一个可编程的序列发生器,可在无需控制器干涉的情况下对多个模拟输入源进行采样。每个采样序列均对完全可配置的输入源、触发事件、中断的产生和序列优先级提供灵活的编程。


 
Stellaris系列ARM 的 ADC 模块提供系列特性:
8 个模拟输入通道
单端和差分输入配置
内部温度传感器
高达 1Msps(每秒采样一百万次)的采样率
4个可编程的采样转换序列, 入口长度1到8, 每个序列均带有相应的转换结果FIFO
灵活的触发控制:处理器(软件) 、定时器、模拟比较器、PWM、GPIO
硬件可对多达 64 个采样值进行平均计算(牺牲速度换取精度)
转换器采用内部的 3V参考电压
分开的模拟电源和模拟地,跟数字电源和数字地分离


为了让速度更快可以用外部晶振,也可以用PLL倍频到200M(400M),再分频到50M,在倍频之前,最好将LDO的电压设置为2.75V,不然会不稳定......


以下是我以前写的一个程序:


/*
*********************************************************************************************************
*                                                LM3SXXX
*                                          The Real-Time Kernel
*                                          Paul of  OgawaStudio 
* Version    : V1.0
*Description : ADC操作
*function    : ADC操作
*               : 适用芯片LM3S615(目前只用到615中,其余没有测试。。。)
* Note(s)    : 最后修改日期 2010-5-5
*               : Copyleft @ 2010
*             : at 2010-5-5
*********************************************************************************************************
*/
#include<lm3sxxx.h>


/*! @ define
********************************************************************************
函数名   : define  
功能     : define some values,variable and so on
参数     : define
作者     : paulhyde
*******************************************************************************/
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long


ulong x;
ulong Sysclk;


void init(void );
    
/*! @ main
********************************************************************************
函数名   : int main(void) 
功能     : 主函数
参数     : void
作者     : paulhyde
*******************************************************************************/


int main()
{
 init();
 while(1)
 {
  ADCProcessorTrigger(ADC_BASE,0);
  GPIOPinWrite(GPIO_PORTA_BASE,0xff,~(x>>4));
  SysCtlDelay(Sysclk/1000);
 } 
}


    
/*! @ void init()
********************************************************************************
函数名   : void init() 
功能     : init the dev.
参数     : void
作者     : paulhyde
*******************************************************************************/
void init()
{
 SysCtlLDOSet(SYSCTL_LDO_2_75V);         //提升LDO内核电压
 SysCtlClockSet(SYSCTL_XTAL_6MHZ | SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL  | SYSCTL_OSC_MAIN ); // crystal is  200M/10=20M


 Sysclk=SysCtlClockGet();


 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // GPIO A,用于显示数字
 GPIODirModeSet(GPIO_PORTA_BASE,0XFF,GPIO_DIR_MODE_OUT); //OUT MODE



 SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); //ADC
 SysCtlPeripheralEnable(SYSCTL_ADCSPEED_1MSPS);
 ADCSequenceDisable(ADC_BASE,0);
 ADCSequenceConfigure(ADC_BASE,0,ADC_TRIGGER_PROCESSOR,0);
 ADCSequenceStepConfigure(ADC_BASE,0,0,ADC_CTL_END | ADC_CTL_CH0 | ADC_CTL_IE);


 ADCIntEnable(ADC_BASE,0);
 IntEnable(INT_ADC0);
 IntMasterEnable();


 ADCSequenceEnable(ADC_BASE,0);
}


void ADCinit()
{
 ADCIntClear(ADC_BASE,0);
 ADCSequenceDataGet(ADC_BASE,0,&x);
}


 


如果觉的可以话,帮我顶起哇.......

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条