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

TMS320F28335之ADC功能

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

TMS320F28335内部包含12位AD转换器,其功能有:
1 e4 |8 X/ g, b具有内置(采样保持)S/H的12位ADC内核
+ ]. o  ~+ W* X  H! Q* r2 B9 @模拟输入:0.0V至3.0V(高于3.0V的电压产生满刻度转换结果)。
( u6 n+ H! y' w7 |快速转换率:在25MHzADC时钟12.5MSPS上时高达80ns! J- Z$ z- W2 Z2 D1 o0 F) {
16个专用ADC通道。8 {" A! s& H. b: V$ v7 i4 a% k
每次采样/保持都有复用的8通道  f( j) X& M- t
自动定序功能在单次会话中可提供多达16次“自动转换”。可将每次转换编程为选择16个输入信道中的任何一个。
& _3 E  I( e$ w: j) S/ f8 i$ P序列发生器可运行为2个独立的8态序列发生器,或作为1个较大的16态序列发生器(即2个级联的8态序列发生器)。
% j- C9 v3 a3 ]+ N& B, f用于存储转换值的16个结果寄存器(可分别寻址)
& B$ @8 ~) u3 O5 w' a/ w( K% T– 输入模拟电压的数值源自:' a# |, v& b& P1 ?( I
当input<0时:digital value =0;
# E* p" J7 Y- {9 ~0 U) n当0<input<3.0时:digital value =4096*(input analog voltage-ADCLO)/3;
5 P$ f7 T4 `, H9 }+ @6 p当input>3.0时:digital value =4095;


2 E* F2 E# ]7 {' d作为转换开始(SOC)序列源的多个触发器
, \2 U0 }1 M; A' h– S/W-软件立即启动  o: s6 Y4 {. f3 I+ m3 O
– ePWMM转换开始& w  q5 t# B# e9 u+ A  h
– XINT2ADC转换开始
1 r  m; _) l4 _; e* Z6 Y$ x灵活的中断控制允许每个序列结束(EOS) 或每个其它EOS上的中断请求。
7 s9 |8 R: g, m. l' y& A5 G9 q序列发生器可运行于“启/停”模式,从而实现多个“时序触发器”同步转换。4 t. c) J. W& ^6 D. \; k3 e
SOCA和SOCB触发器可独立运行在双序列发生器模式中。
! y' U2 F4 g" ^0 t4 o5 g' D$ o采样保持(S/H)采集时间窗口具有独立的预分频控制。

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

ADC未被使用,ADC连接% @4 ^" n- K2 _0 D) _
建议保持针对模拟电源引脚的连接,即便在ADC未被使用时也是如此。下面总结了如果ADC未在应用中使用,应该如何连接ADC引脚:
( x2 V+ I" B% B0 Q1 {5 Q4 z? VDD1A18/VDD2A18-连接至VDD
* S- a+ A" q  G; K$ D- h+ L; W& h? VDDA2,VDDAIO-连接至VDDIO0 K0 d. S9 _/ C9 z  y& n
? VSS1AGND/VSS2AGND,VSSA2,VSSAIO-连接至VSS- E4 I! v5 |+ y* ?7 _& }
? ADCLO-连接至VSS1 E/ t3 _) E, j3 c
? ADCREFIN-连接至VSS
5 h  Y7 N- \( w0 s? ADCREFP/ADCREFM-连接一个100nF电容器至VSS
8 H7 D- g! O( T1 D4 u4 c; w? ADCRESEXT-连接一个20k?电阻器(非常松散的耐受)至VSS。
* s# k, v. o- h2 e' A6 H. y  ]? ADCINAn,ADCINBn-连接至VSS
& n# I2 I3 c5 P; A" a当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开。
. L# o- J9 ]1 E% S当在一个应用中使用ADC模块时,未使用的ADC输入引脚应被连接至模拟接地(VSS1AGND/VSS2AGND)

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


9 w! j" S+ w9 m3 k; w+ _struct ADCTRL1_BITS {      // bits  description
# J3 o; M8 d% o. _2 i: Z, H4 k1 R( S/ D    Uint16  rsvd1:4;               // 3:0   reserved; Z) w( i8 {0 F
    Uint16  SEQ_CASC:1;      // 4     Cascaded sequencer mode 级联序列模式7 C* C" V% O$ j4 k3 f& C8 F
    Uint16  SEQ_OVRD:1;     // 5     Sequencer override  序列发生器覆盖) t( ~! B) F( A: G
    Uint16  CONT_RUN:1;    // 6     Continuous run 连续运行模式8 m0 q" T* g8 v( n- Z% F. e
    Uint16  CPS:1;                // 7     ADC core clock pre-scalar ADC核心时钟分频" y* V- V: Q3 `6 X1 ^5 B$ `, v
    Uint16  ACQ_PS:4;         // 11:8  Acquisition window size采集窗口大小
& N0 p3 B. t: H, [3 C/ K    Uint16  SUSMOD:2;       // 13:12 Emulation suspend mode仿真挂起模式
# N$ v2 E" v9 X6 y7 {    Uint16  RESET:1;          // 14    ADC reset ADC复位! a- A9 e" m) O8 W( G* b
    Uint16  rsvd2:1;            // 15    reserved 保留
: Y( T7 d- Q* `  c% k};, n2 x/ v0 o+ `# G, q! K: E# V+ X! I
下面的联合体主要是为了解决对这个寄存器的控制,可以是整体赋值液可以是一位一位的赋值。5 U9 q7 k) l4 R3 U  d
union ADCTRL1_REG {
% r$ w; S. B/ G9 u* H/ I/ H+ z   Uint16                all;3 l7 e1 m" F8 e  ~
   struct ADCTRL1_BITS   bit;0 S6 h4 F8 Y8 x. k9 c8 L
};


8 [5 K: }$ \+ L0 b0 Z* g, f9 Jstruct ADCTRL2_BITS {                     // bits  description
: h/ R& y  C: D& F    Uint16  EPWM_SOCB_SEQ2:1;        // 0     EPWM compare B SOC mask for SEQ2  增强PWM比较器B作为SEQ2的启动转换标志
2 d- S& D/ a( c9 ~    Uint16  rsvd1:1;                               // 1     reserved8 b) w( O. I2 x" e
    Uint16  INT_MOD_SEQ2:1;             // 2     SEQ2 Interrupt mode  SEQ2终端模式                 
8 [5 ~3 A1 t& c/ e/ L8 r    Uint16  INT_ENA_SEQ2:1;               // 3     SEQ2 Interrupt enable  SEQ2中断使能
9 H2 s; Q+ |% {2 H    Uint16  rsvd2:1;                               // 4     reserved
# m- P4 i# p# D( G, ^5 D5 i) R    Uint16  SOC_SEQ2:1;                      // 5     Start of conversion for SEQ2 启动SEQ2转换
! M8 `9 k% G5 D1 i+ c/ z    Uint16  RST_SEQ2:1;                      // 6     Reset SEQ2     SEQ2复位$ Q) f, p& s+ Y" \+ j1 `
    Uint16  EXT_SOC_SEQ1:1;             // 7     External start of conversion for SEQ1        序列1的外部转换启动
5 `2 u1 a) `6 Y# ]3 c    Uint16  EPWM_SOCA_SEQ1:1;       // 8     EPWM compare B SOC mask for SEQ1
3 z# P9 @) w  L/ Y    Uint16  rsvd3:1;                              // 9     reserved# Q/ f8 V+ u- U  m! N; A1 D
    Uint16  INT_MOD_SEQ1:1;            // 10    SEQ1 Interrupt mode
9 q, I; I  ?- c( w, [    Uint16  INT_ENA_SEQ1:1;             // 11    SEQ1 Interrupt enable
! G/ k; R$ N) n' D8 M* V    Uint16  rsvd4:1;                             // 12    reserved" G2 j3 g/ a* o2 G6 U' e
    Uint16  SOC_SEQ1:1;                    // 13    Start of conversion trigger for SEQ1" O: z) z# b$ w) n- `
    Uint16  RST_SEQ1:1;                    // 14    Restart sequencer 1   * a# `! m; d) U3 C
    Uint16  EPWM_SOCB_SEQ:1;       // 15    EPWM compare B SOC enable
8 ~; l& e6 n( G( o};

. l% B( u+ v* g) s

; O' L. w; u; U# m: J7 Z: T1 \; \
struct ADCASEQSR_BITS {       // bits   description
& J2 \; d! D% Y1 S; ^    Uint16  SEQ1_STATE:4;     // 3:0    SEQ1 state   序列1的状态
& L! z" a. B- Q. f1 B' ^5 E4 p, b    Uint16  SEQ2_STATE:3;     // 6:4    SEQ2 state   序列2的状态5 h1 Z; a/ j- c& K0 \+ _- g$ t
    Uint16  rsvd1:1;          // 7      reserved
2 A2 g6 r; k  B" z0 G/ K" K    Uint16  SEQ_CNTR:4;       // 11:8   Sequencing counter status   序列计数器状态
) g9 I# A# j' F+ H; \    Uint16  rsvd2:4;          // 15:12  reserved  6 n/ ?8 x* ~. {. n0 {( |& Q3 n
};

' N# C$ B5 R* z( S: ]7 `9 N


2 i  L. d; R5 L* k1 a$ _6 J& PADC最大转换信道数寄存器
/ X9 ]4 y. Y  @% N& C7 m3 R3 M3 ystruct ADCMAXCONV_BITS {      // bits  description  L3 R9 F4 s6 T, }& v, S8 t% T1 j
    Uint16  MAX_CONV1:4;      // 3:0   Max number of conversions   序列1最大转换通道数! }& x7 N8 L; {% C7 _% y
    Uint16  MAX_CONV2:3;      // 6:4   Max number of conversions    序列2最大转换通道数! M- ~5 f+ ~; h& r/ `  v
    Uint16  rsvd1:9;          // 15:7  reserved
9 B& s2 f- t6 p/ D};


  G0 v) i9 G9 G+ U5 P+ t- Q+ YADC信道选择排序控制寄存器
/ w  O/ X( o' S& t! h# FSEQ1只能使用ADCCHSELSEQ1和ADCCHSELSEQ2;AEQ2只能使用ADCCHSELSEQ3和ADCCHSELSEQ4
1 f) W' E* S" v7 E" X) v7 b7 `/ o+ \struct ADCCHSELSEQ1_BITS {    // bits   description4 I1 L3 t5 e8 R+ n. Z9 j
    Uint16  CONV00:4;         // 3:0    Conversion selection 009 ]/ f2 h9 k* J" o
    Uint16  CONV01:4;         // 7:4    Conversion selection 01
" E% Y" ^9 |( u. C& z- D- i    Uint16  CONV02:4;         // 11:8   Conversion selection 02
& K3 W: F, _9 ~1 e    Uint16  CONV03:4;         // 15:12  Conversion selection 03  p% L  G3 \+ L5 Q
};
$ r' v. n- g5 Q4 T% [  G# lstruct ADCCHSELSEQ2_BITS {    // bits   description
# i8 U$ u  l! O6 T/ W    Uint16  CONV04:4;         // 3:0    Conversion selection 048 q1 W$ Z$ I/ k0 }( |7 m7 u
    Uint16  CONV05:4;         // 7:4    Conversion selection 05  ?0 f# w+ H% M, i
    Uint16  CONV06:4;         // 11:8   Conversion selection 06
2 }6 F4 b8 T# W6 k& U9 K( S    Uint16  CONV07:4;         // 15:12  Conversion selection 073 Y. Y& f) C8 k2 `6 S  }. a) J
};9 [1 x$ r7 \7 @. l: P* Y! ?+ x4 s
struct ADCCHSELSEQ3_BITS {    // bits   description. ]5 o/ j0 y8 l' v' s7 B. e
    Uint16  CONV08:4;         // 3:0    Conversion selection 08  f3 C( Z! Y: z3 Z, Z
    Uint16  CONV09:4;         // 7:4    Conversion selection 09: H: {: y  P" R: K) s- M
    Uint16  CONV10:4;         // 11:8   Conversion selection 10/ s+ p' l3 q8 F9 V0 ^6 i2 x
    Uint16  CONV11:4;         // 15:12  Conversion selection 11
- |) u1 f  [5 |$ s: E8 S3 I) H9 L};
) ]6 V3 I: o4 ]6 v7 b% H: B7 V# Ostruct ADCCHSELSEQ4_BITS {    // bits   description' C: w* X/ A2 S0 X6 E! r3 v
    Uint16  CONV12:4;         // 3:0    Conversion selection 126 ]2 ?, r5 M' M
    Uint16  CONV13:4;         // 7:4    Conversion selection 13
; Y( g& s- C& `& R' U" t1 c    Uint16  CONV14:4;         // 11:8   Conversion selection 14" N6 J* @0 o9 ]  G( B6 q' _: ]
    Uint16  CONV15:4;         // 15:12  Conversion selection 15
% h5 ?5 W! l+ o- N( s/ B& I};


: [$ _8 q" H2 o控制寄存器38 T3 u8 w6 p9 w' ~
struct ADCTRL3_BITS {         // bits   description. R6 e' W1 {2 g+ f( h- v3 u: r8 Z
    Uint16   SMODE_SEL:1;     // 0      Sampling mode select  采样模式选择
' U2 e  T, q9 o& ]( O    Uint16   ADCCLKPS:4;      // 4:1    ADC core clock divider  ADC时钟分频器
& c% B; C2 c5 ~1 R    Uint16   ADCPWDN:1;       // 5      ADC powerdown    ADC断电???5 ?/ _' m' h% y# L1 L- x3 e5 L
    Uint16   ADCBGRFDN:2;     // 7:6    ADC bandgap/ref power down  ADC参考/带隙断电  ???
$ y9 m8 O* _5 t    Uint16   rsvd1:8;         // 15:8   reserved2 Y) S- u/ G% f* G8 @! X
};


( C& e2 q' W9 P4 |- j# r' I5 R状态寄存器
& z4 a, X! {6 ?) b0 q/ sstruct ADCST_BITS {           // bits   description2 p' d) F# d: _+ `
    Uint16   INT_SEQ1:1;      // 0      SEQ1 Interrupt flag   序列1中断标志3 h8 w, o( Z1 x1 B# Z: G
    Uint16   INT_SEQ2:1;      // 1      SEQ2 Interrupt flag   序列2中断标志8 R( {$ V2 F  M
    Uint16   SEQ1_BSY:1;      // 2      SEQ1 busy status      序列1忙标志9 w, u# Q7 M( m* O8 y( s7 D( h
    Uint16   SEQ2_BSY:1;      // 3      SEQ2 busy status     序列2忙标志
! S9 g& l6 s' u. r8 Y5 ~8 r6 U    Uint16   INT_SEQ1_CLR:1;  // 4      SEQ1 Interrupt clear  清除序列1中断标志
+ R0 ~2 c+ v9 r. _  B    Uint16   INT_SEQ2_CLR:1;  // 5      SEQ2 Interrupt clear  清除序列2中断标志
5 q" ]) n* K! |( |, {. k- o    Uint16   EOS_BUF1:1;      // 6      End of sequence buffer1   序列缓冲器1结束
2 p* t, V6 q" P# V- B+ X1 y    Uint16   EOS_BUF2:1;      // 7      End of sequence buffer2
! Q% A7 B3 r% \1 K    Uint16   rsvd1:8;         // 15:8   reserved9 [, `2 J( y) _" {- k8 l
};


) r% X* F) Y2 |: N


# V* ^& F! }/ [  S4 z: tstruct ADCREFSEL_BITS {       // bits   description/ P* M) e* N% L3 S. `! ]2 t4 m: w
Uint16   rsvd1:14;        // 13:0   reserved  
/ a" |; a  h$ v" Z7 sUint16   REF_SEL:2;       // 15:14  Reference select   参考选择???
. U) R6 x9 `/ V* z/ Y% C3 u};


( t4 o$ A1 }% k; q1 @/ Istruct ADCOFFTRIM_BITS{       // bits   description$ q! t/ d! `0 L& @( k1 |
int16 OFFSET_TRIM:9;    // 8:0    Offset Trim   偏移微调???4 B2 R- d+ {. h: L2 N+ k9 Z
Uint16 rsvd1:7;          // 15:9   reserved; g  U/ N  f, m. R9 N/ |
};


2 g7 ?2 I+ t/ [) {( yADC寄存器
' O3 F) |8 z, r; Ustruct ADC_REGS {
8 R9 ?) \, f, ^# O9 G, h& {+ A  F    union  ADCTRL1_REG       ADCTRL1;                   // ADC Control 16 q: L- m" R. \0 q$ C8 d
    union  ADCTRL2_REG       ADCTRL2;                   // ADC Control 2
! B, c6 G% B; Q" z/ ?% Z* D    union  ADCMAXCONV_REG    ADCMAXCONV;    // Max conversions
) @0 J" U: ?# v0 R# Q    union  ADCCHSELSEQ1_REG  ADCCHSELSEQ1;  // Channel select sequencing control 18 H' u( Y8 N, A1 p: ~
    union  ADCCHSELSEQ2_REG  ADCCHSELSEQ2;  // Channel select sequencing control 2
6 n' f  g1 h$ x6 b  p0 ~1 A    union  ADCCHSELSEQ3_REG  ADCCHSELSEQ3;  // Channel select sequencing control 3( z8 V( r, t  M! F7 l- @5 k
    union  ADCCHSELSEQ4_REG  ADCCHSELSEQ4;  // Channel select sequencing control 4
5 o6 z( s+ w; f+ l    union  ADCASEQSR_REG       ADCASEQSR;        // Autosequence status register
& Q: R- }* X3 r' K    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0: l% Y6 t  s" E% S
    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1
4 _, X1 [, r: N9 r. Y+ Z5 _! c0 l' }    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2
5 o: b# p- E5 e    Uint16                 ADCRESULT3;    // Conversion Result Buffer 39 w+ H. A* l/ ^" @
    Uint16                 ADCRESULT4;    // Conversion Result Buffer 41 X4 a- Q* ~/ G  v0 f8 x7 p& w
    Uint16                 ADCRESULT5;    // Conversion Result Buffer 55 E  U9 t$ O* h6 F8 S& @2 }# @
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6
9 K: P" Y$ p  a. Z& o2 E4 n7 W    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
- z) G: l" l: Y8 X: i" o! D, T    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8
  A0 U: i' G0 ]3 r9 @    Uint16                 ADCRESULT9;    // Conversion Result Buffer 9! F5 v4 u; ]' v! v$ N4 M
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 106 u# ^9 b0 X5 F; ?% d% z
    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11& {' r4 k3 Q  j5 S
    Uint16                 ADCRESULT12;   // Conversion Result Buffer 124 k: j7 r9 q2 p" O9 Y7 f. p
    Uint16                 ADCRESULT13;   // Conversion Result Buffer 131 c+ d+ D8 i$ O
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 144 V- b  _% E( R9 u3 B) i9 C
    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15
7 T) Z' B* p8 Z5 e1 `" ^- Q+ X. A    union  ADCTRL3_REG      ADCTRL3;       // ADC Control 3  
# l& ]" n0 G/ g: \    union  ADCST_REG          ADCST;         // ADC Status Register- B* _; l* O5 O9 @
    Uint16                 rsvd1;9 y8 k  a/ K" R$ G/ |# ^
    Uint16                 rsvd2;. n0 R+ @2 e* y
    union  ADCREFSEL_REG      ADCREFSEL;      // Reference Select Register: V2 S8 c, D: \" K
    union  ADCOFFTRIM_REG   ADCOFFTRIM;    // Offset Trim Register
( l. ^8 o7 e$ B& d};
# Y6 |: _. z, n/ w& i7 v0 Qstruct ADC_RESULT_MIRROR_REGS
% J. F0 [- A2 u* O" Z{
: Q6 x2 ?, v0 S2 m# N    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0! j- N5 H( ]/ [0 T7 O
    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1  ^" l+ i' v( ]" ]: i( j  ]
    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2! ~6 f& R% ^& [$ y  N! e
    Uint16                 ADCRESULT3;    // Conversion Result Buffer 32 X: h1 y) K! h& j7 @* s* _
    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
) D1 n: p$ g# i9 G! w; j9 z    Uint16                 ADCRESULT5;    // Conversion Result Buffer 5
/ }- r7 w9 Q, O* T1 `    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6# p9 C5 Y3 @7 l7 e5 H
    Uint16                 ADCRESULT7;    // Conversion Result Buffer 72 Y  Y, @" K. c! g8 H. J2 K
    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8# T+ }4 _$ r% g5 o" K2 o( J0 z
    Uint16                 ADCRESULT9;    // Conversion Result Buffer 9
) B4 M% Z6 N& k6 U& o9 E    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10% E( U+ }( X0 B- f) _* Q3 {! o: t
    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11( _/ V8 ^$ N+ S7 `7 u" @  ?
    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12
7 u$ M# `/ L* `8 V2 N$ v    Uint16                 ADCRESULT13;   // Conversion Result Buffer 13
# B. w6 R6 ?  o. r: G/ Y    Uint16                 ADCRESULT14;   // Conversion Result Buffer 14
) m: h7 ?) i7 F4 U8 k    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15
; F0 ^, C, \% o5 [$ r1 l};


# j  B" W- v1 o. k- a! v

0 s7 S$ h- a. n! R5 G5 E5 G! D$ N5 s
ADC_Cal()常规步骤:
& f7 I! _# C! i7 f4 |( T! Q- g第一步:这个是TI公司提供的文件
! p0 `6 D5 M6 x4 s# E.def _ADC_cal                                                      ;定义代码段名称
+ w, e# A2 V. ^' [2 O4 E* Q- Q.asg "0x711C", ADCREFSEL_LOC                         ;ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C - m! _; z. n# b$ M
.sect".adc_cal"
, e: r# E( x' z3 b# g( z_ADC_cal
1 z/ \2 Q1 L6 }MOVW DP, #ADCREFSEL_LOC >> 6        ;此时 DP = 0x7100
3 W0 @9 ^4 l6 H& |% \# ZMOV @28, #0xAAAA                                ;地址 : 0x7100 + 28. w4 u/ i' C( J, _; B
MOV @29, #0xBBBB                                 ;地址 : 0x7100 + 29
! x( j+ Q9 Q+ x; P/ O4 T+ [LRETR# E, w7 r' Y: B, k" V0 q
第二步:为 ADC_Cal() 添加命令文件 # N# \* L$ X. m1 i# n; ]
MEMORY
+ ^% X* _+ h8 u' |% A6 ~# K# G  ~{8 M. Y: V& M. n" K
PAGE 0 :  P. t/ f) w$ ?1 u0 f. ^
...2 b* ?+ |- U( [8 |( m7 C
ADC_CAL : origin = 0x380080, length = 0x000009
! \$ A6 {5 H3 V...7 G- }6 v! _) S8 ^* `
}
& p6 h1 W2 z- ~$ E0 LSECTIONS
( m" D& ~5 n, z  J1 a4 W# V; {9 l/ g{+ o/ P5 s5 \  N1 M2 ~/ n& x5 L
...  R0 ?2 E7 h# v
.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD. S# K" e% `/ y( a& G* q
...
' g' `; H: Y  G: _7 L}2 E; ]! T2 ]- U
第三步:在使用ADC前要声明ADC_Cal(),并且在使用ADC_Cal()之前要使能ADC高速时钟。5 x* L5 o3 X* K
extern void ADC_cal(void);+ n8 g" v3 b. l% K& _* X

" c! Q- R( O: E, z$ qEALLOW;                                                      //允许对受保护的寄存器进行操作/ E0 o5 t3 E+ k/ a1 [, S9 r; W0 U
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;  //使能时钟
: M5 a! e5 @% _ADC_cal();                                                   
9 A% p8 Z) t: |; \) y9 Y' VSysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0;  //关闭时钟
$ `2 e% t0 R6 l1 k1 xEDIS;                                                            //禁止对受保护的寄存器进行操作

) d0 a# X3 v  n4 [
ADC转换软件步骤:  S8 w( a" [  f
初始化DSP系统;  ( ~% P' F9 b! H6 ?8 S: b: Y' d7 m
设置PIE 中断矢量表, , I" S( n8 `% }6 F) X) H4 d2 d( t
初始化ADC模块; 2 Y% q4 N" u2 Z2 _9 s
将ADC中断的入口地址装入PIE 中断矢量表中,开中断;
1 t, o, k7 O" Z* ?! I9 v软件启动ADC转换; 9 `& {0 W$ S' X/ o; i$ r; ~) _; j
等待ADC中断;
" }4 |1 x* Z3 x/ k+ `7 ?在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-23 23:53 , Processed in 0.187500 second(s), 23 queries , Gzip On.

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

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

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