TI中文支持网
TI专业的中文技术问题搜集分享网站

cc2530+ADC+DMA

TI大神:

         cc2530采用ADC序列转换,ADC多次采集,将采集的数据通过DMA发送出去,请问有这方面的例程来看吗,谢谢!

gaoyang9992006:

ADC的。

/*描述:通过内部AD控制把温度信息通过串口发送给上位机,部分芯片误差较大,需要校准。手摸着芯片,温度明显变大。
**************************************/
#include <ioCC2530.h>
#include "InitUART_Timer.h"//注意在option里设置路径
#include "stdio.h"/****************************************************************温度传感器初始化函数****************************************************************/void initTempSensor(void)
{DISABLE_ALL_INTERRUPTS();//关闭所有中断InitClock();//设置系统主时钟为 32MTR0=0X01;//set '1' to connectthe temperature sensorto the SOC_ADC.ATEST=0X01;// Enablesthe temperature sensor
}/****************************************************************读取温度传感器 AD 值函数****************************************************************/float getTemperature(void){uintvalue;ADCCON3= (0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1 |= 0x30;//选择ADC的启动模式为手动ADCCON1 |= 0x40;//启动AD转化while(!(ADCCON1 & 0x80));//等待 AD 转换完成value =ADCL >> 4;//ADCL 寄存器低 2 位无效value |= (((UINT16)ADCH) << 4);return (value-1367.5)/4.5-5;//根据 AD 值,计算出实际的温度,芯片手册有错,温度系数应该是4.5 /℃//进行温度校正,这里减去5℃(不同芯片根据具体情况校正)
}/****************************************************************主函数****************************************************************/void main(void){char i;char TempValue[6];float AvgTemp;InitUART0();//初始化串口initTempSensor();//初始化 ADCwhile(1){AvgTemp = 0;for(i = 0 ; i < 64 ; i++){AvgTemp += getTemperature();AvgTemp=AvgTemp/2;//每次累加后除 2}/****温度转换成ascii码发送****/TempValue[0] = (unsigned char)(AvgTemp)/10 + 48;//十位TempValue[1] = (unsigned char)(AvgTemp)%10 + 48;//个位TempValue[2] = '.';//小数点TempValue[3] = (unsigned char)(AvgTemp*10)%10+48;//十分位TempValue[4] = (unsigned char)(AvgTemp*100)%10+48;//百分位TempValue[5] = '\0';//字符串结束符UartTX_Send_String( TempValue,6);Delayms(2000); //使用32M晶振,故这里2000约等于1S}}

killer man:

回复 gaoyang9992006:

大神:

    感谢你的解答,有没有同时具有ADC+DMA的程序?

赞(1)
未经允许不得转载:TI中文支持网 » cc2530+ADC+DMA
分享到: 更多 (0)