- <p>这里给出一个实现用DMA传输IIC数据的实现过程</p>
复制代码
' E, j8 `/ R* t* L6 d$ N这里咱们说3个点
; W$ T7 ]+ o" d8 ]1.检查IIC总线上是否有指定地址的器件; U( K8 n7 T* k# l: m+ C
2.IIC读取数据
3 b2 {% B. m& N: l2 L ^* ]" l; [6 f- B3.IIC写数据
5 Q, p9 t+ G- G+ d2 T下面来一个一个详细说明
[ P. q( W2 @! a8 t% m) _
% {4 g! L) S* `3 n* m+ _; R: I1.检查IIC总线上是否有指定地址的器件6 S. a6 O. i( C+ L# Q' [- H' g1 N
8 W, F3 o: b7 K- e* _- 1.判断是否总线忙,如果忙则等待
) R2 u) h* V7 w& A4 e - 2.产生起始位
! F0 g! I1 s: W! o1 I - 3.等待起始位产生完成# D3 g" n& ^ m [% \
- 4.发送器件地址(这里选择读写都是可以的)
; x( h ]6 Y6 t2 w8 w! @1 Z* Z - 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位
+ b. \' C% g* d, x - 6.清楚ADDR标志位
; \" e+ c' `9 h' ?, p9 S - 7.产生停止位
3 V' n4 p, T8 @& a6 K u2 d2 J - 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码 $ D8 z% H7 c J( S% d
2.IIC读取数据
) k/ P4 [8 F6 L; s" [* L: ]# l# P
5 u$ _& h, M* p% Z, ]; r- 1.判断是否总线忙,如果忙则等待
* N% K; q o: N/ D" t3 @6 _ - 2.产生起始位
' `; K0 G* l3 W e# Y* _ - 3.等待起始位产生完成
8 G% C9 ~! e A1 k - 4.发送器件地址,这里方向上选择写数据
- Q- F! X* `2 a! M; x - 5.等待发送完成,通过判断ADDR标志位是否置位
) R9 J' a& O9 z# r6 ~ - 6.清除ADDR标志位
1 L' d v( B7 Q' @' B$ L3 j% O( ?9 } - 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
- c4 ^# i" \% Z/ m ?! ] - 8.发送要读取内存的地址
- F, f' C) d. ]1 {) F& V& b5 _ - 9.等待TXE位置位$ T* ~9 C: `1 ?/ F
- 10.再次发送起始位
' c V; Y% n3 w% I - 11.等待起始位产生完成+ X K& q9 T: f2 z' o" |* L* {/ o0 a
- 12.发送器件地址,这里方向上选择读数据5 r7 E" u$ g4 j W* w4 s' E$ j. U) }
- 13.等待发送完成,通过判断ADDR标志位是否置位" ^& a7 _0 G# [- E2 f4 P$ Y0 U) L
- 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK+ n/ |" Q! l9 X
- 14.开始用DMA传输下面的数据
复制代码 1 E1 @- f( M3 H% d6 b
3.IIC写数据
; K0 v# @( @9 A1 \0 [ ?, Y, w1 C! T" U7 }- Y0 ^, \9 [
- 1.判断是否总线忙,如果忙则等待
9 [+ j" r K& j' ?" p' e- @ - 2.产生起始位
5 _7 s# R& y# Q+ L V - 3.等待起始位产生完成
" r2 S7 ^8 G. D - 4.发送器件地址,这里方向上选择写数据/ h# W5 x/ C- c! R: m8 K
- 5.等待发送完成,通过判断ADDR标志位是否置位
4 Z4 {: ~4 T \ - 6.清除ADDR标志位% N3 g. i0 P# ^0 ~/ s/ ^
- 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
- [3 w: V/ ]% s. }3 Y) p) U, A - 8.发送要读取内存的地址
0 W# y9 x4 Q }6 J# x' G$ U" g - 9.等待TXE位置位' v1 _, C9 e: N0 U8 G* G& k
- 10.开始用DMA传输下面的数据
5 K' ]# z! |# A+ _# [ - 11.在DMA传输完成中断中产生停止位
复制代码 ! n# k4 n& D& A
; Y$ B) C2 P3 ~& ^% b0 g0 g
- O8 A+ h1 T/ V1 \5 ~! ~2 s3 _4 h1 I |