TI大神:
cc2530采用ADC序列转换,ADC多次采集,将采集的数据通过DMA发送出去,请问有这方面的例程来看吗,谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
TI大神:
cc2530采用ADC序列转换,ADC多次采集,将采集的数据通过DMA发送出去,请问有这方面的例程来看吗,谢谢!
ADC的。
/*描述:通过内部AD控制把温度信息通过
串口发送给上位机,部分芯片误差
较大,需要校准。手摸着芯片,温度
明显变大。
**************************************/
#include <ioCC2530.h>
#include "InitUART_Timer.h" //注意在option里设置路径
#include "stdio.h"
/****************************************************************
温度传感器初始化函数
****************************************************************/
void initTempSensor(void)
{
DISABLE_ALL_INTERRUPTS(); //关闭所有中断
InitClock(); //设置系统主时钟为 32M
TR0=0X01; //set '1' to connectthe temperature sensorto the SOC_ADC.
ATEST=0X01; // Enablesthe temperature sensor
}
/****************************************************************
读取温度传感器 AD 值函数
****************************************************************/
float getTemperature(void){
uint value;
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(); //初始化 ADC
while(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
}
}大神:
感谢你的解答,有没有同时具有ADC+DMA的程序?