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

TMS320F28335之ADC功能

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

TMS320F28335内部包含12位AD转换器,其功能有:2 B2 h# e& j" ]6 m9 ^& J& p# ]
具有内置(采样保持)S/H的12位ADC内核
# }0 _2 H1 J* ~2 x8 y, ^7 k模拟输入:0.0V至3.0V(高于3.0V的电压产生满刻度转换结果)。( e7 I( ]2 C- M; [- b/ k+ p
快速转换率:在25MHzADC时钟12.5MSPS上时高达80ns
; A$ I. }; v1 P. F$ s9 Z$ {16个专用ADC通道。
8 B, A8 H( Y% t0 G每次采样/保持都有复用的8通道
, P( Z' m# \3 T6 @! |自动定序功能在单次会话中可提供多达16次“自动转换”。可将每次转换编程为选择16个输入信道中的任何一个。
1 `7 r9 Z. j) {, a8 l序列发生器可运行为2个独立的8态序列发生器,或作为1个较大的16态序列发生器(即2个级联的8态序列发生器)。1 N$ m" O( n' T5 F( R4 I+ z8 `1 {; [
用于存储转换值的16个结果寄存器(可分别寻址)$ v- A7 M' {8 ]
– 输入模拟电压的数值源自:
4 x4 }" V# m$ G8 z当input<0时:digital value =0;4 N6 x, B4 r  H( \9 P/ E8 N. c2 h
当0<input<3.0时:digital value =4096*(input analog voltage-ADCLO)/3;) @3 d7 f  ]4 K" u, V0 @: R
当input>3.0时:digital value =4095;

& a: P9 [1 A0 u
作为转换开始(SOC)序列源的多个触发器
7 \5 r, `# A9 n1 b9 T5 W– S/W-软件立即启动8 T2 T) Z: G/ n8 d# O' X# W8 k: k
– ePWMM转换开始9 P3 E3 U# s# n
– XINT2ADC转换开始
& m. T8 W3 w! d3 `1 Z# B2 e灵活的中断控制允许每个序列结束(EOS) 或每个其它EOS上的中断请求。* {. l% z& X5 s9 b2 {2 I2 l
序列发生器可运行于“启/停”模式,从而实现多个“时序触发器”同步转换。% Q0 Q) e7 g; A' I
SOCA和SOCB触发器可独立运行在双序列发生器模式中。
/ O7 J6 ~- q9 `6 g. e采样保持(S/H)采集时间窗口具有独立的预分频控制。

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

ADC未被使用,ADC连接
+ E& B$ Z0 D. E8 v9 @建议保持针对模拟电源引脚的连接,即便在ADC未被使用时也是如此。下面总结了如果ADC未在应用中使用,应该如何连接ADC引脚:
* M2 ?, L: A8 L8 @; w3 D? VDD1A18/VDD2A18-连接至VDD% ~# K3 m0 T# {) z
? VDDA2,VDDAIO-连接至VDDIO6 C+ d; c/ G5 S6 O3 l9 J7 p4 I
? VSS1AGND/VSS2AGND,VSSA2,VSSAIO-连接至VSS
: ]( `7 K, |2 v% s* t? ADCLO-连接至VSS$ B6 l8 @0 [4 ]9 [/ n% n6 Z- p
? ADCREFIN-连接至VSS
1 H$ ~# j9 b0 T. V5 i# J, s$ W? ADCREFP/ADCREFM-连接一个100nF电容器至VSS! \0 {$ d7 `4 x1 Y2 x0 `- r# l6 k
? ADCRESEXT-连接一个20k?电阻器(非常松散的耐受)至VSS。
, w4 L+ K. l9 e0 p1 F? ADCINAn,ADCINBn-连接至VSS
- l7 A: |6 `6 p+ P. Q当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开。, h& s2 @; T9 @+ s
当在一个应用中使用ADC模块时,未使用的ADC输入引脚应被连接至模拟接地(VSS1AGND/VSS2AGND)

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

) ?' W2 [6 T* V& `( b% q
struct ADCTRL1_BITS {      // bits  description
- G; ?9 t, R% Y+ [+ ~5 B: s    Uint16  rsvd1:4;               // 3:0   reserved* W6 L- P; C3 i" n# [! o" O% H
    Uint16  SEQ_CASC:1;      // 4     Cascaded sequencer mode 级联序列模式
; W0 w( K/ N2 N% L! E2 H1 A* z: n    Uint16  SEQ_OVRD:1;     // 5     Sequencer override  序列发生器覆盖
5 r# Z- e$ Z; M, q& _- r    Uint16  CONT_RUN:1;    // 6     Continuous run 连续运行模式
" [0 _6 y' S4 D1 }    Uint16  CPS:1;                // 7     ADC core clock pre-scalar ADC核心时钟分频. ?! `2 o9 w: i  n- \6 Q. X) d
    Uint16  ACQ_PS:4;         // 11:8  Acquisition window size采集窗口大小+ B+ o; ~9 d* K' L% L' [
    Uint16  SUSMOD:2;       // 13:12 Emulation suspend mode仿真挂起模式9 g3 C& s- O* h) D1 J" I
    Uint16  RESET:1;          // 14    ADC reset ADC复位- Y0 Z* Z  T+ E
    Uint16  rsvd2:1;            // 15    reserved 保留6 m) ~+ s3 P/ q: }# a
};
; J/ S' {( q. l9 d下面的联合体主要是为了解决对这个寄存器的控制,可以是整体赋值液可以是一位一位的赋值。5 l3 n& D; Y4 i7 H, U  Y8 R
union ADCTRL1_REG {
4 i6 R! `9 _0 Z3 L& X   Uint16                all;3 e/ [. [+ K# C; f" M* E9 @- \& H* H! i
   struct ADCTRL1_BITS   bit;
! Q- v" k" I6 A1 ^0 W};


9 }- y1 _: `9 E$ ]struct ADCTRL2_BITS {                     // bits  description. X7 N7 A3 ]) r& ?5 T: `; r' Z
    Uint16  EPWM_SOCB_SEQ2:1;        // 0     EPWM compare B SOC mask for SEQ2  增强PWM比较器B作为SEQ2的启动转换标志" }3 }5 g9 J+ K$ e+ X, r" Q
    Uint16  rsvd1:1;                               // 1     reserved5 ]7 k) @. g( o+ c7 y6 t; N* z( O
    Uint16  INT_MOD_SEQ2:1;             // 2     SEQ2 Interrupt mode  SEQ2终端模式                 " v/ D2 m* P+ c2 [4 C
    Uint16  INT_ENA_SEQ2:1;               // 3     SEQ2 Interrupt enable  SEQ2中断使能
  s2 u7 j& {2 S/ p6 @8 w  D8 e    Uint16  rsvd2:1;                               // 4     reserved
$ b; u4 J" J1 n9 G( v' R    Uint16  SOC_SEQ2:1;                      // 5     Start of conversion for SEQ2 启动SEQ2转换
8 F& D+ w9 C' Z- |7 F    Uint16  RST_SEQ2:1;                      // 6     Reset SEQ2     SEQ2复位
  Z* X8 [, D. s    Uint16  EXT_SOC_SEQ1:1;             // 7     External start of conversion for SEQ1        序列1的外部转换启动
1 c2 Y* `6 }% [( u    Uint16  EPWM_SOCA_SEQ1:1;       // 8     EPWM compare B SOC mask for SEQ1
1 ^4 c# R  H, J9 h, V    Uint16  rsvd3:1;                              // 9     reserved) B- X. x5 _, K5 Y4 L
    Uint16  INT_MOD_SEQ1:1;            // 10    SEQ1 Interrupt mode
1 [5 [4 r3 s5 \2 i1 A5 j    Uint16  INT_ENA_SEQ1:1;             // 11    SEQ1 Interrupt enable
9 I4 K6 n! p( P0 q! f    Uint16  rsvd4:1;                             // 12    reserved9 V( s: K" A8 @& }! y! Q
    Uint16  SOC_SEQ1:1;                    // 13    Start of conversion trigger for SEQ1+ s. J6 J0 k/ `
    Uint16  RST_SEQ1:1;                    // 14    Restart sequencer 1   
$ K# K0 G, t, d* L/ o/ I; M  g2 O    Uint16  EPWM_SOCB_SEQ:1;       // 15    EPWM compare B SOC enable  G3 I  I, V# p& f  }
};

8 _& u5 O+ k) m- E" N+ L9 X


0 k" x8 s6 q' B0 Dstruct ADCASEQSR_BITS {       // bits   description' `9 L% _0 F4 I0 [! Y- O- J
    Uint16  SEQ1_STATE:4;     // 3:0    SEQ1 state   序列1的状态
; i/ R) S& H- V. B% b* Y2 M0 G    Uint16  SEQ2_STATE:3;     // 6:4    SEQ2 state   序列2的状态0 Y2 B$ [  l% ^6 U& P: N; @# J" h9 ~
    Uint16  rsvd1:1;          // 7      reserved
, a; r- N6 I0 p7 C    Uint16  SEQ_CNTR:4;       // 11:8   Sequencing counter status   序列计数器状态+ ]. L& g+ C: g% e. }7 M4 t0 I- F9 a5 u
    Uint16  rsvd2:4;          // 15:12  reserved  
$ G- N, }0 Q( a+ H};


  J: r  m5 R' ?1 @" ]

, m  f9 z) j5 Z: z% M
ADC最大转换信道数寄存器% }$ e* Q( E+ _- V' _
struct ADCMAXCONV_BITS {      // bits  description0 v7 g$ z! u6 t# R$ Y5 B* u
    Uint16  MAX_CONV1:4;      // 3:0   Max number of conversions   序列1最大转换通道数# v% V9 f  p& w( E" W
    Uint16  MAX_CONV2:3;      // 6:4   Max number of conversions    序列2最大转换通道数
# R0 S  r2 ~" G* f    Uint16  rsvd1:9;          // 15:7  reserved
8 @0 `8 Q) j1 R9 h! k2 P- e};

* W6 S2 I7 u3 w* \+ J
ADC信道选择排序控制寄存器; j: e0 v4 ]8 |8 o
SEQ1只能使用ADCCHSELSEQ1和ADCCHSELSEQ2;AEQ2只能使用ADCCHSELSEQ3和ADCCHSELSEQ4
: `4 A) P0 q6 Z/ j" astruct ADCCHSELSEQ1_BITS {    // bits   description0 J# C0 w" H/ C! v4 J
    Uint16  CONV00:4;         // 3:0    Conversion selection 00/ |" J! a7 ~/ f' d
    Uint16  CONV01:4;         // 7:4    Conversion selection 01" e# R  A/ Y4 \3 B& {1 r
    Uint16  CONV02:4;         // 11:8   Conversion selection 02  B- t/ d. V( X0 V
    Uint16  CONV03:4;         // 15:12  Conversion selection 03; I- x2 a, D- h. v& Y
};* k7 x6 q/ x8 [' c$ s' g$ l3 v
struct ADCCHSELSEQ2_BITS {    // bits   description& I4 Q% S3 ]  c" R+ r4 }
    Uint16  CONV04:4;         // 3:0    Conversion selection 04; z6 J6 Z+ I) P+ R3 Y0 n! J8 j8 S
    Uint16  CONV05:4;         // 7:4    Conversion selection 05( B8 N4 R( |9 @  ^: w
    Uint16  CONV06:4;         // 11:8   Conversion selection 06
9 s* l  v) x. Z/ L- g: s3 i    Uint16  CONV07:4;         // 15:12  Conversion selection 07! J3 x2 Y( v; G+ L6 u' E: u( h
};
- |, s; D8 t; `, d' t- e& xstruct ADCCHSELSEQ3_BITS {    // bits   description
3 s; v/ H$ _' m1 O2 @2 _    Uint16  CONV08:4;         // 3:0    Conversion selection 081 s# d) U3 b8 @$ d% ?
    Uint16  CONV09:4;         // 7:4    Conversion selection 09( N2 i, ^$ P7 K
    Uint16  CONV10:4;         // 11:8   Conversion selection 10
, k/ r7 ?! u, `6 H  L    Uint16  CONV11:4;         // 15:12  Conversion selection 11
% S1 U5 V- k8 o6 k7 b1 K2 n1 f};
* U- `& p# x$ xstruct ADCCHSELSEQ4_BITS {    // bits   description% N# N6 S- `9 @, A. ]8 S# m
    Uint16  CONV12:4;         // 3:0    Conversion selection 12
! Q/ ?4 A8 }5 w: F4 {    Uint16  CONV13:4;         // 7:4    Conversion selection 13# q5 `4 M# `0 B/ G0 [9 v
    Uint16  CONV14:4;         // 11:8   Conversion selection 14
& I7 P: L1 V8 y; ?: q    Uint16  CONV15:4;         // 15:12  Conversion selection 15  [+ K1 V5 v* M8 h1 I
};

7 c* |) i, W9 }7 [- [7 M
控制寄存器38 e0 H1 ^1 q8 A6 ]. b) l
struct ADCTRL3_BITS {         // bits   description7 X' {# Q# n6 e( {2 ~
    Uint16   SMODE_SEL:1;     // 0      Sampling mode select  采样模式选择; J/ Y# H1 L& d3 K' J$ y' f
    Uint16   ADCCLKPS:4;      // 4:1    ADC core clock divider  ADC时钟分频器7 R: R4 m6 ?( Z; w# G% {2 _
    Uint16   ADCPWDN:1;       // 5      ADC powerdown    ADC断电???
; C* F4 a. [6 L/ J" [9 J    Uint16   ADCBGRFDN:2;     // 7:6    ADC bandgap/ref power down  ADC参考/带隙断电  ???
1 C% h7 O7 P8 h4 d3 {/ g  i    Uint16   rsvd1:8;         // 15:8   reserved
7 l, t1 B! y/ o3 D% ]% Y};

% {+ e9 v2 M& x* ?/ a+ A5 x
状态寄存器
6 _7 S! D+ g, [+ m+ G% Q" v* fstruct ADCST_BITS {           // bits   description$ U' {' X4 u/ m8 d" h
    Uint16   INT_SEQ1:1;      // 0      SEQ1 Interrupt flag   序列1中断标志
5 ?2 x  k1 a/ j. g, t    Uint16   INT_SEQ2:1;      // 1      SEQ2 Interrupt flag   序列2中断标志
* q' G$ ^2 u, H    Uint16   SEQ1_BSY:1;      // 2      SEQ1 busy status      序列1忙标志" A, f% {1 F) X
    Uint16   SEQ2_BSY:1;      // 3      SEQ2 busy status     序列2忙标志/ s! a5 W0 d! P7 ^
    Uint16   INT_SEQ1_CLR:1;  // 4      SEQ1 Interrupt clear  清除序列1中断标志
0 m/ D" @0 ^3 A, m1 X6 I2 v8 w    Uint16   INT_SEQ2_CLR:1;  // 5      SEQ2 Interrupt clear  清除序列2中断标志" Y5 {9 o4 N! X0 [/ `, [
    Uint16   EOS_BUF1:1;      // 6      End of sequence buffer1   序列缓冲器1结束& d3 I8 l9 w' ]: r, U! t, E
    Uint16   EOS_BUF2:1;      // 7      End of sequence buffer23 b0 A! t0 s' _
    Uint16   rsvd1:8;         // 15:8   reserved
* f5 c# }4 O) ]7 W* c};

' ~; l4 q: Y! {1 |3 K* z) w


1 A4 ~% G0 S, a) K2 estruct ADCREFSEL_BITS {       // bits   description
, @8 F' n/ e/ B. ^( yUint16   rsvd1:14;        // 13:0   reserved    X: z% j. L# E' i* o$ X5 t* H3 Y
Uint16   REF_SEL:2;       // 15:14  Reference select   参考选择???* t& Q. B! c8 R4 Q8 q& |/ ]8 l
};

& X" G3 W- w, q) N6 o* w) q9 _2 I
struct ADCOFFTRIM_BITS{       // bits   description! _4 Y% k" A: U" N, d9 B
int16 OFFSET_TRIM:9;    // 8:0    Offset Trim   偏移微调???
# v3 c8 e8 `2 |& x" d" G" V( mUint16 rsvd1:7;          // 15:9   reserved3 C8 K' i+ j, K( f# r( l
};


  u, V& U7 l. b  A/ @6 ]6 _0 u1 c% A) HADC寄存器
$ x9 H/ i6 r$ j* b/ Estruct ADC_REGS {
* w) m4 w- O7 c5 B    union  ADCTRL1_REG       ADCTRL1;                   // ADC Control 1
( [8 }5 r" t) T8 K  l: z; H$ ~/ Z* o    union  ADCTRL2_REG       ADCTRL2;                   // ADC Control 29 `" ^, I9 b# y4 N* _
    union  ADCMAXCONV_REG    ADCMAXCONV;    // Max conversions
! H* z8 l+ \7 ~: T* Z1 G+ W9 c5 K    union  ADCCHSELSEQ1_REG  ADCCHSELSEQ1;  // Channel select sequencing control 1
" {5 r% Q1 f7 i6 k; E6 z9 `    union  ADCCHSELSEQ2_REG  ADCCHSELSEQ2;  // Channel select sequencing control 2+ ^: R" h+ Y% K; D
    union  ADCCHSELSEQ3_REG  ADCCHSELSEQ3;  // Channel select sequencing control 3
( H4 u+ X' P' m0 B9 q    union  ADCCHSELSEQ4_REG  ADCCHSELSEQ4;  // Channel select sequencing control 40 |" _# I0 q0 x
    union  ADCASEQSR_REG       ADCASEQSR;        // Autosequence status register9 V2 k  S; p' P
    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0
- {; G* M+ V2 e+ F' s. B# o    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1# i  o" X2 ], K, V; V
    Uint16                 ADCRESULT2;    // Conversion Result Buffer 2
) c$ [6 N& `0 K    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3* ^0 G% y5 }8 T" d+ [) {
    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4* n% c7 g) I# c& Y4 k8 u
    Uint16                 ADCRESULT5;    // Conversion Result Buffer 5
' U5 q# F7 h0 F$ u- Y    Uint16                 ADCRESULT6;    // Conversion Result Buffer 66 W3 M7 @5 S& ?6 M
    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
. u9 K3 ~' p- E6 d7 O+ D    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8
2 `6 }5 W# b# P0 V0 R1 M    Uint16                 ADCRESULT9;    // Conversion Result Buffer 96 e; L$ C& V9 Q
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 10
) n* A; P  u0 B! @4 K" ]  a- q0 _    Uint16                 ADCRESULT11;   // Conversion Result Buffer 11
2 r  ?! n4 h) K& k- b% Y  s    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12- o1 s7 V0 p" A8 J# e
    Uint16                 ADCRESULT13;   // Conversion Result Buffer 13% s, r% @: |& [$ i9 I  k
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 14
5 t; {! ^) `+ L  i1 q+ h    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15: T  D  G2 d& c5 @( Y1 H  S
    union  ADCTRL3_REG      ADCTRL3;       // ADC Control 3  
" ~$ t! W& o0 b2 q' P    union  ADCST_REG          ADCST;         // ADC Status Register, k; B9 A9 T; F0 T. j+ Y
    Uint16                 rsvd1;
  h/ f7 S& O. ^# Y5 v    Uint16                 rsvd2;5 O/ |" a5 A5 ]" }  {, J9 N
    union  ADCREFSEL_REG      ADCREFSEL;      // Reference Select Register
1 f$ k' I! {# y* X  `; ~% z    union  ADCOFFTRIM_REG   ADCOFFTRIM;    // Offset Trim Register! u, F8 {% E; h( {: q9 ?
};
( W' e* A: |; M0 k' O" t& Istruct ADC_RESULT_MIRROR_REGS( y( L6 x7 b* o) T5 j/ J6 m
{
$ X" K0 E1 H" N9 x/ p8 e# A6 `    Uint16                 ADCRESULT0;    // Conversion Result Buffer 0
6 A' N1 I5 ^* D$ }) q- m( ^4 t    Uint16                 ADCRESULT1;    // Conversion Result Buffer 1  _6 m* R" x. {: t* k
    Uint16                 ADCRESULT2;    // Conversion Result Buffer 26 g0 T  f/ K# n( o# t2 R9 m! ~' r. ~4 }
    Uint16                 ADCRESULT3;    // Conversion Result Buffer 3
3 `. ~% T6 s, ^, W    Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
" S' ~3 V! c3 P0 L  D1 x7 h/ u    Uint16                 ADCRESULT5;    // Conversion Result Buffer 51 w" c0 n$ F' f+ \5 r% w; a8 K
    Uint16                 ADCRESULT6;    // Conversion Result Buffer 6
0 L: ^8 k8 B- g( J0 A. U    Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
  ?1 z& i! c* v    Uint16                 ADCRESULT8;    // Conversion Result Buffer 8
+ v) V: H/ c; m' n8 C( m+ D    Uint16                 ADCRESULT9;    // Conversion Result Buffer 96 J# J; v: u  \/ s# N4 U) L
    Uint16                 ADCRESULT10;   // Conversion Result Buffer 107 u- {% y5 L5 _1 S8 H
    Uint16                 ADCRESULT11;   // Conversion Result Buffer 115 r" Z% E- F- _) v  d2 |
    Uint16                 ADCRESULT12;   // Conversion Result Buffer 12
, z) ~, A5 S/ c1 s    Uint16                 ADCRESULT13;   // Conversion Result Buffer 135 D+ U/ O6 H4 A' b! ]
    Uint16                 ADCRESULT14;   // Conversion Result Buffer 14
# b2 v$ Y3 P, i% V7 I1 M    Uint16                 ADCRESULT15;   // Conversion Result Buffer 15; v1 p- z& ]5 Q
};

0 ?" o1 r5 J. G6 S4 t8 I  d


9 U. Q* G0 Q9 L2 mADC_Cal()常规步骤:
: t7 b* r" W0 `" [9 J1 {第一步:这个是TI公司提供的文件
9 |+ g% G  ]) M1 X% Z' P.def _ADC_cal                                                      ;定义代码段名称
4 J, o# ?2 y% c, w9 H.asg "0x711C", ADCREFSEL_LOC                         ;ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C , ]; s7 h$ j: b
.sect".adc_cal"
7 I7 b& Y! G7 k4 O" Y8 H_ADC_cal7 g/ y/ U" @- v- V
MOVW DP, #ADCREFSEL_LOC >> 6        ;此时 DP = 0x7100
" t" m. @( n: A! r5 A" t& L  TMOV @28, #0xAAAA                                ;地址 : 0x7100 + 28
' D  P6 [6 I) m4 Q! Y$ f  HMOV @29, #0xBBBB                                 ;地址 : 0x7100 + 29/ s: G: m4 J! A" z
LRETR( z3 `2 M4 Y: m1 t- b  d" ^$ R
第二步:为 ADC_Cal() 添加命令文件
  L4 Z* {! W: [$ X% B! }" @MEMORY
( w& D" H' ^+ E& W6 w6 }0 ~. |{
" S1 ~  L! W2 p5 z) j8 oPAGE 0 :
7 M8 c$ {, d2 b, s...% y1 ], Z* r( m: \0 j$ F! ]/ |
ADC_CAL : origin = 0x380080, length = 0x0000093 H) {7 J2 ?# l' ^* @6 o
...
- t# k" {7 H2 }, f* I}; w5 t! `; i5 l  o; j$ ^( x" c
SECTIONS
; i0 X, c, ~6 `3 g: c{
" c4 }$ v& {/ r: q...! u3 l6 N4 ^. H; ]
.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD4 p0 ]( c" e/ N, Z3 @# m! _- h
...$ Y! m8 H5 D# ], ?
}! z4 m' S' v- d2 r( Y2 w
第三步:在使用ADC前要声明ADC_Cal(),并且在使用ADC_Cal()之前要使能ADC高速时钟。
: N2 S- O( f0 i3 @. `& aextern void ADC_cal(void);  R4 T  s; H. V# h: o) w
4 ?) I+ f: l4 Y( L3 S
EALLOW;                                                      //允许对受保护的寄存器进行操作
2 k; V% B; |9 n6 x2 y' GSysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;  //使能时钟
4 t  L. K- b* w: G. eADC_cal();                                                   
, P7 G' J  h( G  p$ \" QSysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0;  //关闭时钟
$ Q% K4 F& d+ U) J" TEDIS;                                                            //禁止对受保护的寄存器进行操作


- _, e/ u7 W3 W: {" C& R( UADC转换软件步骤:
4 h, P( ~" R0 @2 x初始化DSP系统;  
8 N* }- L- ^) E, E4 C1 E+ d设置PIE 中断矢量表,
: \+ ?1 z; }& r6 [2 N7 S2 `; [初始化ADC模块; & o/ p8 p/ {; R3 h! u& }. L" X. M
将ADC中断的入口地址装入PIE 中断矢量表中,开中断; 3 d" ?# \# U3 j) l3 m$ p6 ~
软件启动ADC转换; 2 J3 d1 ?5 [4 f- @+ O
等待ADC中断; $ \  @" L, e( C0 d( O  d" D3 C: P) J4 ~
在ADC中断中读取ADC转换结果,软件启动下一次ADC中断。

该用户从未签到

5#
发表于 2021-12-2 13:10 | 只看该作者
当ADC未被使用时,为了达到节能的目的,请确保到ADC模块的时钟未被打开

该用户从未签到

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

该用户从未签到

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

该用户从未签到

2#
发表于 2021-12-2 13:09 | 只看该作者
每次采样/保持都有复用的8通道
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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