一. 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]:%d\n",samplestoraage[0]);
printf("samplestoraage[1]:%d\n",samplestoraage[1]);
CSL_init();
ADC_setFreq(sysclkdiv,convratediv,sampletimediv);
ADC_read(channel,samplestoraage,samplenumber);
printf("ADCDATA:%d\n",ADCDATA);
printf("samplestoraage[0]:%d\n",samplestoraage[0]);
printf("samplestoraage[1]:%d\n",samplestoraage[1]);
printf("\n====================\n");
}
====================
samplestoraage[0]:0
samplestoraage[1]:0
ADCDATA:4608
samplestoraage[0]:512
samplestoraage[1]:512
====================
PS:通道對應芯片的引腳,我的芯片只有AIN0,和AIN1. 爲什麼沒AIN2,AIN3?