找回密码
 注册
关于网站域名变更的通知
查看: 941|回复: 4
打印 上一主题 下一主题

TMS320F28335之ADC功能

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-12-2 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

TMS320F28335内部包含12位AD转换器,其功能有:5 T2 v+ y0 I0 Z, a. h
具有内置(采样保持)S/H的12位ADC内核
$ u5 L% B3 \. c1 ]& F' N6 L模拟输入:0.0V至3.0V(高于3.0V的电压产生满刻度转换结果)。8 ?$ L8 p7 U2 x
快速转换率:在25MHzADC时钟12.5MSPS上时高达80ns
0 o: Z! X$ c  Y! c! `5 x/ y5 O, O16个专用ADC通道。
. s/ F, Q$ K" L0 E每次采样/保持都有复用的8通道
1 |( S, A, c" h- |2 |% k自动定序功能在单次会话中可提供多达16次“自动转换”。可将每次转换编程为选择16个输入信道中的任何一个。8 \2 X$ {  E, ?6 n" ?9 d2 K4 V4 P
序列发生器可运行为2个独立的8态序列发生器,或作为1个较大的16态序列发生器(即2个级联的8态序列发生器)。1 M9 I$ R: Z1 F1 o, M! b
用于存储转换值的16个结果寄存器(可分别寻址)
- e: S) c5 x: @: J5 _8 `/ ~, `– 输入模拟电压的数值源自:5 G8 E' M: M% f' P8 _/ P
当input<0时:digital value =0;
, m; k7 U7 V) G. K当0<input<3.0时:digital value =4096*(input analog voltage-ADCLO)/3;
0 Z7 z- f' d5 N5 w, Z当input>3.0时:digital value =4095;

0 b' M5 Y+ B" G6 v
作为转换开始(SOC)序列源的多个触发器5 M2 p- w$ V9 B1 s
– S/W-软件立即启动
8 `6 \. G- t# D: d: L( h# `& |% S– ePWMM转换开始/ L1 Q* Z- v; Z2 ^2 M
– XINT2ADC转换开始
$ L+ x; [+ G+ X* c9 X灵活的中断控制允许每个序列结束(EOS) 或每个其它EOS上的中断请求。
. f1 [/ }: q% B: H! @8 F序列发生器可运行于“启/停”模式,从而实现多个“时序触发器”同步转换。
; j( C& z& j3 z! w5 D% s8 ]SOCA和SOCB触发器可独立运行在双序列发生器模式中。
  b" m5 k* H( ~采样保持(S/H)采集时间窗口具有独立的预分频控制。

要获得指定的ADC精度,正确的电路板布局非常关键。为尽可能达到最佳效果,引入ADCIN引脚的走线不应太靠近数字信号通道。这是为了最大程度地减少数字线路上因ADC输入耦合而产生的开关噪声。而且,适当的隔离技术必须被用来将数字电源从ADC模块电源引脚(VDD1A18,VDD2A18,VDDA2,VDDAIO)上隔离。

ADC未被使用,ADC连接
/ L( |% o. |9 g- t: z1 R& j建议保持针对模拟电源引脚的连接,即便在ADC未被使用时也是如此。下面总结了如果ADC未在应用中使用,应该如何连接ADC引脚:
+ z5 K3 C" X. r& w7 G- w, z( _? VDD1A18/VDD2A18-连接至VDD; ~3 T( [, i% p- a
? VDDA2,VDDAIO-连接至VDDIO
& H2 s: V5 V' @* H' t+ m8 h? VSS1AGND/VSS2AGND,VSSA2,VSSAIO-连接至VSS. R* g" r3 ^9 p! z: Z* [0 P2 m
? ADCLO-连接至VSS
, ]  e6 g2 r) x9 ]? ADCREFIN-连接至VSS8 y+ @# I1 J7 E" y' ?5 S$ A, Q
? ADCREFP/ADCREFM-连接一个100nF电容器至VSS: t* w8 d0 t4 k, t8 m9 y
? ADCRESEXT-连接一个20k?电阻器(非常松散的耐受)至VSS。
( d- b" [: [* S3 G7 c9 {? ADCINAn,ADCINBn-连接至VSS2 c( \" s7 i8 S7 u% W0 S/ c
当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开。/ h8 J9 [; F! m& z
当在一个应用中使用ADC模块时,未使用的ADC输入引脚应被连接至模拟接地(VSS1AGND/VSS2AGND)

ADC头文件与寄存器对应解读:

9 [: B+ Q& P0 J! b0 Z: y( ]/ k1 O
struct ADCTRL1_BITS {      // bits  description0 U' s* l( M8 B
    Uint16  rsvd1:4;               // 3:0   reserved5 z3 }2 w7 F1 k' p4 `$ E6 d5 V2 _
    Uint16  SEQ_CASC:1;      // 4     Cascaded sequencer mode 级联序列模式4 ~( O# p. q* Y5 M- _& n; j. a% i
    Uint16  SEQ_OVRD:1;     // 5     Sequencer override  序列发生器覆盖
% _8 `& S( ]4 v, Y/ F    Uint16  CONT_RUN:1;    // 6     Continuous run 连续运行模式
( h7 z( @. e) }5 C    Uint16  CPS:1;                // 7     ADC core clock pre-scalar ADC核心时钟分频# D0 V5 \+ n9 F1 F) L2 s& Z7 o
    Uint16  ACQ_PS:4;         // 11:8  Acquisition window size采集窗口大小
2 c5 V; M0 @' z0 O7 {    Uint16  SUSMOD:2;       // 13:12 Emulation suspend mode仿真挂起模式
- N4 A, O/ G. O) ^( o$ g    Uint16  RESET:1;          // 14    ADC reset ADC复位
. Y# {" K6 r/ M/ e+ o    Uint16  rsvd2:1;            // 15    reserved 保留
3 [6 n' h1 n# ^% s* W" T) {" k% u};1 c" k# K% \5 S5 ~! `
下面的联合体主要是为了解决对这个寄存器的控制,可以是整体赋值液可以是一位一位的赋值。
. @, o7 d% W7 Q* c' {4 U5 Uunion ADCTRL1_REG {
# [2 ^2 \4 i: J7 @   Uint16                all;+ ?- y( p0 V7 ~7 t8 P) P6 B
   struct ADCTRL1_BITS   bit;
2 w5 q& t8 o8 t- j6 t};


! @+ }8 X5 m- T+ J5 p9 {) \8 t- L! a+ Nstruct ADCTRL2_BITS {                     // bits  description8 k: e  M' p. i, O. p) ~
    Uint16  EPWM_SOCB_SEQ2:1;        // 0     EPWM compare B SOC mask for SEQ2  增强PWM比较器B作为SEQ2的启动转换标志. G9 l4 B0 u- j& x
    Uint16  rsvd1:1;                               // 1     reserved' t. ?1 |; b. s
    Uint16  INT_MOD_SEQ2:1;             // 2     SEQ2 Interrupt mode  SEQ2终端模式                 
' p  O6 G9 u  f5 X1 D    Uint16  INT_ENA_SEQ2:1;               // 3     SEQ2 Interrupt enable  SEQ2中断使能
3 m5 K) G# s- {2 q2 ^- b6 w  e    Uint16  rsvd2:1;                               // 4     reserved$ Y* Y8 m# u( }/ M/ V. S5 Y+ M$ A# o
    Uint16  SOC_SEQ2:1;                      // 5     Start of conversion for SEQ2 启动SEQ2转换3 S, F: P& x; a6 r& v0 V
    Uint16  RST_SEQ2:1;                      // 6     Reset SEQ2     SEQ2复位
7 m% D4 S- ~+ Y    Uint16  EXT_SOC_SEQ1:1;             // 7     External start of conversion for SEQ1        序列1的外部转换启动
1 \& g% a6 L" S0 t3 h    Uint16  EPWM_SOCA_SEQ1:1;       // 8     EPWM compare B SOC mask for SEQ1
4 ^: f8 C& L& n9 F    Uint16  rsvd3:1;                              // 9     reserved. c( U3 q+ s3 {: j! A# s4 p  H
    Uint16  INT_MOD_SEQ1:1;            // 10    SEQ1 Interrupt mode
/ U4 Q; A) u6 s6 z! _$ O& ?6 V3 {    Uint16  INT_ENA_SEQ1:1;             // 11    SEQ1 Interrupt enable
* V0 `! _. J. J8 r% q% Q    Uint16  rsvd4:1;                             // 12    reserved. \& F/ B, ?; k! p$ x
    Uint16  SOC_SEQ1:1;                    // 13    Start of conversion trigger for SEQ1
8 G/ U* f; _5 v) R; c* ^    Uint16  RST_SEQ1:1;                    // 14    Restart sequencer 1   4 j7 Q7 A6 u4 ]' h$ `" G
    Uint16  EPWM_SOCB_SEQ:1;       // 15    EPWM compare B SOC enable
4 H  o$ m3 h6 r) m( l};

- M' M7 G5 U6 x! f* S$ F9 N

! a$ S% `+ z. P4 N; l: Y
struct ADCASEQSR_BITS {       // bits   description
+ v$ `. Q, W' F' n9 ?( b. J6 r- S    Uint16  SEQ1_STATE:4;     // 3:0    SEQ1 state   序列1的状态$ r$ \: B. |2 }. _8 `6 M2 r3 D
    Uint16  SEQ2_STATE:3;     // 6:4    SEQ2 state   序列2的状态, D( h# P4 t6 x3 v3 I
    Uint16  rsvd1:1;          // 7      reserved" ^' r$ }1 Z% o, w7 J4 F
    Uint16  SEQ_CNTR:4;       // 11:8   Sequencing counter status   序列计数器状态  [2 p6 F% `+ j* K% W. u
    Uint16  rsvd2:4;          // 15:12  reserved  ; k. j8 C3 o$ N8 s  N
};

" m1 P' l4 c' W- Q9 z5 E

" c4 a2 |- k  ]( i0 [* e' G1 |
ADC最大转换信道数寄存器
& }2 j7 Z  G$ N3 Istruct ADCMAXCONV_BITS {      // bits  description# D% q" P( C2 R7 Z# @3 t9 e& y, t
    Uint16  MAX_CONV1:4;      // 3:0   Max number of conversions   序列1最大转换通道数! P$ t) x( e" c- i) O, ?
    Uint16  MAX_CONV2:3;      // 6:4   Max number of conversions    序列2最大转换通道数
6 O) D# h7 M  Y) `( {    Uint16  rsvd1:9;          // 15:7  reserved % t* L, l" g0 h& X
};

+ c; R5 x% \1 I
ADC信道选择排序控制寄存器
. E: O3 C" x3 K  SSEQ1只能使用ADCCHSELSEQ1和ADCCHSELSEQ2;AEQ2只能使用ADCCHSELSEQ3和ADCCHSELSEQ4
: ~; {3 }0 m) }4 Qstruct ADCCHSELSEQ1_BITS {    // bits   description! m, j( s+ B& m; R( T7 E/ P2 X# `- ^
    Uint16  CONV00:4;         // 3:0    Conversion selection 00
3 ?* j7 {  |8 ?$ C* d0 S. s    Uint16  CONV01:4;         // 7:4    Conversion selection 01- }8 f0 _) Z# a4 s% E
    Uint16  CONV02:4;         // 11:8   Conversion selection 02
0 @! p2 `7 i% C3 c% ~1 [" B, Q( k! ~    Uint16  CONV03:4;         // 15:12  Conversion selection 03) I( w1 B* N; ~; R: L8 Q
};  F$ Q8 q$ ]4 a; a4 |
struct ADCCHSELSEQ2_BITS {    // bits   description
1 R/ V0 y8 a, g: _( k" v. g0 P- b: Y' l    Uint16  CONV04:4;         // 3:0    Conversion selection 04
$ Y2 V( h8 {  h, m    Uint16  CONV05:4;         // 7:4    Conversion selection 05) t. y) T1 M' r2 m0 Z  k: H
    Uint16  CONV06:4;         // 11:8   Conversion selection 066 @* ~& @3 C# w* ?
    Uint16  CONV07:4;         // 15:12  Conversion selection 07; K5 U0 V8 C" |& A5 _3 U# I! H
};
4 Y0 {* _# J9 N! u9 ^( ~* ]9 T9 Q: dstruct ADCCHSELSEQ3_BITS {    // bits   description7 \+ v3 B  h4 H5 T6 ~0 X/ v0 A: c- F7 {
    Uint16  CONV08:4;         // 3:0    Conversion selection 086 t% u% @3 _- o6 g$ q
    Uint16  CONV09:4;         // 7:4    Conversion selection 09
( t( ~' U5 f% v' {- P( d4 W    Uint16  CONV10:4;         // 11:8   Conversion selection 10
( x' s: n& }8 u5 F    Uint16  CONV11:4;         // 15:12  Conversion selection 11
* i- F1 c) D- C, M1 J8 i};3 k. L8 b' q# G
struct ADCCHSELSEQ4_BITS {    // bits   description
5 k9 `% O% n' z. w: g    Uint16  CONV12:4;         // 3:0    Conversion selection 12
2 f3 {+ C' i. R' g7 o! e( n    Uint16  CONV13:4;         // 7:4    Conversion selection 13
% Q, j# Q1 Z: P5 B6 F- p6 Z# K    Uint16  CONV14:4;         // 11:8   Conversion selection 14
# P+ B# [8 v9 t: t) t    Uint16  CONV15:4;         // 15:12  Conversion selection 15
4 C. L: e& [& e4 O6 N5 j};


% x  v0 R2 d. s; \) s# R控制寄存器3
( \1 L( O/ Z4 f5 C! estruct ADCTRL3_BITS {         // bits   description0 z: H  V: w% C/ A+ s' ~
    Uint16   SMODE_SEL:1;     // 0      Sampling mode select  采样模式选择0 T* a0 B7 i& `. {8 c: \; y
    Uint16   ADCCLKPS:4;      // 4:1    ADC core clock divider  ADC时钟分频器! f) [: K# ^5 U( h1 P3 C7 W  ^
    Uint16   ADCPWDN:1;       // 5      ADC powerdown    ADC断电???
! t: u0 z; p& i$ B% E1 [& Q    Uint16   ADCBGRFDN:2;     // 7:6    ADC bandgap/ref power down  ADC参考/带隙断电  ???
$ B; K  J$ h/ b! d. K8 g9 y    Uint16   rsvd1:8;         // 15:8   reserved+ D( e! S0 @2 A; M, d' r
};

. ~9 r" m) @0 ^( ~
状态寄存器
: {1 |' c3 i. w) w/ Q2 Ostruct ADCST_BITS {           // bits   description1 j" t6 A8 N& L7 H, o; v
    Uint16   INT_SEQ1:1;      // 0      SEQ1 Interrupt flag   序列1中断标志  E' U+ x) Y. U; U+ j
    Uint16   INT_SEQ2:1;      // 1      SEQ2 Interrupt flag   序列2中断标志; @4 Z7 @! b' s2 z' u6 P
    Uint16   SEQ1_BSY:1;      // 2      SEQ1 busy status      序列1忙标志
8 O' B& P, o) x# W. T( o+ D    Uint16   SEQ2_BSY:1;      // 3      SEQ2 busy status     序列2忙标志" X  g  N* E  N- |. k$ {
    Uint16   INT_SEQ1_CLR:1;  // 4      SEQ1 Interrupt clear  清除序列1中断标志
, K  |$ N* ]( E    Uint16   INT_SEQ2_CLR:1;  // 5      SEQ2 Interrupt clear  清除序列2中断标志
/ W! G/ e# `1 ]% D0 j6 e8 D% G    Uint16   EOS_BUF1:1;      // 6      End of sequence buffer1   序列缓冲器1结束
# d/ R" `! S0 L3 A    Uint16   EOS_BUF2:1;      // 7      End of sequence buffer2
1 J% v' O% N; h    Uint16   rsvd1:8;         // 15:8   reserved
2 x: f% E! J- h% N* m};

, O) h; g. |6 k) P$ j

5 G" P9 e- `  z
struct ADCREFSEL_BITS {       // bits   description/ i; s, Y" C& |+ ?* U$ S4 r. h- c
Uint16   rsvd1:14;        // 13:0   reserved  9 W4 `7 e  y; d2 @7 J0 J- ?
Uint16   REF_SEL:2;       // 15:14  Reference select   参考选择???
6 t/ M0 i. D, {* \7 z# h+ R};

3 e; e+ Z+ B+ o" [: c
struct ADCOFFTRIM_BITS{       // bits   description! f* m& F9 C: t, z0 B
int16 OFFSET_TRIM:9;    // 8:0    Offset Trim   偏移微调???
& J- t) c. n/ u: {9 {: o. _! uUint16 rsvd1:7;          // 15:9   reserved  p4 i5 P( u' L9 B( J/ Z# [) R: ^
};

1 m9 J# m( [0 x, F  R) c- A
ADC寄存器
0 ^6 U. y  q5 p% a' U/ qstruct ADC_REGS {$ S2 ?4 G- c/ n4 T% L. Z
    union  ADCTRL1_REG       ADCTRL1;                   // ADC Control 1
' ]: l2 U' e; i( q( K; S    union  ADCTRL2_REG       ADCTRL2;                   // ADC Control 20 a* K( o4 a$ E$ r& J4 U, x
    union  ADCMAXCONV_REG    ADCMAXCONV;    // Max conversions
' t) S9 p: d1 W% @# w6 F    union  ADCCHSELSEQ1_REG  ADCCHSELSEQ1;  // Channel select sequencing control 1) y$ ?5 [7 P' S: W
    union  ADCCHSELSEQ2_REG  ADCCHSELSEQ2;  // Channel select sequencing control 26 c% B" m0 }3 c3 ~
    union  ADCCHSELSEQ3_REG  ADCCHSELSEQ3;  // Channel select sequencing control 3
1 K* e% T. M. u4 a! S6 I    union  ADCCHSELSEQ4_REG  ADCCHSELSEQ4;  // Channel select sequencing control 4# o5 j7 e" A5 k& F% R* q
    union  ADCASEQSR_REG       ADCASEQSR;        // Autosequence status register) p  s. g2 q3 {
    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0) V0 c( e( i  n+ K  ^: Y
    Uint16                 ADCRESULT1;    // Conversion Result Buffer 10 k( J5 T* ~4 G
    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2
8 n4 k+ c5 _/ k- u$ p: w! [    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3
- s7 a$ T  x% L" p    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
4 w# V! ^# b& d7 Q    Uint16                 ADCRESULT5;    // Conversion Result Buffer 5
- p6 d) ]. E7 w0 I6 D    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6" G5 Z9 v* u. b" F
    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
* \+ S9 E+ D  b4 p! D  ^7 E6 y    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8
+ b1 [% |2 P0 s6 w4 R    Uint16                 ADCRESULT9;    // Conversion Result Buffer 9
- z6 @4 ~. {. B    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10
* {1 F: H. p& m3 E6 k    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11
" K2 C. m+ p% T3 g$ K: I    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12
9 i6 H$ E2 K6 Y2 O% Y    Uint16                 ADCRESULT13;   // Conversion Result Buffer 135 J1 x3 v7 k; z9 B
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 141 L6 S3 N" q7 R# a0 g4 Q" \
    Uint16                 ADCRESULT15;   // Conversion Result Buffer 157 X& F4 k( K& @6 `1 S
    union  ADCTRL3_REG      ADCTRL3;       // ADC Control 3  ) s, X* D! v" W, |0 x( ?& Q/ G
    union  ADCST_REG          ADCST;         // ADC Status Register2 D& x9 o* a( `/ P8 F
    Uint16                 rsvd1;; }1 S+ F# a, K1 Y# ~) G! T
    Uint16                 rsvd2;
. D% [8 r: k% @& Z. p$ e* O    union  ADCREFSEL_REG      ADCREFSEL;      // Reference Select Register
) e* `' M9 ]+ w5 p4 w' Z; O    union  ADCOFFTRIM_REG   ADCOFFTRIM;    // Offset Trim Register
7 Q# K- Q) z. q: P- ]};0 b1 B& |1 v' H. Q1 ~" ?
struct ADC_RESULT_MIRROR_REGS. A% @/ \  B% O+ M$ e
{
) T6 c/ q* w0 e- X. H8 d    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0, e* Y& n# z& ?1 G) [
    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1! ~; p/ [8 e5 b" O- d# x
    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2* J7 u# X4 d7 }4 j0 E  J
    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3* C; D0 B* S1 D- I+ Q" x2 u
    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
  A4 O) X) W) \1 I/ J0 u& a    Uint16                 ADCRESULT5;    // Conversion Result Buffer 57 ?1 d( d+ j& k; Z
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6$ j, I+ @& `' m$ p# s2 D) F' }8 f
    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7. A9 ^* t: a$ p
    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8% ?  {  j9 k: u  n# A. h/ J; K
    Uint16                 ADCRESULT9;    // Conversion Result Buffer 9" p( L9 W6 A* h
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10
6 T- e% V, g9 p; U7 v    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11
" d' \6 j% M( z$ l* o; Q( I    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12! _" C. `1 n9 L1 f) d" E
    Uint16                 ADCRESULT13;   // Conversion Result Buffer 13) v; H  y3 b: h
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 141 A4 j  I* ^5 G* {
    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15
. o5 w# ]6 S4 C5 E};

9 ~6 N) \: i6 b, Y/ L5 W8 \$ t9 \4 I

; P9 j1 l9 x" P
ADC_Cal()常规步骤:
& Q- s5 s( v- \: J/ X2 n第一步:这个是TI公司提供的文件! J9 T) J: m" L1 T3 n/ Z! \. }3 W
.def _ADC_cal                                                      ;定义代码段名称( ~4 Q& C2 V3 C' P% C9 L1 t
.asg "0x711C", ADCREFSEL_LOC                         ;ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C
( t0 B: e3 {4 `- ].sect".adc_cal"
7 x1 M* e7 q7 W; a" O_ADC_cal
" u2 I3 A! k$ H/ T( A2 z5 cMOVW DP, #ADCREFSEL_LOC >> 6        ;此时 DP = 0x7100 - [* J4 k+ p6 a
MOV @28, #0xAAAA                                ;地址 : 0x7100 + 289 M% P/ E6 S" U
MOV @29, #0xBBBB                                 ;地址 : 0x7100 + 29
5 m' u* X2 C( f, uLRETR5 A5 d4 x7 |; W+ w
第二步:为 ADC_Cal() 添加命令文件
' M: N* D# U2 w: d  Q' W) kMEMORY2 `, U6 @' o# m$ u( @) _( Z# ?
{, p( {+ G3 [2 E3 `
PAGE 0 :) T" U  d' g# G9 ?7 o7 ]
...
0 p# D( t+ \5 ?, wADC_CAL : origin = 0x380080, length = 0x000009
6 Y3 N7 [% L* |- }! q...
0 K+ K, u; y& m' R}; o! U6 c8 }9 I! G% W
SECTIONS- a( {; S! a2 t& U0 \! M
{
. D6 A4 m3 z2 Z' ~! P...9 Q% R- Y0 v( T% R6 m
.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD
7 B% c( O; g# B: Z' N...
/ Y) }7 x, U$ G* b0 s9 {}
3 ?0 \) B5 y- J! l2 q' D第三步:在使用ADC前要声明ADC_Cal(),并且在使用ADC_Cal()之前要使能ADC高速时钟。
. h" C- c  W: a# \  Dextern void ADC_cal(void);# E7 A7 o; k& O& W/ [% H4 }
! d/ ^* G/ S+ B- j0 Q
EALLOW;                                                      //允许对受保护的寄存器进行操作. y: l+ i0 d4 L: J: _
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;  //使能时钟; e  m+ }0 O( p, x& B6 P. y8 S0 h
ADC_cal();                                                   
4 p2 ?* W: l1 W7 I  p  qSysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0;  //关闭时钟. Y8 K1 b; o3 J2 W' V
EDIS;                                                            //禁止对受保护的寄存器进行操作

" Z7 b6 w- A; L3 A% A& K# v3 T: D, J
ADC转换软件步骤:% q6 p5 a5 X1 r/ q
初始化DSP系统;  + s+ w3 r3 L# N" f6 d# }5 f1 p
设置PIE 中断矢量表,
- W# q- w2 G3 T; O. D4 y' A9 |8 ]1 ?初始化ADC模块;
. x7 k- t+ ]4 }9 |将ADC中断的入口地址装入PIE 中断矢量表中,开中断;
% r. Q9 E* W. h4 j2 [7 o6 z6 v/ K软件启动ADC转换;
4 f6 X  e/ y- ~9 O* e% Z等待ADC中断;
' y6 f- R+ {( E在ADC中断中读取ADC转换结果,软件启动下一次ADC中断。

该用户从未签到

2#
发表于 2021-12-2 13:09 | 只看该作者
每次采样/保持都有复用的8通道

该用户从未签到

3#
发表于 2021-12-2 13:09 | 只看该作者
序列发生器可运行于“启/停”模式,从而实现多个“时序触发器”同步转换

该用户从未签到

4#
发表于 2021-12-2 13:09 | 只看该作者
建议保持针对模拟电源引脚的连接

该用户从未签到

5#
发表于 2021-12-2 13:10 | 只看该作者
当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 18:40 , Processed in 0.171875 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表