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

TMS320F28335之ADC功能

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

TMS320F28335内部包含12位AD转换器,其功能有:. |7 m& ?; m3 |3 b
具有内置(采样保持)S/H的12位ADC内核- \$ W, L$ c! T- p
模拟输入:0.0V至3.0V(高于3.0V的电压产生满刻度转换结果)。1 k( T6 w) W4 X7 ?4 K
快速转换率:在25MHzADC时钟12.5MSPS上时高达80ns1 w; ~" w. b, M) m( a
16个专用ADC通道。8 _8 l1 W* i: a  I' J" ^5 f3 @/ A
每次采样/保持都有复用的8通道
: v8 j: e* j- v; A" ?' ]* J, |) i自动定序功能在单次会话中可提供多达16次“自动转换”。可将每次转换编程为选择16个输入信道中的任何一个。
, }6 |0 G# j% v3 c- w$ \. g序列发生器可运行为2个独立的8态序列发生器,或作为1个较大的16态序列发生器(即2个级联的8态序列发生器)。$ E  |) y4 ?8 E/ s& j
用于存储转换值的16个结果寄存器(可分别寻址)
6 ?" T8 T' j  D# H2 K– 输入模拟电压的数值源自:1 a7 N+ S) [& N# u& Z
当input<0时:digital value =0;1 f+ h# b/ t2 d" p6 k) M4 @
当0<input<3.0时:digital value =4096*(input analog voltage-ADCLO)/3;' H% A$ A. t. i
当input>3.0时:digital value =4095;

& z! I  P' g8 p. |- v  U) J
作为转换开始(SOC)序列源的多个触发器
8 `" o' {3 d) R- |+ b2 V" X– S/W-软件立即启动
% M3 V* m4 u9 M2 i9 m– ePWMM转换开始
( [! W6 M" i0 v* U& a; ^– XINT2ADC转换开始. l. k' C- z$ Z& G; L/ S
灵活的中断控制允许每个序列结束(EOS) 或每个其它EOS上的中断请求。
* [; s1 N5 `; C, ~6 T序列发生器可运行于“启/停”模式,从而实现多个“时序触发器”同步转换。
  u3 D  I3 U2 i, h9 }4 \1 sSOCA和SOCB触发器可独立运行在双序列发生器模式中。
4 @( k, T- i. h采样保持(S/H)采集时间窗口具有独立的预分频控制。

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

ADC未被使用,ADC连接8 s1 M: p  a3 \- k8 k3 s
建议保持针对模拟电源引脚的连接,即便在ADC未被使用时也是如此。下面总结了如果ADC未在应用中使用,应该如何连接ADC引脚:! `2 O4 c& _6 n1 N. @+ v6 N- {
? VDD1A18/VDD2A18-连接至VDD7 x* n% U  [0 {# ^- G1 U8 w
? VDDA2,VDDAIO-连接至VDDIO
/ B$ w: h8 b" Y' K7 Q' D) l3 F? VSS1AGND/VSS2AGND,VSSA2,VSSAIO-连接至VSS8 P6 v; h& Y# Y: v8 }* r  i
? ADCLO-连接至VSS, O* m) @- Z7 F% M" Y3 f
? ADCREFIN-连接至VSS
: J$ i4 {3 _8 k: j- B6 l7 x7 W? ADCREFP/ADCREFM-连接一个100nF电容器至VSS
9 M5 J, S  C% c+ M7 ]% A8 h. ?? ADCRESEXT-连接一个20k?电阻器(非常松散的耐受)至VSS。
( f/ E$ A) B$ ?5 I/ R+ \- t? ADCINAn,ADCINBn-连接至VSS
8 K" ^( }+ H# N4 Q当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开。( t* }  ?' v/ `3 t" M/ D5 h5 t' x$ P
当在一个应用中使用ADC模块时,未使用的ADC输入引脚应被连接至模拟接地(VSS1AGND/VSS2AGND)

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


- o% c3 a+ t- u% u, [struct ADCTRL1_BITS {      // bits  description
0 J5 d$ E) a3 S1 z1 B. K5 I    Uint16  rsvd1:4;               // 3:0   reserved
! F3 n( H0 S& _+ d% m    Uint16  SEQ_CASC:1;      // 4     Cascaded sequencer mode 级联序列模式* P: I* N& `0 G/ l& G- g
    Uint16  SEQ_OVRD:1;     // 5     Sequencer override  序列发生器覆盖
6 n( n1 |% r( Z- q: n    Uint16  CONT_RUN:1;    // 6     Continuous run 连续运行模式! G% T8 u* L: U# g' P' b0 O# [8 k
    Uint16  CPS:1;                // 7     ADC core clock pre-scalar ADC核心时钟分频! Z4 e+ \+ q* y( `* D
    Uint16  ACQ_PS:4;         // 11:8  Acquisition window size采集窗口大小
  G  c1 T. N6 b& @4 S    Uint16  SUSMOD:2;       // 13:12 Emulation suspend mode仿真挂起模式( T( E7 U% H- u4 g' O
    Uint16  RESET:1;          // 14    ADC reset ADC复位
6 n2 L) J8 a( Q' Z3 q    Uint16  rsvd2:1;            // 15    reserved 保留8 Q+ L: H1 M( H3 l% l. [
};3 L# {& [" M4 c  k3 i* Y! g1 X
下面的联合体主要是为了解决对这个寄存器的控制,可以是整体赋值液可以是一位一位的赋值。( O# |, J6 d* H8 s5 G! \  {
union ADCTRL1_REG {
0 K! `' Z! n1 [! |5 v; n   Uint16                all;
% j7 v" E9 n2 V( t) U' D3 |7 p. D   struct ADCTRL1_BITS   bit;
: A8 F3 l3 k2 ]- m# F9 ^: q+ }* U};

6 r. g  a# j! q0 p8 X2 e4 I
struct ADCTRL2_BITS {                     // bits  description0 d7 X% g. x  c; Y; A
    Uint16  EPWM_SOCB_SEQ2:1;        // 0     EPWM compare B SOC mask for SEQ2  增强PWM比较器B作为SEQ2的启动转换标志
- @$ I: S8 `6 g) l7 @/ X( t& l    Uint16  rsvd1:1;                               // 1     reserved) `3 V) x  P/ g  ?. _1 F
    Uint16  INT_MOD_SEQ2:1;             // 2     SEQ2 Interrupt mode  SEQ2终端模式                 + m" |1 [, B; {# v/ o" E
    Uint16  INT_ENA_SEQ2:1;               // 3     SEQ2 Interrupt enable  SEQ2中断使能: ]. X+ h$ t" e# f0 f4 ?
    Uint16  rsvd2:1;                               // 4     reserved- `( e9 r% h9 p) v2 v# f. m! X0 k
    Uint16  SOC_SEQ2:1;                      // 5     Start of conversion for SEQ2 启动SEQ2转换* a! l" n2 J6 Y# T7 ^
    Uint16  RST_SEQ2:1;                      // 6     Reset SEQ2     SEQ2复位  J3 p  R6 z$ f; i: ~/ {
    Uint16  EXT_SOC_SEQ1:1;             // 7     External start of conversion for SEQ1        序列1的外部转换启动
. Z7 P) q0 `7 G- X    Uint16  EPWM_SOCA_SEQ1:1;       // 8     EPWM compare B SOC mask for SEQ1% e5 c' k% z% }2 a
    Uint16  rsvd3:1;                              // 9     reserved
8 e, k$ W" {) {- b, j    Uint16  INT_MOD_SEQ1:1;            // 10    SEQ1 Interrupt mode
% L! c, ]) k8 L3 c/ N    Uint16  INT_ENA_SEQ1:1;             // 11    SEQ1 Interrupt enable
9 `& a/ ^4 ^6 R( t9 H0 Y3 g2 V    Uint16  rsvd4:1;                             // 12    reserved5 C) j0 J' h/ @6 m, _. W+ E, h
    Uint16  SOC_SEQ1:1;                    // 13    Start of conversion trigger for SEQ1, V0 F/ l# _9 z/ O8 k7 E
    Uint16  RST_SEQ1:1;                    // 14    Restart sequencer 1   
. _2 U! M3 ]8 h    Uint16  EPWM_SOCB_SEQ:1;       // 15    EPWM compare B SOC enable9 K& ^0 a$ p# f. H
};

: s+ d7 g+ Q9 G8 Z. }+ t

2 L) w5 S' W3 D- L
struct ADCASEQSR_BITS {       // bits   description
3 ]. ~) M4 w# x    Uint16  SEQ1_STATE:4;     // 3:0    SEQ1 state   序列1的状态5 }0 E6 Z& z8 }" c
    Uint16  SEQ2_STATE:3;     // 6:4    SEQ2 state   序列2的状态% o8 Y) b1 w: G5 l# ^/ }2 v
    Uint16  rsvd1:1;          // 7      reserved
% {2 T( H9 J) {" B    Uint16  SEQ_CNTR:4;       // 11:8   Sequencing counter status   序列计数器状态
) N, d' Z5 `$ k    Uint16  rsvd2:4;          // 15:12  reserved  
. a& O2 j% {: ]+ R0 z};

$ f" W. h8 w9 L# T2 n; ^8 T) |


6 c1 o) @7 x$ r. vADC最大转换信道数寄存器
# R$ f6 Y% {8 Q% F6 e. `3 Qstruct ADCMAXCONV_BITS {      // bits  description6 d9 A- y5 R  s% V  S$ N/ Z* C
    Uint16  MAX_CONV1:4;      // 3:0   Max number of conversions   序列1最大转换通道数
! _9 \: ]2 n5 ?    Uint16  MAX_CONV2:3;      // 6:4   Max number of conversions    序列2最大转换通道数6 S4 ?* {& m0 P* r1 M* d6 I
    Uint16  rsvd1:9;          // 15:7  reserved
3 F2 D) |8 V9 Y- j  e+ d: ?};


! A' l" ~/ D; m# GADC信道选择排序控制寄存器
  u5 I$ W; d4 X4 d) ySEQ1只能使用ADCCHSELSEQ1和ADCCHSELSEQ2;AEQ2只能使用ADCCHSELSEQ3和ADCCHSELSEQ42 e! ]6 ?, F% O" j+ }' W3 o
struct ADCCHSELSEQ1_BITS {    // bits   description% d1 F/ W- G+ Y& j/ t
    Uint16  CONV00:4;         // 3:0    Conversion selection 00' |( r4 d/ z5 i, D' q( R
    Uint16  CONV01:4;         // 7:4    Conversion selection 01
9 v1 u5 K# F5 p: K! v    Uint16  CONV02:4;         // 11:8   Conversion selection 02
: b9 `/ }  D: c    Uint16  CONV03:4;         // 15:12  Conversion selection 03
/ ?; V- ~! T2 m( m6 N( J};
& R: B, _/ j. Z/ u% T* Ustruct ADCCHSELSEQ2_BITS {    // bits   description# E" U6 i# w1 R" f
    Uint16  CONV04:4;         // 3:0    Conversion selection 04( C4 o, W# ~3 B
    Uint16  CONV05:4;         // 7:4    Conversion selection 05
1 n4 ?5 p8 z7 m( Z9 C( n    Uint16  CONV06:4;         // 11:8   Conversion selection 06
; M3 G' R# H3 {7 X( e8 }    Uint16  CONV07:4;         // 15:12  Conversion selection 07
5 s0 C( S8 ~" C! A* {" |};" R0 q% M) @; V' c0 B1 H
struct ADCCHSELSEQ3_BITS {    // bits   description
7 A) X# e4 p% V    Uint16  CONV08:4;         // 3:0    Conversion selection 08
* a8 t9 V, Q5 @: d    Uint16  CONV09:4;         // 7:4    Conversion selection 09
6 e, d+ k# V9 I) ^$ c6 U, x* U    Uint16  CONV10:4;         // 11:8   Conversion selection 108 Y/ b5 N, G% x7 W# H* `
    Uint16  CONV11:4;         // 15:12  Conversion selection 112 i* g, h* ~5 ?2 P4 m4 R
};! C! _0 @' }7 Y4 _8 _
struct ADCCHSELSEQ4_BITS {    // bits   description" e" A4 D6 d+ w( x' ~) z, E
    Uint16  CONV12:4;         // 3:0    Conversion selection 12
  q4 W, J, t8 o( X" z  Z1 ~! H    Uint16  CONV13:4;         // 7:4    Conversion selection 13( H9 }. a( c% R' y1 W1 [! ?
    Uint16  CONV14:4;         // 11:8   Conversion selection 145 \& g, q4 L( U! R7 }
    Uint16  CONV15:4;         // 15:12  Conversion selection 15
; s% o! Y7 [% U/ h6 D1 {: `0 _+ e};


8 J. b7 o8 u7 J$ H) I1 N- _% p控制寄存器3
# z! L8 f6 k8 M- [struct ADCTRL3_BITS {         // bits   description" w: K% s" I& q* n9 Y% k
    Uint16   SMODE_SEL:1;     // 0      Sampling mode select  采样模式选择! y) L) V& f$ f
    Uint16   ADCCLKPS:4;      // 4:1    ADC core clock divider  ADC时钟分频器
+ o3 z9 m, r; u) l    Uint16   ADCPWDN:1;       // 5      ADC powerdown    ADC断电???
, {" o% d) J+ Y! @    Uint16   ADCBGRFDN:2;     // 7:6    ADC bandgap/ref power down  ADC参考/带隙断电  ???( U  ?: |  c+ v/ Y3 ]# G: l
    Uint16   rsvd1:8;         // 15:8   reserved/ ~3 y+ Y6 J4 \- T4 ?6 I, v
};


( }# _% E' d& E& A  `状态寄存器- ?5 V& W0 ^( u# R
struct ADCST_BITS {           // bits   description, i# o/ x4 i+ a$ D9 R
    Uint16   INT_SEQ1:1;      // 0      SEQ1 Interrupt flag   序列1中断标志
3 X6 n$ }0 R0 ?0 P( j1 f, ?5 Z    Uint16   INT_SEQ2:1;      // 1      SEQ2 Interrupt flag   序列2中断标志
, l+ l0 _" h, n1 b( K& `    Uint16   SEQ1_BSY:1;      // 2      SEQ1 busy status      序列1忙标志
& Q% ]3 Z' ]7 V    Uint16   SEQ2_BSY:1;      // 3      SEQ2 busy status     序列2忙标志" s: H! Y2 @& S4 r; f0 F; d
    Uint16   INT_SEQ1_CLR:1;  // 4      SEQ1 Interrupt clear  清除序列1中断标志
0 ]/ T! H* _9 N3 [    Uint16   INT_SEQ2_CLR:1;  // 5      SEQ2 Interrupt clear  清除序列2中断标志+ e! ?2 Z. p; _6 P: J0 Z( w
    Uint16   EOS_BUF1:1;      // 6      End of sequence buffer1   序列缓冲器1结束
6 O7 ~2 r5 F' t: A4 }' |    Uint16   EOS_BUF2:1;      // 7      End of sequence buffer25 ~# z8 w0 k# b) O0 K
    Uint16   rsvd1:8;         // 15:8   reserved
6 A1 B; Q* `5 v2 C# i; x};


& Y! {$ m3 i& c" D1 X( Z2 n' V) ^" W

* }) F& j/ L5 F% `3 y
struct ADCREFSEL_BITS {       // bits   description* Y6 T5 G$ L3 r% X" ]9 O( ]6 j, d/ M
Uint16   rsvd1:14;        // 13:0   reserved  6 l) Y  O" t- G
Uint16   REF_SEL:2;       // 15:14  Reference select   参考选择???7 R& l$ u8 R! L) q1 K
};

1 s) C7 s' q! e
struct ADCOFFTRIM_BITS{       // bits   description
0 j3 t7 C3 w" U4 T7 q# Qint16 OFFSET_TRIM:9;    // 8:0    Offset Trim   偏移微调???
: U) s1 H, V" U" O) @( q% I. E0 \Uint16 rsvd1:7;          // 15:9   reserved+ \6 A# A: ~* v% e1 q' y* I
};


$ C+ G9 H  i6 G- x0 m# k- d, qADC寄存器9 l4 P" f' L- m5 F' y  S
struct ADC_REGS {7 Y6 ^5 M0 z: P6 O8 E
    union  ADCTRL1_REG       ADCTRL1;                   // ADC Control 1
6 u) N) M: i3 C! O/ [+ X2 w) O* Q    union  ADCTRL2_REG       ADCTRL2;                   // ADC Control 2) d2 J; @+ X$ _% a4 `3 `' j" d
    union  ADCMAXCONV_REG    ADCMAXCONV;    // Max conversions  D. t" O- A+ \) b! L+ v- y
    union  ADCCHSELSEQ1_REG  ADCCHSELSEQ1;  // Channel select sequencing control 19 J# p& ^! c/ b& V) r9 F* d  ?
    union  ADCCHSELSEQ2_REG  ADCCHSELSEQ2;  // Channel select sequencing control 2
3 ^0 v1 R. p" v: v    union  ADCCHSELSEQ3_REG  ADCCHSELSEQ3;  // Channel select sequencing control 3$ z2 W' `2 C. U3 c$ ]; N" `) J( A
    union  ADCCHSELSEQ4_REG  ADCCHSELSEQ4;  // Channel select sequencing control 4
; d1 j. R3 P9 n4 {' Y7 c' K) x    union  ADCASEQSR_REG       ADCASEQSR;        // Autosequence status register8 R4 N/ `$ s* b" [2 m) x. W: ~9 r
    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0
8 y2 s4 d2 q4 {9 |! \0 U1 ~    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1
; h" @  e6 G" k# V) n9 F( [+ n: B4 b    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2% X% o; b$ y, B  ?
    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3  Q. J( e' l+ U  X# j: t7 X
    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
7 o0 K$ A2 s7 \6 d/ k" \* b    Uint16                 ADCRESULT5;    // Conversion Result Buffer 51 i, M$ f, H/ g1 V
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6* s: L5 ~: I4 |" z, h7 M
    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
$ M! l6 _7 z& [: T    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8' E8 @3 ^' m! [! f& N% N
    Uint16                 ADCRESULT9;    // Conversion Result Buffer 9, G% U" ~8 P+ W1 W( s
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 100 [6 w8 y! |9 C7 _' h9 ~/ K* X- r
    Uint16                 ADCRESULT11;   // Conversion Result Buffer 119 X. H+ @9 P5 x9 j% f
    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12
+ R: _# A/ o8 v. ^! I) A    Uint16                 ADCRESULT13;   // Conversion Result Buffer 13- s5 @  t  r8 S
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 143 n, H5 `' [3 {3 ^; \( s
    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15: a2 ]) b$ m. ]( m/ p& Q& ~3 v
    union  ADCTRL3_REG      ADCTRL3;       // ADC Control 3  
  a+ O' \) k( m% n" s0 K! ~    union  ADCST_REG          ADCST;         // ADC Status Register
5 }; C# p; D  J. w( O( ^    Uint16                 rsvd1;% R9 r: j! E; |! T( y
    Uint16                 rsvd2;3 M* ?6 e9 o8 B1 r" Q
    union  ADCREFSEL_REG      ADCREFSEL;      // Reference Select Register
7 \" m5 u* V7 @    union  ADCOFFTRIM_REG   ADCOFFTRIM;    // Offset Trim Register& V; X( i' H5 y1 J: Z
};$ N, E* g$ l  e. i, D
struct ADC_RESULT_MIRROR_REGS3 Q- F+ X8 g8 y8 q2 t. U
{! o' |" J2 A, ?1 H0 ]6 U; [
    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0
$ B8 p2 S. {$ @2 A    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1
9 E: e6 n1 w7 N2 m: d    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2
: s% `9 `9 N: p' e4 b- o* R7 A    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3; X% F7 Z- J. n7 q+ L; V
    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4* j- ?# x- P, \5 _, A
    Uint16                 ADCRESULT5;    // Conversion Result Buffer 5( \0 z2 T  _' C$ M
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6
! X- ~: r; w6 w$ a9 l% c9 x    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7/ |4 [8 s  E3 o/ `! z
    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8
! H" N1 H4 j3 E! f    Uint16                 ADCRESULT9;    // Conversion Result Buffer 9& W/ m) H, a4 r9 Q+ y/ f
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10
: j* m! t/ D% v0 P0 v: E    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11
# s, U: b0 m0 W6 n9 P    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12( J  L. H0 ]7 s
    Uint16                 ADCRESULT13;   // Conversion Result Buffer 13) P# V3 V- Y: K& N
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 14
0 X% R2 O6 y- e    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15
- f, A; A5 N: A7 @! K& ]};


/ i* a1 ~: p: t5 d


' v- [  v' K9 k1 tADC_Cal()常规步骤:- D* V/ t! W2 H: D
第一步:这个是TI公司提供的文件/ }8 t* {2 C, x
.def _ADC_cal                                                      ;定义代码段名称6 T* e% A" F# g8 K/ M: k
.asg "0x711C", ADCREFSEL_LOC                         ;ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C " u  M6 d4 {! P2 x* |; k
.sect".adc_cal"
) r5 [( ^6 t- _! c% h; I# j_ADC_cal
& X% ?6 N& U& u4 UMOVW DP, #ADCREFSEL_LOC >> 6        ;此时 DP = 0x7100 " E5 d- ?/ y- t+ [! i
MOV @28, #0xAAAA                                ;地址 : 0x7100 + 28- [' }; s" o2 [5 n' x
MOV @29, #0xBBBB                                 ;地址 : 0x7100 + 29! |+ n! r* _6 K5 H- D
LRETR# e# R: l) M* T$ e. ~$ f
第二步:为 ADC_Cal() 添加命令文件 ; Z( Z# O3 c3 T+ t
MEMORY4 n/ q4 b0 o5 I* P
{  Q! E* N$ r- z+ S
PAGE 0 :
7 \$ U$ ]/ I% B+ M0 Y6 @...2 _/ v0 d9 t+ z) v
ADC_CAL : origin = 0x380080, length = 0x000009
, K5 ?; @6 f6 n1 k...1 f5 t0 e. O8 k# K5 w
}- ^5 w8 m) j5 a) ~/ \
SECTIONS6 f5 J  H2 ]% r# M) U! T$ v- `) Z
{
2 f, i( ^7 P* z1 t  T...$ E. \+ m+ r" Y9 ~4 `) r
.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD% J% i' K* \5 z# k5 `1 k. y
...2 H* N1 v- f' c
}4 v4 Z* F+ c! Z( l; i7 I
第三步:在使用ADC前要声明ADC_Cal(),并且在使用ADC_Cal()之前要使能ADC高速时钟。
4 K% U9 Y" F3 `  O, c$ h: Q; Iextern void ADC_cal(void);2 f: s0 K# g( @3 `
/ X- F" R+ B$ V
EALLOW;                                                      //允许对受保护的寄存器进行操作
5 [; X& b& j# V/ Z7 h: @SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;  //使能时钟. j+ ?- r5 E! h$ l9 M
ADC_cal();                                                    $ z: I& x4 @( d
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0;  //关闭时钟# Z) f" m5 o7 B- l' T
EDIS;                                                            //禁止对受保护的寄存器进行操作


9 W9 h3 j0 L* Q* f! H. I5 v0 c, ]; eADC转换软件步骤:9 a& F$ i, D  s- E( C: x; v
初始化DSP系统;  
( \- @# D" x+ I5 R设置PIE 中断矢量表, $ V% E! z5 r2 g( T& b
初始化ADC模块;
2 F; a8 h* |% x3 `( A3 i& B/ v( w  s将ADC中断的入口地址装入PIE 中断矢量表中,开中断;
" ?( W* W* e9 r( i/ g* e软件启动ADC转换;
8 ~$ p! K& S+ ?* @4 i等待ADC中断;
, X) S9 J% \# ~$ G) d! Y5 t在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 02:45 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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