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

【开发教程7】ARM功能手机-SPI教程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-18 19:21 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

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

x
SPI教程
——疯壳·开发板系列
3 V3 e' m" `) `; J3 [, `* T" P

0 ?! r2 T; u% U# X     
2 j+ M) c2 w) d! [" g    图1
& p3 Y: Z- R! v5 Y' p- K# D
+ v4 M( T, d& a% t5 Y
" I% H) ^; \, o. n% M% @    第一节SPI Flash硬件电路! Y# J( v9 l) \
3 M5 c" x9 ]; I& F4 b. X6 b; }2 ?
    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:
2 Q1 k# ^- |8 ?4 ]' Y4 K9 Q+ W& j: [+ m# [. d4 d
   & C1 B% t5 c- V
    图2
. R; c4 ~" j6 f0 J: m% X& s  T: I( a; ~" `# n3 K
4 P/ a' a9 Q' i6 v
6 v( `8 P; Z) U5 w- }( ^, x% w
    第二节 SPI+寄存器
6 J4 J, ]. ]2 r" A5 S' o1 T
" A/ I) u' \1 c. @7 }    2.1 SPI+介绍+ J# O) c- P- E7 a% [( ^' w

% }1 p4 Y: J) p2 |3 F! g    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。* y' h0 i! y# k* S! N& ?$ N9 _
    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。, `) [) B" R4 D) k

/ r8 c5 }- N% m. ~2 w    2.2 寄存器介绍. ^" Y3 H# c9 q5 r* e- R" e
    2.2.1 SPI控制寄存器00 F& [3 S- I) |4 ^# ^$ u/ [
# z# K9 a8 e" G" O# ?, x! s; M# L6 A" N

' M8 l" k& ?1 F" r  P: U     % D1 p! e: ^5 K' k& \3 |& N: P
    图3+ L* f0 F, K" v
    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;
1 z5 P9 t; g- F6 C* c7 g0 d    14位:SPI中断使能位,’0’表示无效,’1’表示有效;
, h9 Q8 t% T# ^6 U    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;
3 q# O! O2 [0 f  H1 J8 W    12位:返回SPI_DI引脚的状态值;
. Y/ b( Q9 M0 k) F# d3 p    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;6 G: @3 H; q1 q. T8 ^
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;
0 z$ ?7 u2 E3 f' _, W  l* d    9位:‘0’正常操作,‘1’复位SPI;
! E, N) k; y0 T+ S% I, p5 R& i4 ~    8:7位:SPI数据格式;! Z) U. B0 S9 `7 J0 t
    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;
0 q# q2 J% \/ a# o# T    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
- |( O4 o6 K4 b" h, a9 `    4:3位:SPI在主模式下的时钟频率选择;
5 @: ]0 u$ o6 C" s: r: ^6 k    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;% p4 J8 I3 L$ r) Y3 T/ q$ w
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
  Z, n0 r% \7 [6 g3 }' B    0位:SPI的开关。
  ?* n" ^. e% I; H
2 r1 F5 s% ^: B    2.2.2 SPI接收/发送寄存器0' o% w; a; N  j4 L4 s$ r6 A" r6 t2 W
2 \1 y0 e4 d: ^) P8 m
   
  q& q* U$ t5 d5 _3 m. |7 [4 P    图4
( h: W6 b' y! y1 g( O" ]1 _7 j    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。
9 \3 K$ _4 H! {8 e  I+ I1 g, Y( H
* T1 H6 X# U+ W8 k0 ^    2.2.3 SPI接收/发送寄存器13 |1 X5 ~- v/ ~6 \9 K4 _

) O1 [, Q/ v- @0 Z/ x    
, Z# G( r9 v2 A* ~7 C. b) y, O# v& ^    图5
. t0 [4 g$ C: u3 G$ O1 Q    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。
! K4 {7 Y( j+ [# d9 ]2 f3 p. n: U! E' [( o9 g, S
    2.2.4 SPI清除中断寄存器9 T2 [0 y9 w8 B3 [: S
, X4 W: i/ r4 w9 _
   $ N4 h1 }! j* W6 e* Q
    图6$ h8 `# W, p* u2 b4 W/ a
    15:0位:写任意值到该寄存器清除SPI的中断标志。$ d6 c' q4 w- t4 x% c& l! |

: \1 _% K+ Y, T2 w# C9 {    2.2.5 SPI控制寄存器1
( q, e( M* t- K: O0 t% \8 ^; f. h% t% }. _4 F: y  o% f  j

$ [8 |# J& ]" e7 x) F7 ~9 |   / I5 Y- W# B* Y% Z0 q5 S1 U; p
    图7' T& I/ c2 w$ s
    15:5位:保留不使用;! ?* S/ `% D0 E1 w
    4位:决定在9位模式下的第一位的值;
: @" n4 K( `/ ]4 }: d    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;
- v, U4 q! f% S9 T    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;. {% K, Y; ^) d9 X8 a& n* P* F/ [2 e
    1:0位:SPI_FIFO模式。2 _0 @! W* B$ X0 r5 `$ j

  o8 q0 T: T- Y9 c5 P" [2 P8 s. y    2.3 寄存器配置讲解
, r" |% T8 f* i8 I% I    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004): Z7 X( Z1 V( G. z9 Z. }
    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200): |) m5 Q5 o% G
    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)( ^& D. n0 B7 k
    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)
% m9 J. S. k+ q3 \7 }    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
+ G0 ]0 W4 b  c/ n/ L: n    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)
% K- A( n" t& K    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;0 Q+ ^2 x# W& I9 o4 j' r
    SPI的初始化配置寄存器:5 a* d3 b( G$ h' P& d% \
    先关闭SPI, SPI_CTRL_REG =0x8000;
, A# }% Q9 f2 d9 i# |    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;
  K  e1 V+ h% i1 ~, a9 u- k    开SPI, SPI_CTRL_REG | =0x0001;! I+ q! [5 r. c- t# ~$ [9 p
    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);& V- n! z- B8 A
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;# d3 a* C& d7 g/ J6 O4 L# q3 T% d
  Y6 Z8 l/ b5 F% _
( d& m$ h' H2 ]3 n! ~
0 U: d6 C8 {  I6 J9 J8 S1 {* R
    第三节 SPI实验% D& U7 f% ~7 h* t+ {" c6 y8 l

- n/ k% V) ?& s4 {, D    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。( x6 S# p/ I: I, o& y
    使用USB转串模块连接手机蓝牙串口,连接方式如下:
2 T  L. N" E9 L( s* B; Y        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:: D7 D- }& C% V/ C0 }

. g( x, z8 z+ m% M; t/ Q" z    
% F* c, c! u4 i6 h    图8$ s: ^# A" b4 Y+ ?7 E
    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
, v+ q7 i; |  b$ j" i- `/ e5 Y" t) ?4 y) E: m5 ^
     ! ?6 l" ?$ i. m; P" C8 B
    图9) j1 K  r# P" @/ d4 O
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
. }7 a. s) D/ d    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:" y. M# p; n! R8 h% ~

& F* Y# D, ^9 h    
! s/ G" U$ ^# x  P" `- K    图10
5 K# X: ~! `0 j    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
; q4 u: P( x! R% k( f: O# b' {
0 C' k3 }. A2 \0 |1 K: k    
& _. X" y9 c4 U* l& h- R    图11
1 [  m- \$ F& C& J' d    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。! V) n% M1 Y% t, O& U& @
    SPI实验的Keil工程为spi_flash.uvproj,位于目录:. f8 S7 \% x& {6 t0 f8 l
    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
$ W* q, h5 ~! k3 R4 M. Y+ Z
" ~/ D4 C0 B6 j+ T# e  Z4 j     
4 j% u" t& M9 J$ T+ I    图12
) V. Y( A+ @4 T: [. A3 j4 T5 Q$ w, N! L    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:
/ M0 s. t" P5 Y$ S8 @; }( r+ b8 M6 Q1 H. U7 C) w' j% J

2 S  Q: J# t6 ?- Z9 i+ i! Q; X) L9 ]) y6 U

5 I+ E4 |. ~, \  }( O2 F) }6 P- {2 L6 M' b
    ! P$ d/ F: A& S* S9 r& M( s7 `& b' C9 ]
    图131 O+ G$ K+ q& t3 s: O
. L8 E7 l& N4 W& @  J

4 y/ r. k5 R/ q& u  ^8 C9 z8 I% B- w( ~% m  N% B0 q/ V, P5 Z
    配套资料:http://www.fengke.club- M; e! p' n- G) {9 M" Q' o
    套件地址:http://shop115904315.taobao.com/* I4 A9 F6 M) t. |1 j0 g; N
    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0) % c7 ^+ }9 B, |3 i% H

. j3 K- m6 J( B- l7 K# \) u( H$ w
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-24 10:03 | 只看该作者
    在学校做过这种,嵌入式控制的感觉很有意思
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 19:52 , Processed in 0.187500 second(s), 27 queries , Gzip On.

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

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

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