- <p>这里给出一个实现用DMA传输IIC数据的实现过程</p>
复制代码 : X$ p6 ]) u, T) k6 H% L9 S4 M
这里咱们说3个点+ x# S w9 m" c9 V# ~. T
1.检查IIC总线上是否有指定地址的器件- P- E, K: Z/ Y* u
2.IIC读取数据
* D# `) O0 A$ J# s, X+ _3.IIC写数据
) Z' [3 H7 g3 q4 v% d. ?2 G' I下面来一个一个详细说明
' {( ?/ V4 ~, J0 w5 `, t+ Y
& x' m9 }" O, y, ?# Q1.检查IIC总线上是否有指定地址的器件1 B0 `& \5 ~: b
( p2 V% T! x! K6 k; h! M0 W/ \$ \
- 1.判断是否总线忙,如果忙则等待
+ j5 h1 t8 X$ f - 2.产生起始位
3 z2 ~' |& ^9 ]0 w8 l4 c - 3.等待起始位产生完成& P+ C C. i+ l
- 4.发送器件地址(这里选择读写都是可以的)
% |6 }* Q" \7 L7 }2 z3 ?* o# ~- ` - 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位
- h) b6 S5 \+ q* R" I* m - 6.清楚ADDR标志位
- e) Q9 P& N6 h5 O6 o - 7.产生停止位- j' U( }. R( n3 V$ H! I( V
- 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码 " l5 o, M& n3 c* B8 q; Y4 o' t' t( [2 i
2.IIC读取数据
* u; B9 O1 ~4 C# N# T' x8 S
m4 G- k' p8 ]4 P* L8 {% c- 1.判断是否总线忙,如果忙则等待
7 _! w) H' L6 P. T1 i - 2.产生起始位
, J( W1 O+ r: u Q - 3.等待起始位产生完成
! [% ?9 r7 x) {( k A! } - 4.发送器件地址,这里方向上选择写数据
0 n0 Q# K4 v+ {9 b - 5.等待发送完成,通过判断ADDR标志位是否置位
" A' k8 x8 N7 B- b/ c1 Q - 6.清除ADDR标志位" C; W" W2 L5 |) @1 g( F6 ]% X$ S
- 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
" [. M; x6 [0 Y* [7 O* ~ - 8.发送要读取内存的地址
% ^+ z: x1 G2 k$ M) V; [$ h - 9.等待TXE位置位 Q( b3 i j) [
- 10.再次发送起始位) R# w" Z' [8 |+ p0 _% q
- 11.等待起始位产生完成) T9 [2 g% K0 \
- 12.发送器件地址,这里方向上选择读数据4 C' E. g+ _! X
- 13.等待发送完成,通过判断ADDR标志位是否置位2 s4 W: j4 x$ Z% L" ?/ G1 Q
- 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK
- W4 q _+ J, W$ O - 14.开始用DMA传输下面的数据
复制代码
7 ~8 V' P0 m0 |* \5 L, v. x4 p! ^3.IIC写数据
9 j) V7 c4 D3 ]. O& I F9 D& m4 ~- }
; s3 p" H4 I# S$ U- 1.判断是否总线忙,如果忙则等待
# [4 _, ^1 `6 K6 v3 [3 V: ^8 R3 b' t - 2.产生起始位1 \# p p: w$ z- j$ P$ K
- 3.等待起始位产生完成
1 ]/ t5 P- d5 J( l8 t - 4.发送器件地址,这里方向上选择写数据
! D, P) i* q1 t4 K - 5.等待发送完成,通过判断ADDR标志位是否置位
. L, ?; o) [: `' `# L( { - 6.清除ADDR标志位) |1 `2 }& |9 T0 r1 M+ z! ~
- 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
/ Y# w. y J. e, M' x/ ^/ a' Q - 8.发送要读取内存的地址
$ Y9 q4 A3 G. w; z a G6 Z3 K - 9.等待TXE位置位
& n' R4 O0 d! F& o, `$ c) ^8 W - 10.开始用DMA传输下面的数据
: [7 U$ Q a# t - 11.在DMA传输完成中断中产生停止位
复制代码 # }0 T" _! v2 B4 G ^ e$ R
) E" }# Y+ @$ d, Q( D R# `' K2 G
/ s/ S2 i x6 |( x4 l9 M |