LM3S ADC采样内部温度
2010-05-09 09:58
204 查看
Stellaris 系列 ARM 集成有一个 10 位的 ADC 模块,支持 8 个输入通道,以及一个内部温度传感器。ADC 模块含有一个可编程的序列发生器,可在无需控制器干涉的情况下对多个模拟输入源进行采样。每个采样序列均对完全可配置的输入源、触发事件、中断的产生和序列优先级提供灵活的编程。
在 Stellaris 系列的 ADC 模块里,附带了一个内置的温度传感器,能够随时检测芯片的温度。该温度传感器可以有以下用途:
测试用:在单独测试 ADC 模块的功能时,而不必提供外部的模拟信号源
测量芯片自身温度,防止可能出现的过温(高温应用场合必备)
估算环境温度:芯片温度总是比环境温度略高,如果通过实验找到这个差值,则可以进行软件修正
在随机算法里可以提供随机数种子
/*
*********************************************************************************************************
* LM3SXXX
* The Real-Time Kernel
* Paul of OgawaStudio
* Version : V1.0
*Description : ADC操作
*function : ADC操作
* : 适用芯片LM3S615(目前只用到615中,其余没有测试。。。)
* Note(s) : 最后修改日期 2010-5-5
* : Copyright @ 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,~((151040UL-255*x)/1024));
GPIOPinWrite(GPIO_PORTA_BASE,0xff,~((151040UL-255*x)%1024/102));
SysCtlDelay(Sysclk/100);
}
}
/*! @ void init()
********************************************************************************
函数名 : void init()
功能 : init the dev.
参数 : void
作者 : paulhyde
*******************************************************************************/
void init()
{
SysCtlLDOSet(SYSCTL_LDO_2_75V);
SysCtlClockSet(SYSCTL_XTAL_6MHZ | SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN ); //The crystal is 20 MHz
// SysCtlClockSet(SYSCTL_XTAL_16MHZ);
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);
ADCHardwareOversampleConfigure(ADC_BASE,16);
ADCSequenceStepConfigure(ADC_BASE,0,0,ADC_CTL_END | ADC_CTL_TS | 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);
}
可以的话顶起哇......
在 Stellaris 系列的 ADC 模块里,附带了一个内置的温度传感器,能够随时检测芯片的温度。该温度传感器可以有以下用途:
测试用:在单独测试 ADC 模块的功能时,而不必提供外部的模拟信号源
测量芯片自身温度,防止可能出现的过温(高温应用场合必备)
估算环境温度:芯片温度总是比环境温度略高,如果通过实验找到这个差值,则可以进行软件修正
在随机算法里可以提供随机数种子
/*
*********************************************************************************************************
* LM3SXXX
* The Real-Time Kernel
* Paul of OgawaStudio
* Version : V1.0
*Description : ADC操作
*function : ADC操作
* : 适用芯片LM3S615(目前只用到615中,其余没有测试。。。)
* Note(s) : 最后修改日期 2010-5-5
* : Copyright @ 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,~((151040UL-255*x)/1024));
GPIOPinWrite(GPIO_PORTA_BASE,0xff,~((151040UL-255*x)%1024/102));
SysCtlDelay(Sysclk/100);
}
}
/*! @ void init()
********************************************************************************
函数名 : void init()
功能 : init the dev.
参数 : void
作者 : paulhyde
*******************************************************************************/
void init()
{
SysCtlLDOSet(SYSCTL_LDO_2_75V);
SysCtlClockSet(SYSCTL_XTAL_6MHZ | SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN ); //The crystal is 20 MHz
// SysCtlClockSet(SYSCTL_XTAL_16MHZ);
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);
ADCHardwareOversampleConfigure(ADC_BASE,16);
ADCSequenceStepConfigure(ADC_BASE,0,0,ADC_CTL_END | ADC_CTL_TS | 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);
}
可以的话顶起哇......
相关文章推荐
- stm32f207的外部ADC/内部温度传感芯片的多通道ADC采样配置说明
- STM32F4 ADC之内部温度传感器【库函数操作】
- 内部温度传感器(ADC采集)
- cortex_m3_stm32嵌入式学习笔记(十七):内部温度传感器(ADC采集)
- STM32的ADC及内部温度传感器的使用
- ADC1多通道_DMA_内部温度传感器+内部VREFINT
- STM32中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
- STM32F4 ADC之内部温度传感器【库函数操作】
- zigbee学习之ADC采集芯片内部的温度
- Zigbee之旅(六):几个重要的CC2430基础实验——ADC单次采样(转)
- 基于STM32 8通道ADC采样实现源代码(转) 以后设计参考使用
- Hi3518EV200平台ADC多通道采样
- STM32——ADC采样时间、采样周期、采样频率计算方法
- ESAYARM1138定时、中断、ADC(温度传感器)的综合应用
- 利用STM32F103R8T6内部的温度传感器测量单片机的温度
- 经典_STM32_ADC多通道采样
- STM32之ADC_3(内部通道)
- STM32+DMA+UART+ADC+内部温度传感器
- STM32F0系列用timer控制ADC采样,然后DMA传输到Memory或者DAC
- 从LM3S到LM4F TM4C ARM Cortex-M4 : LM3S的ADC的测试