我是靠谱客的博主 俊秀期待,最近开发中收集的这篇文章主要介绍DSP学习笔记----片内ADC一. DSP5509A片内ADC简介二. 相关寄存器三. 使用例子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一. DSP5509A片内ADC简介

DSP内部的ADC转换速率比较低, 采样频率21.5kHz,所以只能采样一些频率较低的信号。DSP5509A内部集成10位连续逼近模式模/数转换器.

//文档: 5509 DSP Analog-to-Digital Converter (ADC) Reference Guide.pdf

 根据ADC的结构图,可以看见,ADC由时钟电路通道选择电路采样保持电路还有电子电容电路组成。

ADC 时钟 = (CPU Clock) / (CPUCLKDIV + 1)
ADC 转换时钟 = (ADC Clock) / (2 * (CONVRATEDIV + 1))     [must be less than or equal to 2 MHz]
ADC 采样保持时间 = (1 / (ADC Clock)) / (2  * (CONVRATEDIV + 1 + SAMPTIMEDIV))  [must be greater than or equal to 40 µs]
ADC 总转换时间 = (ADC 采样保持时间 ) + (13 * (ADC 转换时钟 ))

二. 相关寄存器

  • 控制寄存器(ADCCTL) 

 

15位是ADC转换开始位:0,无效; 1,开始

14~12位是模拟通道选择:000~011分别选择AIN0~AIN3,100~111表示所有通道关闭。

  • 数据寄存器(ADCDATA)

 

 15位是ADC转换标志位:0,采样数据已存在;1,正在转换中

14~12位是ADC数据选择通道:同上寄存器

11~10是保留未:0

9~0位:存放10位ADC转换结果

  • 时钟分频寄存器(ADCCLKDIV)

 

 

15~8位:0~255,采样和保持时间 分频字段

7~4位:保留

3~0位:0000~1111转换时钟分频字段

  • 时钟控制寄存器(ADCCLKCTL)

 

15~9位保留

8位是ADC的Idle(低功耗)使能位:0,ADC不能进入Idle状态;1,ADC进入Idle状态,时钟停止

7~0位是CPUCLKDIV:0~255,系统时钟分频字段

三. 使用例子

使用ADC需要进行两步配置:设置ADC采样时钟读数据

  • 设置ADC采样时钟

 ADC 时钟 = (CPU Clock) / (CPUCLKDIV + 1)
ADC 转换时钟 = (ADC Clock) / (2 * (CONVRATEDIV + 1))     [must be less than or equal to 2 MHz]
ADC 采样保持时间 = (1 / (ADC Clock)) / (2  * (CONVRATEDIV + 1 + SAMPTIMEDIV))  [must be greater than or equal to 40 µs]
ADC 总转换时间 = (ADC 采样保持时间 ) + (13 * (ADC 转换时钟 ))

  • 读数据操作

使用CSL函数ADC_setFreq()ADC_read()

 ADC_setFreq(sysclkdiv,convratediv,sampletimediv);设置系统时钟,转换时钟,采样保持时钟
 ADC_read(channel,samplestoraage,samplenumber);设置ADC转换通道,转存地址(可以用数组),转换后数据长度

#include<csl.h>
#include<csl_adc.h>
#include<stdio.h>

Uint16 samplestoraage[2]={0,0};
int sysclkdiv=2,convratediv=0,sampletimediv=79;
int counter=0,index=0;
int channel=1,samplenumber=2;
main()
{
	printf("samplestoraage[0]:%dn",samplestoraage[0]);
	printf("samplestoraage[1]:%dn",samplestoraage[1]);
	CSL_init();
	ADC_setFreq(sysclkdiv,convratediv,sampletimediv);
	ADC_read(channel,samplestoraage,samplenumber);
	printf("ADCDATA:%dn",ADCDATA);
	printf("samplestoraage[0]:%dn",samplestoraage[0]);
	printf("samplestoraage[1]:%dn",samplestoraage[1]);
	printf("n====================n");
}

====================
samplestoraage[0]:0
samplestoraage[1]:0
ADCDATA:4608
samplestoraage[0]:512
samplestoraage[1]:512

====================

PS:通道对应芯片的引脚,我的芯片只有AIN0,和AIN1. 为什么没AIN2,AIN3?

最后

以上就是俊秀期待为你收集整理的DSP学习笔记----片内ADC一. DSP5509A片内ADC简介二. 相关寄存器三. 使用例子的全部内容,希望文章能够帮你解决DSP学习笔记----片内ADC一. DSP5509A片内ADC简介二. 相关寄存器三. 使用例子所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部