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

TMS320F28335之ADC功能

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

TMS320F28335内部包含12位AD转换器,其功能有:
8 }  n% r8 D$ s具有内置(采样保持)S/H的12位ADC内核" \9 ^0 \4 E: x/ k, `+ s, E! I
模拟输入:0.0V至3.0V(高于3.0V的电压产生满刻度转换结果)。
3 O$ `, Z4 _' |7 t快速转换率:在25MHzADC时钟12.5MSPS上时高达80ns
) O+ Y- ~7 G. _) Y  d8 h16个专用ADC通道。" _4 n! s2 t1 `- u* b1 {
每次采样/保持都有复用的8通道) X* f1 R. q% c" Z6 s- q/ r
自动定序功能在单次会话中可提供多达16次“自动转换”。可将每次转换编程为选择16个输入信道中的任何一个。
1 w& K. v: E' r序列发生器可运行为2个独立的8态序列发生器,或作为1个较大的16态序列发生器(即2个级联的8态序列发生器)。
$ x" y* A' M  p1 }3 Q' l用于存储转换值的16个结果寄存器(可分别寻址)7 j! v+ I" i. Y1 h3 T! m3 {
– 输入模拟电压的数值源自:
+ X( i% T* A+ v/ y! o+ y* s当input<0时:digital value =0;
7 f7 |6 Y! n, O( V% H: x  c2 N; H) g当0<input<3.0时:digital value =4096*(input analog voltage-ADCLO)/3;7 h* j3 [' y0 p3 R
当input>3.0时:digital value =4095;

' K1 k4 I3 \& L
作为转换开始(SOC)序列源的多个触发器' L* a( a6 m$ A; ^4 n5 o6 ]8 k( @2 N
– S/W-软件立即启动; _% f, ~; n2 J; X) q5 T
– ePWMM转换开始
8 e( o% _; A% j' r# l– XINT2ADC转换开始
. h* K0 M1 p8 |8 f9 l灵活的中断控制允许每个序列结束(EOS) 或每个其它EOS上的中断请求。6 M$ T: F; g7 H1 f$ X' \* M. D
序列发生器可运行于“启/停”模式,从而实现多个“时序触发器”同步转换。
1 \  {! X0 b2 U! A, [5 vSOCA和SOCB触发器可独立运行在双序列发生器模式中。( U( U' B3 `0 H# O/ C
采样保持(S/H)采集时间窗口具有独立的预分频控制。

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

ADC未被使用,ADC连接$ F' V' @: R$ B3 `' i9 R1 h/ t
建议保持针对模拟电源引脚的连接,即便在ADC未被使用时也是如此。下面总结了如果ADC未在应用中使用,应该如何连接ADC引脚:
0 Y: `+ x6 {: c- h- U? VDD1A18/VDD2A18-连接至VDD) y, u9 k6 A, K% L! X& q7 x
? VDDA2,VDDAIO-连接至VDDIO' D6 F4 Y) I. O9 r* h4 c1 x8 r$ m
? VSS1AGND/VSS2AGND,VSSA2,VSSAIO-连接至VSS! O# D$ w! m/ O( ~; a- b: P
? ADCLO-连接至VSS# G& S) f% _" N, R& |6 [
? ADCREFIN-连接至VSS
4 ~5 ~0 B4 s9 }! r2 o" J; v? ADCREFP/ADCREFM-连接一个100nF电容器至VSS; b1 w; O6 T/ r. |6 Y+ j
? ADCRESEXT-连接一个20k?电阻器(非常松散的耐受)至VSS。3 q' M: W( A! y! ~/ P* L) P; R  k! O: P
? ADCINAn,ADCINBn-连接至VSS7 J' ?9 @0 R! f& j3 X
当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开。
% D4 k* }+ v5 ]1 t- I! u/ `  D5 y当在一个应用中使用ADC模块时,未使用的ADC输入引脚应被连接至模拟接地(VSS1AGND/VSS2AGND)

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


, M) w, J9 Z$ N5 t$ v" _4 hstruct ADCTRL1_BITS {      // bits  description
# n  R/ I! C5 M2 d8 V( j    Uint16  rsvd1:4;               // 3:0   reserved
# [1 H, j) a; L    Uint16  SEQ_CASC:1;      // 4     Cascaded sequencer mode 级联序列模式! Z  l4 D/ y( o" l( v8 R
    Uint16  SEQ_OVRD:1;     // 5     Sequencer override  序列发生器覆盖, i- W! ~" M  u( C
    Uint16  CONT_RUN:1;    // 6     Continuous run 连续运行模式
9 U9 A/ {% E) r+ e2 C! K    Uint16  CPS:1;                // 7     ADC core clock pre-scalar ADC核心时钟分频: ~2 m* R" R7 g# u7 g  U
    Uint16  ACQ_PS:4;         // 11:8  Acquisition window size采集窗口大小- p4 }6 o7 t& P+ [
    Uint16  SUSMOD:2;       // 13:12 Emulation suspend mode仿真挂起模式+ \# R9 D) s/ T2 z( F/ g8 D9 W: J) b
    Uint16  RESET:1;          // 14    ADC reset ADC复位! [1 W: [& \" w; r7 D
    Uint16  rsvd2:1;            // 15    reserved 保留. n8 t. c! {4 }3 r, g
};
5 T9 E5 J+ Q* H0 z" O/ q下面的联合体主要是为了解决对这个寄存器的控制,可以是整体赋值液可以是一位一位的赋值。
9 j) w5 O3 |. S5 m$ T1 y' @: funion ADCTRL1_REG {. H5 w+ A: l+ P  M% B! j& g/ d
   Uint16                all;: `; o# O$ Y) y" C* l4 R
   struct ADCTRL1_BITS   bit;
( e  [3 L: B- s( O. B};

, W  ?, F3 T+ Z% D9 Z
struct ADCTRL2_BITS {                     // bits  description
* v+ i8 d( l# C# E  r( v9 |0 E    Uint16  EPWM_SOCB_SEQ2:1;        // 0     EPWM compare B SOC mask for SEQ2  增强PWM比较器B作为SEQ2的启动转换标志
7 F8 V- O4 j% y8 s/ w    Uint16  rsvd1:1;                               // 1     reserved
# ]; T  X* s0 F! g  r    Uint16  INT_MOD_SEQ2:1;             // 2     SEQ2 Interrupt mode  SEQ2终端模式                 
; i. ?9 I  f7 S! ?" O6 B1 @    Uint16  INT_ENA_SEQ2:1;               // 3     SEQ2 Interrupt enable  SEQ2中断使能
: i0 D3 j* w; S. z    Uint16  rsvd2:1;                               // 4     reserved
' s- |6 L$ v+ t0 p    Uint16  SOC_SEQ2:1;                      // 5     Start of conversion for SEQ2 启动SEQ2转换$ |/ {# g3 j3 n: B2 ?' |+ B
    Uint16  RST_SEQ2:1;                      // 6     Reset SEQ2     SEQ2复位# m7 t# e# D+ q% F5 u
    Uint16  EXT_SOC_SEQ1:1;             // 7     External start of conversion for SEQ1        序列1的外部转换启动; u6 [6 h2 E. p6 r9 o) ]
    Uint16  EPWM_SOCA_SEQ1:1;       // 8     EPWM compare B SOC mask for SEQ1
/ [; D% A7 r. n( f8 h    Uint16  rsvd3:1;                              // 9     reserved  o7 ^- X2 n+ f& f/ \
    Uint16  INT_MOD_SEQ1:1;            // 10    SEQ1 Interrupt mode% z1 [3 U4 c' @  N9 A
    Uint16  INT_ENA_SEQ1:1;             // 11    SEQ1 Interrupt enable9 D) _1 F' L6 T
    Uint16  rsvd4:1;                             // 12    reserved
6 q! g2 I, f5 S1 R( R* r3 x    Uint16  SOC_SEQ1:1;                    // 13    Start of conversion trigger for SEQ1* J5 y6 X0 M+ E
    Uint16  RST_SEQ1:1;                    // 14    Restart sequencer 1   1 {3 T. I0 u( r2 Y7 X6 t; [* x
    Uint16  EPWM_SOCB_SEQ:1;       // 15    EPWM compare B SOC enable
* U8 h4 O( H  J- j- v7 ^! k};

3 A' n) e8 ^" n& D. {! Y0 e- }

9 h2 Q& l' v# V% C5 h. ~
struct ADCASEQSR_BITS {       // bits   description
$ b1 n8 I( c0 A* ~    Uint16  SEQ1_STATE:4;     // 3:0    SEQ1 state   序列1的状态# O4 O, I# l$ T. ?% T5 m$ Y
    Uint16  SEQ2_STATE:3;     // 6:4    SEQ2 state   序列2的状态8 I: {# U0 D: o# N4 a( S3 ~
    Uint16  rsvd1:1;          // 7      reserved
7 m8 b) I! E9 j' B/ B7 ~& ]) p    Uint16  SEQ_CNTR:4;       // 11:8   Sequencing counter status   序列计数器状态. C, B0 C5 |+ Z$ v) q" H6 `
    Uint16  rsvd2:4;          // 15:12  reserved  
2 K" V) H* ?7 ?% F};

( ]. V# f3 i4 v) {* l- }


3 t/ [$ [) u8 p4 r" x8 t7 AADC最大转换信道数寄存器
* i. F/ A9 X7 vstruct ADCMAXCONV_BITS {      // bits  description) [. T  l) q1 N3 ^. n8 A% n+ M
    Uint16  MAX_CONV1:4;      // 3:0   Max number of conversions   序列1最大转换通道数- X' k) {# |2 _  Z7 `: Z; R
    Uint16  MAX_CONV2:3;      // 6:4   Max number of conversions    序列2最大转换通道数3 c  T& r4 K! X, z8 M
    Uint16  rsvd1:9;          // 15:7  reserved   L7 L, z( h6 W
};

; t& ^- M  O0 }! ]; o3 \5 g' T
ADC信道选择排序控制寄存器, x* w' O- H  ~+ Y" F
SEQ1只能使用ADCCHSELSEQ1和ADCCHSELSEQ2;AEQ2只能使用ADCCHSELSEQ3和ADCCHSELSEQ4* [; k6 B  y' H4 O' F5 x
struct ADCCHSELSEQ1_BITS {    // bits   description) k* ?1 @" E) L$ X8 Q4 ]0 ^
    Uint16  CONV00:4;         // 3:0    Conversion selection 00
( F5 K. U+ j2 i: ?" ^9 ~& k    Uint16  CONV01:4;         // 7:4    Conversion selection 019 s+ j; T9 o( Z' ]# h
    Uint16  CONV02:4;         // 11:8   Conversion selection 02- T6 \0 D0 h: m
    Uint16  CONV03:4;         // 15:12  Conversion selection 03$ D( ]( v2 P) H
};
5 R5 F& n8 {5 N& ostruct ADCCHSELSEQ2_BITS {    // bits   description
( F' ~0 L0 H' _$ l4 U; O    Uint16  CONV04:4;         // 3:0    Conversion selection 042 @' ]! m) z9 B: W( y$ n
    Uint16  CONV05:4;         // 7:4    Conversion selection 05
6 X+ h- @5 l# u7 y! m. O' u    Uint16  CONV06:4;         // 11:8   Conversion selection 06
8 |* A; v2 }$ y* Q' E: a( y2 |    Uint16  CONV07:4;         // 15:12  Conversion selection 07
, R1 ]. B" ~* g) @6 |& e};
; I; m3 l4 o" C6 f' \3 Estruct ADCCHSELSEQ3_BITS {    // bits   description
' @' G  j9 |& H    Uint16  CONV08:4;         // 3:0    Conversion selection 083 `% S4 U: u) p/ y
    Uint16  CONV09:4;         // 7:4    Conversion selection 09
$ j) @7 ^/ q+ u5 _% w* t8 g' }    Uint16  CONV10:4;         // 11:8   Conversion selection 100 P) J0 r& {# G! w* U9 N0 p
    Uint16  CONV11:4;         // 15:12  Conversion selection 11
9 P- V0 V4 S# r, U. ?0 p};
$ _- k( J! a+ D3 t/ Xstruct ADCCHSELSEQ4_BITS {    // bits   description
+ l7 B. Q( S: S, o2 a0 l1 T    Uint16  CONV12:4;         // 3:0    Conversion selection 12; e& X, o  x# ?
    Uint16  CONV13:4;         // 7:4    Conversion selection 13$ u; Q" W4 l2 ?0 [, C5 I
    Uint16  CONV14:4;         // 11:8   Conversion selection 14
7 w$ L" H7 ]  ^+ ~- E2 b$ C% C/ F1 l' O    Uint16  CONV15:4;         // 15:12  Conversion selection 159 y* q4 e5 h6 [# Q" b1 V& l
};

: g& W+ \. S* Q
控制寄存器3
+ f: ~! e( u! i, D" S3 ?struct ADCTRL3_BITS {         // bits   description
' N5 [5 ^  Y3 j5 H: A) {    Uint16   SMODE_SEL:1;     // 0      Sampling mode select  采样模式选择
. e. K/ `4 ]( k    Uint16   ADCCLKPS:4;      // 4:1    ADC core clock divider  ADC时钟分频器
! e: X, I% |& |4 h; \+ B; a    Uint16   ADCPWDN:1;       // 5      ADC powerdown    ADC断电???2 M5 S- |: B" [/ N# e* `" R( o1 @
    Uint16   ADCBGRFDN:2;     // 7:6    ADC bandgap/ref power down  ADC参考/带隙断电  ???
3 O; S( T( X6 g& X' ~    Uint16   rsvd1:8;         // 15:8   reserved
# ?1 h0 v! I8 t6 w% A};


6 G9 j, ^$ Y) G6 \: P状态寄存器
/ {- f3 U8 u3 M4 Fstruct ADCST_BITS {           // bits   description& `& v0 W$ L7 A
    Uint16   INT_SEQ1:1;      // 0      SEQ1 Interrupt flag   序列1中断标志
; d' ^7 S3 X  V( r    Uint16   INT_SEQ2:1;      // 1      SEQ2 Interrupt flag   序列2中断标志9 X+ J" ^( c0 C! t4 G* `5 s2 ~
    Uint16   SEQ1_BSY:1;      // 2      SEQ1 busy status      序列1忙标志$ f9 z9 \0 J9 y. Z. b
    Uint16   SEQ2_BSY:1;      // 3      SEQ2 busy status     序列2忙标志5 J8 `9 \4 N6 t# o# |+ W2 ?4 k
    Uint16   INT_SEQ1_CLR:1;  // 4      SEQ1 Interrupt clear  清除序列1中断标志
; J: |5 B' E3 A4 F    Uint16   INT_SEQ2_CLR:1;  // 5      SEQ2 Interrupt clear  清除序列2中断标志' Q7 p: C$ s. X% {* {- y: W8 }6 |% L4 Y
    Uint16   EOS_BUF1:1;      // 6      End of sequence buffer1   序列缓冲器1结束% Y2 U* h9 }+ @- p: K3 ?9 b! N
    Uint16   EOS_BUF2:1;      // 7      End of sequence buffer2
5 U( k# q  N( h( g. x$ w    Uint16   rsvd1:8;         // 15:8   reserved$ ?9 B) X* J& b
};


9 I' u$ O0 a! g, K+ n+ }

" g3 M5 E: a& ^. d$ l0 D
struct ADCREFSEL_BITS {       // bits   description
" k1 y) S; X5 x( h2 C" d8 C1 QUint16   rsvd1:14;        // 13:0   reserved  
8 n6 N# K. R+ z' m  oUint16   REF_SEL:2;       // 15:14  Reference select   参考选择???
1 [% S# W8 K$ k3 L};


/ Z1 S) Y1 h# l. S+ Zstruct ADCOFFTRIM_BITS{       // bits   description
) d6 t, ~; ]8 B* Z. Bint16 OFFSET_TRIM:9;    // 8:0    Offset Trim   偏移微调???" u2 ~" {1 y6 D' Y" _) C
Uint16 rsvd1:7;          // 15:9   reserved. _0 W, k0 K+ x/ x5 R
};

" U% D& U6 m9 Z, }$ Z. |3 A: c+ P
ADC寄存器' x! Z' d/ F0 x4 ~+ x9 H( ^
struct ADC_REGS {
7 H( W/ a6 ^# r' V7 v# ?    union  ADCTRL1_REG       ADCTRL1;                   // ADC Control 1
6 c, {( s& F, A9 B7 x' `( y  }    union  ADCTRL2_REG       ADCTRL2;                   // ADC Control 22 J' Q6 I* [; v' p+ x
    union  ADCMAXCONV_REG    ADCMAXCONV;    // Max conversions1 I6 D8 e9 U/ g. y8 f& W3 N; ^
    union  ADCCHSELSEQ1_REG  ADCCHSELSEQ1;  // Channel select sequencing control 1
- S; ]. E, T% [5 ]    union  ADCCHSELSEQ2_REG  ADCCHSELSEQ2;  // Channel select sequencing control 2
2 r$ c+ e* ?8 k( |5 c- i    union  ADCCHSELSEQ3_REG  ADCCHSELSEQ3;  // Channel select sequencing control 3
! ~% d( o( T/ _' x) h$ i    union  ADCCHSELSEQ4_REG  ADCCHSELSEQ4;  // Channel select sequencing control 4
) V- i! ]' I# X' j# G0 o/ Q$ |+ k! X) v& T    union  ADCASEQSR_REG       ADCASEQSR;        // Autosequence status register. r& Y, y2 B! Y( @* B8 H7 r
    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0, y" |- Z/ A! H, ~6 t( j
    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1
. G, V; z+ Q" _4 G    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2. F' v3 M4 @1 Q: |8 w: S4 v
    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3
" ?: n  O+ X# }6 o    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
; n, ?5 e, H2 G    Uint16                 ADCRESULT5;    // Conversion Result Buffer 5
9 f% Z- t1 Z7 T    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6
6 |2 \  }& D1 b' ]  J  i) s0 U    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
: \  X- c3 x& T  o0 k+ h! W    Uint16                 ADCRESULT8;    // Conversion Result Buffer 87 z5 Y5 q  L/ H, A6 c8 J* ]
    Uint16                 ADCRESULT9;    // Conversion Result Buffer 9
* e2 A# X1 N  w+ |" y. _9 _& I    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10
1 Z9 L7 y, W! D/ j    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11
- s; w1 ?1 [8 J  I% z' D$ @    Uint16                 ADCRESULT12;   // Conversion Result Buffer 125 j( f5 X- O. S' F+ V* s
    Uint16                 ADCRESULT13;   // Conversion Result Buffer 136 A. z: D1 H2 u4 C& ~  I3 Q% l* e
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 144 F* s' [" ~( ?: f& P
    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15. M3 b2 v4 M& \  J1 `3 |+ d0 i
    union  ADCTRL3_REG      ADCTRL3;       // ADC Control 3  
# S) J  A$ x8 M! ]: g4 Q' h0 z: @    union  ADCST_REG          ADCST;         // ADC Status Register6 h  o/ W+ s* \% {! V* Q
    Uint16                 rsvd1;
+ w0 ^0 S5 e7 u9 W6 |) m    Uint16                 rsvd2;8 E! G' p1 U5 v0 N( t
    union  ADCREFSEL_REG      ADCREFSEL;      // Reference Select Register
% I. F/ {! E) j5 X    union  ADCOFFTRIM_REG   ADCOFFTRIM;    // Offset Trim Register
5 T) u1 B3 k" @1 b9 q/ ]5 O};
/ L7 o' [% x& [) \; G9 z" W5 Mstruct ADC_RESULT_MIRROR_REGS6 k  E# ~0 y# `7 I7 u5 b
{
6 Y  j2 N2 r' _* m$ @) I8 q8 Q' b# C    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0
+ j7 {2 J: ^2 i1 M# `    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1
' t* u- I3 t9 ?- L5 O9 h7 F    Uint16                 ADCRESULT2;    // Conversion Result Buffer 21 j4 K# T7 a9 Y# @
    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3
+ o. }- m- a( F! X    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4# J- _6 c6 x$ a; v7 m9 K
    Uint16                 ADCRESULT5;    // Conversion Result Buffer 51 D1 D! {5 V; z. c
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6
  h& }8 G, x% y! b4 \    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
" U; y" C) V7 y" I4 l: ^8 U    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8
( S; |5 \2 h+ a4 }9 U    Uint16                 ADCRESULT9;    // Conversion Result Buffer 97 m% `4 I; l# I2 t! f1 E
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10' ~; Z0 F/ c, {1 M, S
    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11  C# ?3 l. s% q2 Y: _, k
    Uint16                 ADCRESULT12;   // Conversion Result Buffer 129 r) P9 p% t7 {% }
    Uint16                 ADCRESULT13;   // Conversion Result Buffer 13+ H; W! w; @+ P8 d6 L4 t9 S
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 140 }: R/ ]4 ~- M( j
    Uint16                 ADCRESULT15;   // Conversion Result Buffer 158 h  Z  R. B% }& m& d9 Y
};

" S/ r" `$ d$ F$ W# t


! t: y0 j4 j, Z% k. fADC_Cal()常规步骤:, Y5 _* ~5 x) a2 U
第一步:这个是TI公司提供的文件; E5 m) w7 i. d3 _, _
.def _ADC_cal                                                      ;定义代码段名称
' O- o: ~% T- K% _6 D.asg "0x711C", ADCREFSEL_LOC                         ;ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C
+ ?3 V) w5 f2 T0 s& `.sect".adc_cal"
( R: t' F2 n5 n- f* u9 M_ADC_cal
/ d! V9 x+ Z6 eMOVW DP, #ADCREFSEL_LOC >> 6        ;此时 DP = 0x7100
4 J" s+ a: g3 QMOV @28, #0xAAAA                                ;地址 : 0x7100 + 28
. O+ S5 s4 C4 BMOV @29, #0xBBBB                                 ;地址 : 0x7100 + 291 O4 [( Q$ p5 x/ B% ^- |
LRETR
  F  X0 @! @/ N# m5 K. }, L8 c第二步:为 ADC_Cal() 添加命令文件
" x0 h2 k2 A! i8 _MEMORY8 o6 \" H( y5 S+ _% k1 s3 U% u
{+ C5 X3 P+ H4 K! C
PAGE 0 :
$ X1 [: H2 n+ M! A...
% b3 ~) o* }! F/ x2 f. F& LADC_CAL : origin = 0x380080, length = 0x000009' I7 f8 X% E$ r% \, K
...
: l6 P# x- A, c6 E9 J- \}
4 \/ D3 v6 y+ F% |) sSECTIONS
: }) a, n% s2 I# H/ q& }# p9 o{
5 L6 A9 l2 M6 B' j+ J8 y  ]5 L...
) c8 I3 D3 J4 [! l; Z.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD! K* @4 W' u: A% R4 b
..., @1 @; i* ]# E
}% l4 \; ?1 r4 a8 @$ e; |
第三步:在使用ADC前要声明ADC_Cal(),并且在使用ADC_Cal()之前要使能ADC高速时钟。/ \1 q) `: t; {' |% e; m
extern void ADC_cal(void);$ r# O# L: u" Y0 X4 {4 f$ \0 y* ~, U2 q
  c! H$ |7 b1 Q: S
EALLOW;                                                      //允许对受保护的寄存器进行操作1 B! M: ^- \) G! K2 c+ B
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;  //使能时钟
- a/ L4 i- m! n- Z9 H' n% FADC_cal();                                                   
( z" k$ S; g% s- u" P5 vSysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0;  //关闭时钟" R& i& W# y- e/ Q6 a1 {$ u" O. z
EDIS;                                                            //禁止对受保护的寄存器进行操作


6 ~8 j; p) f/ Q! c  }ADC转换软件步骤:! h  q! H$ N" _+ [$ P
初始化DSP系统;  9 r$ _$ T9 I4 e$ e/ \
设置PIE 中断矢量表, 9 v$ {  B( ^: R# {. ~6 r0 k/ ^
初始化ADC模块; ' T! _6 O+ ~7 p. V+ d9 N
将ADC中断的入口地址装入PIE 中断矢量表中,开中断;
# i+ y5 ?/ G1 @' {& z( i. h软件启动ADC转换; ! @# R2 l* c! o
等待ADC中断; " `7 A! G: N& o& w
在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-10-12 15:11 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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