TC1767 ADC模块学习资料自做Word文件下载.docx
《TC1767 ADC模块学习资料自做Word文件下载.docx》由会员分享,可在线阅读,更多相关《TC1767 ADC模块学习资料自做Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。
--一个标准的参考输入VAREF和一个可替代的参考输入CH0
每一个ADC内核包含如下模块:
模数转换器、转换控制单元、请求控制单元、结果处理单元和中断产生单元。
转换请求单元:
包含5个独立的请求源,用来触发AD转换的开始。
可以通过不同的事件触发这5个请求源。
所以,同一时间内,可能会有两个或多个请求源挂起。
这就需要仲裁模块来裁决。
请求源0(1阶连续源):
请求源1和3(16通道扫描源):
请求源2和4(4阶连续源):
2、ADC模块的工作原理
时钟原理:
模拟时钟fADCI用作内部时钟,定义转换精度和采样事件,通过GLOBCTR.DIVA来设定。
数字时钟fADCD用作仲裁时钟,定义仲裁循环的持续时间。
通过GLOBCTR.DIVD来设定。
2.1、扫描请求源的处理
一个扫描请求源能够为多达16个输入通道的序列产生转换请求。
每次都从序号最高的通道开始转换。
一个扫描请求源执行以下操作:
转换请求控制:
定义那个模拟输入通道参加扫描转换,通过CRCR1,CRCR3设定。
转换请求挂起、转换请求处理、请求源仲裁和Triggerandgating信号处理。
2.2、顺序请求源的处理
已经编程好的序列存储在一个队列缓冲器中(FIFO)
2.3、转换结果的处理
包含转换结果的存储、Wait-for-read模式、结果事件中断、结果FIFO缓冲器和数据精简滤波器。
转换结果的存储:
根据不同的转换结果处理机理,转换结果可以用不同的方式表示:
禁止数据精简滤波器时:
转换结果最多12位宽度,最高位一直处于11的位置,其他没有用的的低位用0填补。
使能数据精简滤波器时:
额外的位[13:
12]表示数据累加的最高有效位。
3、ADC模块的应用
3.1、工程设置
opensautomaticallyGeneral
SystemClock:
InterruptSystem:
3.2、ADC模块设置
ModuleClock:
ClickontheADC0module:
Channel0—Channel15
Scan:
ResultRegister:
Functions:
Save(FileSave)thisDAvEfilein:
D:
\TC1767\ADC\ADC.dav
LetDAvEnowgeneratethecodeforyou
GotoFileGenerateCodeorclick
:
3.3、TASKING设置
3.3.1、StartTASKINGVX-toolsetforTriCoreandPCPv3.5r1
CreateNewProject
ClickonFileNew
Select`TaskingVX-toolsetforTricoreC/C++Project`
3.3.2、CreateProjectname`ADC`
Select‘Usedefaultlocation’
Select‘Emptyproject’
Click‘Next’
3.3.3、TricoreProjectSettings
Click“AUDOFutureFamily”andselect“TC1767”
Enable“Cstartupcode”,”Linkerscriptfile”and“synchronizaqtionfile”
3.3.4、SetTargetBoardConfiguration
Clickon
Select`InfineonEasyKitTC1767`
Select`DASoveron-boardUSBwiggler`
Select`SingleChip`andSelect`TC1767`andDisable“UpdateStartupCode”
3.3.5、SetProjectProperties
Clickon`Project`and`Properties`
Click`Setting`and`Preprocessing`
Disable`Automaticinclusionof.sfrfile`
3.3.6、Settheformatforoutput
Clickon`linker`
Click`outputformat`
Enable`GenerateIntelHexformatfile`
3.4、软件程序
Completegeneratecode
Onthefollowingslidespleasefindthecodeyouhavetoaddtothegeneratedcode.Forreasonsoforientationyouwillalwaysfindafewlinesofalreadyexistingcodeaswell.Thecodeyoureallyhavetoaddlookslikethis:
Edit`main.c`-function`main`(almostattheend)
//USERCODEBEGIN(Main,7)
intAnalog_Ch0;
ADC0_CRCR1=0x00000001;
ADC0_vSetLoadEvent_SOURCE_1;
while
(1)
{
if(ADC0_RESR0&
0x80000000)
Analog_Ch0=ADC0_RESR0&
0x00000fff;
if(Analog_Ch0>
0xAFF)
IO_vSetPin(IO_P5_0);
}
if(Analog_Ch0<
0x2FF)
IO_vResetPin(IO_P5_0);
};
//USERCODEEND
Buildtheproject:
GotoProjectBuildProjectorclickthe`Rebuild`button:
Startthedebugger:
PresstheblueresetbuttonontheStar-kit.
InTasking,startthedebugger:
GotoRunDebugorclickthe`Debug`button:
Starttheprogram:
GotoRunRunorclickthe`Run`button: