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

【疯壳·ARM开发教程10】ARM功能手机-SPI教程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-1 14:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
ARM功能手机
——疯壳·开发板系列
SPI教程   
. M# s9 y( F5 j' s$ B
! t4 i2 G$ E; v/ t! e. H* z  P) f& m

0 ]6 v+ z  r3 U* |- }/ M8 w$ g/ \0 @( |# s3 q  M1 x  ^

( E* U$ Y# a. u; `: @8 Y    图18 K' Z: h" d6 C. S8 i

% ]( C$ j! F4 l' d, M
; h3 s) S2 N* _& l4 q: D    第一节SPI Flash硬件电路
- {! |/ ^! Y6 d. j% T7 A4 ~' |% s3 ~' ^/ ]* Y& S. z0 c" z
    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:- P, o6 T6 I& D5 s0 f! I

( N8 \6 V5 V7 t9 Z    
: V, z  A% L4 S. W/ z6 y! E4 X& o    图2
$ V8 B) r) Q8 y9 N0 t+ I- e7 G" R& F( c# u" Z' e' ?
0 D% k' H: _- ^6 L

+ `/ L2 l! ~: M4 W) S3 B6 Y    第二节 SPI+寄存器
% o$ v, q8 ~, U( K- |& }
4 y* g. R( g6 u4 w) S, n    2.1 SPI+介绍7 e8 F+ O; Y8 ]# M: J- z

2 ]& l4 e" z0 D/ b# U' D6 R    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。2 b/ V, f# O1 [- `* U
    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
  v- B, M, M& M) Y8 f. P* A4 U2 ]. z% P/ R
    2.2 寄存器介绍
/ g6 s* N2 A2 `7 ^3 ^: o    2.2.1 SPI控制寄存器0
9 O! X5 f! t0 e2 o4 s/ j' C; B0 P; Y0 o  p

5 w$ L( ^& U6 {/ O% b% z4 f0 v4 [( y1 u      I! y, D- w2 D, K6 r
    图3
) c# e" g- B4 p9 i* a. b    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;
+ n  O' U' u# ~    14位:SPI中断使能位,’0’表示无效,’1’表示有效;
- d8 r& r; T  z" A# v: T    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;
. B% \* T' _& n    12位:返回SPI_DI引脚的状态值;, T+ _4 r* A( q' l2 z9 _8 q, N+ \" \
    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;
3 `# ?: Q( y; N6 s% g+ R: _% p$ u7 i1 p    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;
, N- p( E, U! I9 d4 U, e+ Y0 H    9位:‘0’正常操作,‘1’复位SPI;1 ~' @$ v% d' b3 l( |
    8:7位:SPI数据格式;
  i) h' ?# g) Y, S0 E7 C- e    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;' J) o$ V2 u. k8 j% d! S7 c$ Z$ m- g
    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;) C; Q  Y1 _. \: \
    4:3位:SPI在主模式下的时钟频率选择;9 K# ]) b) d% N1 [! ?& o5 b3 P4 ^
    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;
! [; o( c1 M/ `$ R    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)' e5 v- C& z; q1 T
    0位:SPI的开关。
* k$ @" _7 }! v0 m) l4 K+ {2 f  s6 I: W. Y
    2.2.2 SPI接收/发送寄存器0* b9 q% G) F9 ^
, E' p9 O1 }* x
   
, n. J  {  L$ P1 ]2 P+ ]    图4
: D+ M. N9 g2 s- }: w2 h; e    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。
  W+ `. X. x% Y$ d! q2 x% _8 l0 t4 K" g, M! I) V
    2.2.3 SPI接收/发送寄存器10 u; W" d/ ^; y8 m5 y+ V. ^

; o1 |( o7 }6 I, }& s3 l, [     0 s3 c7 ?) ~& g# @2 R, x. g
    图53 K6 K$ q( _2 T1 b
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。& ]% [' h% H  Y, h

* `" c8 L3 s% \+ ^    2.2.4 SPI清除中断寄存器
& i, F  q* u8 {, d
- U% D) v4 F! U/ n% R    # {+ k  I6 N1 W# r/ \5 W# _
    图6
7 L+ R6 G7 q6 n- j" @" d! N    15:0位:写任意值到该寄存器清除SPI的中断标志。
' q2 B) L8 p# z+ `- L( l
1 w* H9 j2 O0 k: k  h    2.2.5 SPI控制寄存器1
# Q( g; ]! \. Z; w+ u0 H' S& q2 p3 ~7 J: U( F# t
) T2 C- u+ M, }# a, I* j
   
- f" P  D; R8 p/ K    图7$ c+ c! H% ?& p% n* ]
    15:5位:保留不使用;
* h* }% I  k/ `! a$ A5 c1 w    4位:决定在9位模式下的第一位的值;8 x* n# s: L  l- a* H
    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;
" {3 I1 V( |- V! v* c# ?. g    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;/ P7 J) P7 ]' O' g7 g1 |
    1:0位:SPI_FIFO模式。
3 E" `+ o$ m  k& m$ Y) e8 K& J. d- H8 n' d5 u: F
    2.3 寄存器配置讲解
0 C1 k  b' {" ~  Y0 y    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)# j7 a) M" P8 N" z5 H4 v" _
    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
- L0 B# z! e7 m0 f/ B7 c/ D    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)- M' u, ?; g, T7 C: {( }, y% ?
    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)0 |) o, c& m, \8 f
    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
8 U! m; h8 U3 ]( s! H" ^  h& `    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)
" y+ I5 P: _& u/ I) |    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;' i6 W/ q0 |) |$ `
    SPI的初始化配置寄存器:* j. Q7 V. s9 {4 _' ?) K
    先关闭SPI, SPI_CTRL_REG =0x8000;7 D+ U6 d6 C, }# u1 g
    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;1 D1 D1 q: e6 R2 P
    开SPI, SPI_CTRL_REG | =0x0001;, z; }) X8 P! [5 P( |. j& O
    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);, v/ Q2 g# z; `$ v1 i
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;
  |: L2 |+ ^9 |: _- e0 `
% x9 d! t& d( ]+ ]8 r4 S) g7 I, J  h+ C4 m
; o% U5 F) s4 o2 R( A
    第三节 SPI实验) V( C- A1 G3 a+ `8 t

" g* g* s3 M  Q+ o    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。- e: Q  a/ s) s# Q% a1 i# a
    使用USB转串模块连接手机蓝牙串口,连接方式如下:
  d' x: E. E+ n6 D# w5 e& w        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
% U9 o; [. F: E. `/ Y% ]& e2 L/ r9 B/ C. W
   # Q2 u6 Y+ v+ x5 R6 k
    图8
% t, Z3 ]4 Y% F* R6 }9 m" K3 S    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:9 \' X+ R! F) e4 `1 J( a" I
1 U6 k0 L7 k6 N3 U. T1 P, N9 P
    ' M& S6 Q! t+ O
    图91 z& i1 g1 B+ Q+ H
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:; J  R. X) f# M9 p
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
# E& |* B+ Z& K6 Y% U8 F* ?. Z, y6 Q7 g  N
   
( O9 A! s3 x3 W    图10
$ t; K- z& _5 [7 I, D    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
/ V) h% Z! X: ?+ o, U, B5 Y, r
  
* u$ S5 r- A% o    图11( ]& C& ]. l8 w! D; L
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
+ \, O+ _. _: c  ]; v) s    SPI实验的Keil工程为spi_flash.uvproj,位于目录:
2 w4 C* N& G) d+ M    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:$ [9 P9 M  o1 u- f7 f- ?
# ]; B3 s+ c/ f) T
    2 t5 ~4 p' j% c, X
    图12
! u0 z3 U5 d$ ?4 }8 |* F* o2 @    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:. p% L$ T2 V" a2 e: A9 A1 w

0 t4 f: S& F" S( x 5 u* _" ~* i# z
* ]( T# l) `) a$ v" g3 e" D1 j) K3 m

+ W8 b* p5 t8 r$ B8 N" V2 \1 g* i2 m3 U% {0 h' n- X8 B3 S. L
   
$ h  C; L2 X& c, D  C2 ?    图13" `* B5 D3 v& l, x0 o- j
1 a7 c/ Q  y$ f. e% {, J
- L# V9 r2 j0 j; F- m; `, j6 R

6 Y/ W9 X7 V: ~+ W5 b! a9 k; W# V9 Z7 b# ]* Q" ?, p
     文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0) 6 ~+ U! l" o3 S6 b- |2 x. s

0 x2 G# D- L8 L% v3 _3 _0 h/ Y- h! q# c% `0 e( x% z1 J

该用户从未签到

2#
发表于 2022-9-6 13:07 | 只看该作者
有没有演示的教程
+ A* a4 K7 m9 G  w3 H  r$ ?, ]& o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-12 23:58 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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