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

TMS320F28335之ADC功能

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

TMS320F28335内部包含12位AD转换器,其功能有:
7 H. a, p+ p9 e& K/ M. T! H( K具有内置(采样保持)S/H的12位ADC内核# `3 o/ K, ^) k2 D9 W# a# g- c
模拟输入:0.0V至3.0V(高于3.0V的电压产生满刻度转换结果)。
: S% ^! e; s- u3 d1 q! r4 e8 ^快速转换率:在25MHzADC时钟12.5MSPS上时高达80ns
7 |8 b6 l- B; O' y( g16个专用ADC通道。
  J# `; H1 D6 g; V) N' k每次采样/保持都有复用的8通道
5 D+ g3 m) W+ E自动定序功能在单次会话中可提供多达16次“自动转换”。可将每次转换编程为选择16个输入信道中的任何一个。
# K) D7 g: V: ^& P序列发生器可运行为2个独立的8态序列发生器,或作为1个较大的16态序列发生器(即2个级联的8态序列发生器)。$ G% E3 D" u8 U% G) [
用于存储转换值的16个结果寄存器(可分别寻址)
- k. l( R. F1 K# f( }* U– 输入模拟电压的数值源自:' N' \% p1 w" p6 j+ g5 Y: u
当input<0时:digital value =0;
6 m0 T: \0 z* c3 ?% }% A当0<input<3.0时:digital value =4096*(input analog voltage-ADCLO)/3;5 @' Z6 e' u  B
当input>3.0时:digital value =4095;


2 i. R1 E! n& r% T: \; t: v7 W$ p! N作为转换开始(SOC)序列源的多个触发器' i# R: i- Y7 P8 n% A$ |0 B1 @/ J
– S/W-软件立即启动6 g& w2 H" n' n* v1 k+ M
– ePWMM转换开始& W! G2 X5 a! O$ u7 I
– XINT2ADC转换开始. k- p  s0 V) J* |9 v
灵活的中断控制允许每个序列结束(EOS) 或每个其它EOS上的中断请求。7 u# G! m& l2 w. i: O. m2 |' U/ Z
序列发生器可运行于“启/停”模式,从而实现多个“时序触发器”同步转换。) W, G3 H" d6 b8 a7 b! l
SOCA和SOCB触发器可独立运行在双序列发生器模式中。
5 b" @! ]* |) P- W: P采样保持(S/H)采集时间窗口具有独立的预分频控制。

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

ADC未被使用,ADC连接. E& c) O9 d) k+ g4 f
建议保持针对模拟电源引脚的连接,即便在ADC未被使用时也是如此。下面总结了如果ADC未在应用中使用,应该如何连接ADC引脚:
( q( _9 h7 u) i# `8 N6 v? VDD1A18/VDD2A18-连接至VDD
. I4 Z/ ~+ a4 _# a& t? VDDA2,VDDAIO-连接至VDDIO7 g5 w+ X% z( p
? VSS1AGND/VSS2AGND,VSSA2,VSSAIO-连接至VSS
+ \6 q7 A% V4 j4 v( W2 u( c? ADCLO-连接至VSS5 V# j* U9 |6 H" N
? ADCREFIN-连接至VSS
4 a) Q! D, y+ r9 o/ j* t7 _! u? ADCREFP/ADCREFM-连接一个100nF电容器至VSS5 U" M8 P) q3 t, _/ v% I( `. k
? ADCRESEXT-连接一个20k?电阻器(非常松散的耐受)至VSS。
! y3 ?8 _: f4 _) q  w7 Q$ F  V? ADCINAn,ADCINBn-连接至VSS; C' g, c: o) H1 d) Y3 |, u
当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开。; ]$ f& J" Z. L, P! |
当在一个应用中使用ADC模块时,未使用的ADC输入引脚应被连接至模拟接地(VSS1AGND/VSS2AGND)

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

" k6 Y; c! d' P0 b6 v' N
struct ADCTRL1_BITS {      // bits  description4 o. s) Y8 i6 N+ N
    Uint16  rsvd1:4;               // 3:0   reserved' _% c& {) r& \. f- [" d
    Uint16  SEQ_CASC:1;      // 4     Cascaded sequencer mode 级联序列模式
0 [9 M, w) p* I$ ?    Uint16  SEQ_OVRD:1;     // 5     Sequencer override  序列发生器覆盖5 Z! l$ j" }$ }* b* o: N4 y
    Uint16  CONT_RUN:1;    // 6     Continuous run 连续运行模式: [  M" B2 H* B
    Uint16  CPS:1;                // 7     ADC core clock pre-scalar ADC核心时钟分频
+ O! T8 D8 _0 P" ~! b6 ]    Uint16  ACQ_PS:4;         // 11:8  Acquisition window size采集窗口大小. R6 {, x! ~' ?  T( U0 ^, D- m; j! V' ]
    Uint16  SUSMOD:2;       // 13:12 Emulation suspend mode仿真挂起模式
* ?9 t8 S! Q- F2 t! k    Uint16  RESET:1;          // 14    ADC reset ADC复位2 P' h, c5 e/ c" }) E( E6 k& A
    Uint16  rsvd2:1;            // 15    reserved 保留3 q( Q! d# w3 j1 G
};0 b3 W  ^5 e% U# }2 h$ R& l
下面的联合体主要是为了解决对这个寄存器的控制,可以是整体赋值液可以是一位一位的赋值。
& j' S$ T1 B1 j4 ?4 d. Xunion ADCTRL1_REG {
( v- i* K- u7 p: [  ~: H! P   Uint16                all;9 M' d* B; S: r* n% n
   struct ADCTRL1_BITS   bit;
. E. l0 @. l7 @: w( @};


% @  l2 N9 c9 X% N& J" G' Ystruct ADCTRL2_BITS {                     // bits  description  n9 R3 s; J% c. A8 g+ b3 Q) |& T
    Uint16  EPWM_SOCB_SEQ2:1;        // 0     EPWM compare B SOC mask for SEQ2  增强PWM比较器B作为SEQ2的启动转换标志7 I4 k- n7 M2 [3 x0 d" O4 R
    Uint16  rsvd1:1;                               // 1     reserved8 ~7 S+ J' _* `: N9 K0 T0 Q2 k
    Uint16  INT_MOD_SEQ2:1;             // 2     SEQ2 Interrupt mode  SEQ2终端模式                 
; K; d7 i0 E+ u9 [2 h6 P    Uint16  INT_ENA_SEQ2:1;               // 3     SEQ2 Interrupt enable  SEQ2中断使能8 X/ M7 m/ J/ y: `, O3 b
    Uint16  rsvd2:1;                               // 4     reserved+ Z; K9 A+ l9 q8 m4 k$ J
    Uint16  SOC_SEQ2:1;                      // 5     Start of conversion for SEQ2 启动SEQ2转换" o9 d$ N+ T$ i; h% C7 F
    Uint16  RST_SEQ2:1;                      // 6     Reset SEQ2     SEQ2复位' p2 b% k7 c+ H( G2 R$ v0 l8 i
    Uint16  EXT_SOC_SEQ1:1;             // 7     External start of conversion for SEQ1        序列1的外部转换启动
; k6 ~1 }* B* ?- ?! \  _    Uint16  EPWM_SOCA_SEQ1:1;       // 8     EPWM compare B SOC mask for SEQ1" n4 h8 X, {+ V( [! U8 ^1 P
    Uint16  rsvd3:1;                              // 9     reserved% F) c  d6 d+ T5 |
    Uint16  INT_MOD_SEQ1:1;            // 10    SEQ1 Interrupt mode
0 ]$ w6 L- Z% G3 w! `    Uint16  INT_ENA_SEQ1:1;             // 11    SEQ1 Interrupt enable
; t3 ~5 |" D/ Q% o    Uint16  rsvd4:1;                             // 12    reserved
# ]+ L( ^/ C' X% z( ~    Uint16  SOC_SEQ1:1;                    // 13    Start of conversion trigger for SEQ15 |' g1 f& A6 N
    Uint16  RST_SEQ1:1;                    // 14    Restart sequencer 1   & O4 e9 C1 X3 M* v5 i! k% _, n; b
    Uint16  EPWM_SOCB_SEQ:1;       // 15    EPWM compare B SOC enable. t6 j# o0 [2 z  v* N
};

  w/ ]7 z. Z# e

$ y: G. O5 {) r0 [
struct ADCASEQSR_BITS {       // bits   description/ e$ ^7 V/ E" p$ y) M
    Uint16  SEQ1_STATE:4;     // 3:0    SEQ1 state   序列1的状态" r7 ]% L. u/ ~
    Uint16  SEQ2_STATE:3;     // 6:4    SEQ2 state   序列2的状态& k  W/ j: d( [1 a. z
    Uint16  rsvd1:1;          // 7      reserved
8 D4 U8 f. M  }! u1 S. N. @( P7 N' Z    Uint16  SEQ_CNTR:4;       // 11:8   Sequencing counter status   序列计数器状态0 \- r. h$ \. N7 Z1 f
    Uint16  rsvd2:4;          // 15:12  reserved  
9 G7 O/ u& d( s; w, u; |};

0 m0 \; q# C4 ]! Y1 q  V


7 r+ x3 U7 R* z/ g; mADC最大转换信道数寄存器+ W$ x8 r) B4 T  U7 t" S4 v
struct ADCMAXCONV_BITS {      // bits  description. V, P$ o0 g5 e# p- k3 Z
    Uint16  MAX_CONV1:4;      // 3:0   Max number of conversions   序列1最大转换通道数
5 v1 }/ m. \. F! \; V/ [% R: u' p    Uint16  MAX_CONV2:3;      // 6:4   Max number of conversions    序列2最大转换通道数% X# y, u& F% ^) M1 V5 Z: G0 W
    Uint16  rsvd1:9;          // 15:7  reserved
2 o1 S& F2 K4 {0 {};

: L' V, @: {3 N1 a
ADC信道选择排序控制寄存器8 n+ u; U' N/ }9 f# R
SEQ1只能使用ADCCHSELSEQ1和ADCCHSELSEQ2;AEQ2只能使用ADCCHSELSEQ3和ADCCHSELSEQ4
& ~7 \7 A0 |+ b' W/ ?struct ADCCHSELSEQ1_BITS {    // bits   description) r2 }) i. f3 j  o7 `& s
    Uint16  CONV00:4;         // 3:0    Conversion selection 00
. M+ r* E9 K0 K5 x  S  E    Uint16  CONV01:4;         // 7:4    Conversion selection 01% L/ [2 Y- ?" B& r
    Uint16  CONV02:4;         // 11:8   Conversion selection 02. r, U" [; I7 l* ?$ M/ N! p" \
    Uint16  CONV03:4;         // 15:12  Conversion selection 039 L6 m4 T, Z5 o
};
; `  k- c# W& Q/ a3 a: lstruct ADCCHSELSEQ2_BITS {    // bits   description) L  \, R% q5 B* a
    Uint16  CONV04:4;         // 3:0    Conversion selection 04, t4 v  r1 R. |- H+ L8 C% `. f( i
    Uint16  CONV05:4;         // 7:4    Conversion selection 058 {7 S2 ]) g* R% o8 [9 t( g$ k1 b
    Uint16  CONV06:4;         // 11:8   Conversion selection 06
- G( k6 F5 z, E4 s5 d! C    Uint16  CONV07:4;         // 15:12  Conversion selection 07
5 ~, F: x& c+ C$ h};) R4 k' E" F/ x+ H5 P3 ~
struct ADCCHSELSEQ3_BITS {    // bits   description
6 Q& \8 @) i. }9 y( C4 V    Uint16  CONV08:4;         // 3:0    Conversion selection 08
) o. b* a- a8 K, P; N    Uint16  CONV09:4;         // 7:4    Conversion selection 09
& O, @9 E* f% A& y    Uint16  CONV10:4;         // 11:8   Conversion selection 103 U. g9 F; [1 ], f' a6 |
    Uint16  CONV11:4;         // 15:12  Conversion selection 11/ c' E* A' ^2 l4 l) ]
};
! Y/ U. z5 g( cstruct ADCCHSELSEQ4_BITS {    // bits   description
/ Q% {$ j9 c. J7 C% P: t# _+ ?    Uint16  CONV12:4;         // 3:0    Conversion selection 12
! `0 |6 O5 I; B& Y9 d    Uint16  CONV13:4;         // 7:4    Conversion selection 13( c, p+ P& ^: m( W
    Uint16  CONV14:4;         // 11:8   Conversion selection 14
( Y) c8 k) x, t' i: q    Uint16  CONV15:4;         // 15:12  Conversion selection 15
# q. h8 o. w* I2 q$ J};


' o- y1 N3 I3 i8 Q2 I控制寄存器31 N& U( I5 E" v% ^( I
struct ADCTRL3_BITS {         // bits   description
- _" C% L/ y9 p# X' ^  O    Uint16   SMODE_SEL:1;     // 0      Sampling mode select  采样模式选择
& k% j' [! p/ c* k9 p$ N0 t/ R- L, r    Uint16   ADCCLKPS:4;      // 4:1    ADC core clock divider  ADC时钟分频器
- q1 `  K! T0 a* e    Uint16   ADCPWDN:1;       // 5      ADC powerdown    ADC断电???
/ P, o+ d" z3 h, i7 m    Uint16   ADCBGRFDN:2;     // 7:6    ADC bandgap/ref power down  ADC参考/带隙断电  ???
# D5 Z3 ]5 H- z    Uint16   rsvd1:8;         // 15:8   reserved9 y9 o1 h$ X8 _
};

" l: q0 ]9 a0 s3 X+ P7 C* z" t
状态寄存器
9 n2 {* \6 O( W7 h/ x' [struct ADCST_BITS {           // bits   description3 O  K; ^, c; e& ~
    Uint16   INT_SEQ1:1;      // 0      SEQ1 Interrupt flag   序列1中断标志
9 e  x5 Y% M6 @; p, u. u    Uint16   INT_SEQ2:1;      // 1      SEQ2 Interrupt flag   序列2中断标志& L1 J3 z2 U3 d4 w/ E! Q( m8 M
    Uint16   SEQ1_BSY:1;      // 2      SEQ1 busy status      序列1忙标志
( l  e5 E3 R  g0 D6 X8 G    Uint16   SEQ2_BSY:1;      // 3      SEQ2 busy status     序列2忙标志+ P" c( M5 s. b8 |3 H; A; f
    Uint16   INT_SEQ1_CLR:1;  // 4      SEQ1 Interrupt clear  清除序列1中断标志
% K* G# f3 x* v; n1 ]    Uint16   INT_SEQ2_CLR:1;  // 5      SEQ2 Interrupt clear  清除序列2中断标志
% Y7 Y* N2 f; y9 f    Uint16   EOS_BUF1:1;      // 6      End of sequence buffer1   序列缓冲器1结束
2 v8 |2 a! \  q* D    Uint16   EOS_BUF2:1;      // 7      End of sequence buffer2! ]! [, ~4 X5 C
    Uint16   rsvd1:8;         // 15:8   reserved9 u/ E! D4 I$ j4 @2 _
};

+ }: F  Y$ n" S. g

' P) U& S' c# @# _0 q6 a0 Y
struct ADCREFSEL_BITS {       // bits   description& Z" }, l6 j6 z; l8 `
Uint16   rsvd1:14;        // 13:0   reserved  
1 j/ y! a' u* e. ^" WUint16   REF_SEL:2;       // 15:14  Reference select   参考选择???
. `5 j  e9 d% k2 A" {$ a# m3 M  h8 \};


; j3 h6 w  o& O. N) P3 N, k0 Fstruct ADCOFFTRIM_BITS{       // bits   description
& e' v: _! P, ^- i( ~4 cint16 OFFSET_TRIM:9;    // 8:0    Offset Trim   偏移微调???
8 Y( T) s' M# l. a1 G$ f( K/ FUint16 rsvd1:7;          // 15:9   reserved( D- c, p" `" Z9 m& s9 J
};

9 ~2 ]/ v0 K  Y; [$ M" g
ADC寄存器9 b' `% K9 w  ?* t2 \+ @
struct ADC_REGS {+ Y, q6 x, N) [
    union  ADCTRL1_REG       ADCTRL1;                   // ADC Control 1
8 v: S( \+ y3 H2 ]8 J4 Z+ Y8 N    union  ADCTRL2_REG       ADCTRL2;                   // ADC Control 2
4 F5 v: {! B6 l4 t. J- i    union  ADCMAXCONV_REG    ADCMAXCONV;    // Max conversions; X, B" B3 H; X5 E5 _
    union  ADCCHSELSEQ1_REG  ADCCHSELSEQ1;  // Channel select sequencing control 1
2 R; O# G0 }% N, k7 G    union  ADCCHSELSEQ2_REG  ADCCHSELSEQ2;  // Channel select sequencing control 2
( @6 n( G. [# q9 g3 i% w. @7 }    union  ADCCHSELSEQ3_REG  ADCCHSELSEQ3;  // Channel select sequencing control 3
7 m% i1 }  s: k5 I- U    union  ADCCHSELSEQ4_REG  ADCCHSELSEQ4;  // Channel select sequencing control 45 q% p, k. v: T. V( W% v5 K$ p
    union  ADCASEQSR_REG       ADCASEQSR;        // Autosequence status register
  O; @' b) v: p9 D" l# {% _    Uint16                 ADCRESULT0;    // Conversion Result Buffer 00 {7 ?- N3 e/ B3 k9 ~: f* g& z# h# J. x
    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1& f6 R! q& U; N- L  [. e$ z% e
    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2
) {) Q) a2 I  a! I4 p' i$ v( d    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3$ O7 w* G' j" x$ G% N, s
    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
) F3 C4 v) Z+ W& f4 m& m- M    Uint16                 ADCRESULT5;    // Conversion Result Buffer 5! t  M9 i8 o) i$ ^4 f
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6$ ~) d0 q6 w6 p; ^8 _7 w
    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
1 z# A9 L( J3 r) o    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8$ Y  Q2 R$ c% z) e) H- h
    Uint16                 ADCRESULT9;    // Conversion Result Buffer 97 j8 v6 x" j" b
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10
, m6 d8 L/ o4 L( H$ w    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11
: @/ X% G  ~7 D! u* p- P+ Z  y    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12# ~0 ^4 F) \1 ]8 }: G
    Uint16                 ADCRESULT13;   // Conversion Result Buffer 13
% I7 E8 w9 G2 g; _6 C3 }6 k    Uint16                 ADCRESULT14;   // Conversion Result Buffer 14
& r1 W% m( Q) _7 @7 i    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15. K: L) z: E! Y0 Q5 v" V
    union  ADCTRL3_REG      ADCTRL3;       // ADC Control 3  
# d- P& m9 J/ e* q/ b: y    union  ADCST_REG          ADCST;         // ADC Status Register: I- _. m; g4 H+ O
    Uint16                 rsvd1;! M5 ?9 |* [5 Y
    Uint16                 rsvd2;
) Y$ g# p( w' Y- B* i! Q- j/ M    union  ADCREFSEL_REG      ADCREFSEL;      // Reference Select Register
8 p  {8 x9 y# G7 k    union  ADCOFFTRIM_REG   ADCOFFTRIM;    // Offset Trim Register
+ M6 O8 M  Q3 n1 S};
* g8 T) u! M0 U' Mstruct ADC_RESULT_MIRROR_REGS5 M- d( a8 R7 y" ]2 g3 v
{
% S+ i% p- O& C8 a; o" j    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0
& D* e$ I) ]6 \    Uint16                 ADCRESULT1;    // Conversion Result Buffer 17 M+ D7 ?: t/ F) {; w7 [
    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2
7 M- B; q6 T; m+ j  W    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3
! Q- b6 @% X1 ^( H8 m: V    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
* F5 e% y0 a0 U    Uint16                 ADCRESULT5;    // Conversion Result Buffer 51 ]" _" ?  y% z5 r2 |5 g+ e
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6
% d  [1 j9 x% a" s3 p6 n0 I. h    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
) {/ I4 c' z1 ^  s- ]& |% Z    Uint16                 ADCRESULT8;    // Conversion Result Buffer 89 E, A! g( F# q8 @. Q/ o
    Uint16                 ADCRESULT9;    // Conversion Result Buffer 97 e* q* Q9 U9 J7 m6 R
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10; F6 f3 |; F& I
    Uint16                 ADCRESULT11;   // Conversion Result Buffer 114 x, A3 h' a3 t! E$ z0 i
    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12
( e9 g2 B% M( m# F+ [    Uint16                 ADCRESULT13;   // Conversion Result Buffer 132 q; r) l+ f" U) X9 Y! R1 ^
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 14
" N( c) L* F% q( z    Uint16                 ADCRESULT15;   // Conversion Result Buffer 153 h9 M/ E' x2 L/ i" R- ~
};


& l2 x% u. K5 B- e/ c


* f( L3 r) ?5 t& E, @$ y, e) kADC_Cal()常规步骤:1 J4 u$ B& }; `+ v( c0 M% x, c* K
第一步:这个是TI公司提供的文件* u; O/ z4 C# _. P
.def _ADC_cal                                                      ;定义代码段名称2 v- s; J2 D% }+ n/ y' r
.asg "0x711C", ADCREFSEL_LOC                         ;ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C 9 [# V! b: N' q
.sect".adc_cal", M# S. o5 i5 T- H2 @  k
_ADC_cal
4 x6 N; b4 L5 @, M6 GMOVW DP, #ADCREFSEL_LOC >> 6        ;此时 DP = 0x7100
& K7 K& m$ \/ X3 f9 bMOV @28, #0xAAAA                                ;地址 : 0x7100 + 28. c/ F4 ?& G0 A% C# m) c
MOV @29, #0xBBBB                                 ;地址 : 0x7100 + 29
  _' i7 l- z7 \LRETR
' z4 ^" _1 t  }$ R5 J7 G5 S第二步:为 ADC_Cal() 添加命令文件
+ p% h% E. O. j) p2 x6 yMEMORY+ l5 M7 @) i1 W% g/ o( y
{
: b8 P5 Q  }& z# d; h5 s/ \PAGE 0 :
7 _0 Q5 w% \8 y" p+ L$ W$ r.../ d4 }% c8 w& J9 s7 V
ADC_CAL : origin = 0x380080, length = 0x000009
8 X3 {: p* k  y, N5 X...
4 m( S* O! L& j( @1 _( e6 _) `}
" o8 ?2 m, W; T: YSECTIONS9 G+ W0 s6 s' G3 e3 I1 x
{+ F* j( d8 Y8 C8 f
...
1 K0 B( _$ _& `. P/ K6 @.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD
6 g" Q& l  G# c- G...; s0 n8 D  m: y$ V; d5 V- b
}
- p& J1 D) n5 E: J8 }; i第三步:在使用ADC前要声明ADC_Cal(),并且在使用ADC_Cal()之前要使能ADC高速时钟。
! l7 a* @2 B( C, B& `, v! }0 m; f4 Yextern void ADC_cal(void);, x) f( }. h, S+ q9 v7 \

. p* t( k( |5 q6 J" `- a- zEALLOW;                                                      //允许对受保护的寄存器进行操作4 P( `  Z* |$ a7 p6 [
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;  //使能时钟
' S1 j$ ]" S8 d) nADC_cal();                                                   
% U' m. i9 R4 y1 |SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0;  //关闭时钟1 E% ?. n$ r3 j6 \( E
EDIS;                                                            //禁止对受保护的寄存器进行操作

" F( ^7 j6 }. E# {6 _
ADC转换软件步骤:
' T# s! E( Q2 v, {/ D初始化DSP系统;  , o. ?; L0 D" s8 l+ H, j
设置PIE 中断矢量表,
" R+ G5 {. w& E% I: [初始化ADC模块;
4 A9 t. x/ I! N7 }5 K将ADC中断的入口地址装入PIE 中断矢量表中,开中断; 0 P5 a" V  B  b7 k
软件启动ADC转换; + d5 I/ V9 V$ Y4 o( K
等待ADC中断; 6 H; B" f" U9 d' @
在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-6-23 11:25 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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