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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ARM功能手机
——疯壳·开发板系列
SPI教程   

$ w  V: W0 b, L: f! \# C
( f5 Q9 Z% a8 @1 C' H8 t5 ]% |5 X4 ]" v4 x; K" H

* x$ m. X9 ]3 X( c5 J' a+ r
% d: T6 `: I; i: }    图1
, {7 ]4 g) M1 m1 {" S. {1 a" p+ _% S3 n4 @& D4 u
( X/ ?( d8 A( H3 H# h$ ^
    第一节SPI Flash硬件电路, B- }" O! ]) S
9 R0 e# a8 b: i7 |; \1 e5 k
    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:+ L  ~) @3 H. H
0 ]% G  W5 O, @
   : |" K6 F5 K2 ^
    图28 F4 i, i' v6 f! M, C

& [7 g- X& a+ x/ N
! r3 P2 Y1 B4 i( Q6 x5 U
, Z- l% f6 |/ f* l3 l    第二节 SPI+寄存器
+ y3 V3 H1 H# W' F  e; C! p- y0 b7 ~& F7 @# i6 F0 ^  @* \5 o# }" H& l
    2.1 SPI+介绍
6 F$ m  K5 F" x) c5 A- o2 Z$ q) k1 W! n# _% s& a7 f
    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。' d: h, x( ^- X7 ~, @
    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。% `+ C" b/ h, K0 v" E8 P5 l& m+ F# H

! m9 Y, b% S6 e1 A4 z: Q1 u1 O    2.2 寄存器介绍
' q; S% V) F+ }: U' ~% }7 P2 `    2.2.1 SPI控制寄存器02 M3 Q) C% Y: S, ~/ R* [

& G* o- l. p% m) p
/ W6 E8 k4 d2 L    
2 b1 o- M; f( q% M1 n) {    图3
: n+ Z$ i; @. G+ x$ E( d; z& A  o    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;
' y4 J4 p$ j3 s/ K, a% Y; H    14位:SPI中断使能位,’0’表示无效,’1’表示有效;
8 o5 _( F1 |& n5 f  ~    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;
/ P3 I- w1 D8 q& a* j9 ~  _. S# Y    12位:返回SPI_DI引脚的状态值;
2 E6 _' F8 L( |0 [& {% P    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;1 X7 r  Z; l3 O3 ?1 h. j
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;
3 Q5 a/ H% ^$ c9 d' n1 u) `# A    9位:‘0’正常操作,‘1’复位SPI;7 T; `4 Z" ]( W' m2 y
    8:7位:SPI数据格式;: L$ z9 K" W- J
    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;2 o% y9 e* {4 T
    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
* U; N* N, M) X1 F& c9 w' O# g; ^5 }    4:3位:SPI在主模式下的时钟频率选择;9 b! f0 w, t7 N( s+ h8 _
    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;5 H; s' t% |3 |' A4 x: H
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
& d. N5 {: P, q1 }  E+ s. W    0位:SPI的开关。
! x" U5 r6 P, n. e. u' t6 H: N8 v, w9 n) I9 g' o6 c, Z
    2.2.2 SPI接收/发送寄存器0
. M4 t# H+ q; [$ {' k5 t3 N1 |8 e
* A6 Z6 m$ G! C3 z1 B: N    & b5 P! v) B8 L4 U4 ]) A8 O
    图4
: z& h7 x* |8 Y: M* c    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。
% z2 e; |$ H0 l! E; T. m1 w$ j3 w' V5 w1 v. h' y% O! [5 E
    2.2.3 SPI接收/发送寄存器15 ]7 \% v  o0 m: t: b, m* ^& i

6 A8 k6 \; d8 H+ ]2 _/ [% D     0 L# J4 {! V8 }1 y; j9 ?
    图5# ?/ w3 r8 q( O; Y) W8 w+ {: J( v) n
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。! z; e! z+ b) D3 z  ]7 Y) a
. {' x0 F% K$ H1 D
    2.2.4 SPI清除中断寄存器
- p- C) m! c* v  q  [2 j
4 n* @) }5 \6 H4 \    
& o+ _7 y1 B/ r; S' `3 K. Z    图6
! z% b! i3 R$ h$ Q& _5 n    15:0位:写任意值到该寄存器清除SPI的中断标志。: w- k, @# b& w& d- V

$ e' p$ [1 a& O+ m+ A    2.2.5 SPI控制寄存器14 H( C9 |9 S. q! L

5 t9 m5 U8 |$ _2 {, _4 M - t5 M+ ]% y2 T' ^8 B7 D( ?  P6 f2 W
   7 e: {6 c8 g2 o+ {6 y9 g
    图7
. B$ [+ v" [* {0 @  c0 f    15:5位:保留不使用;2 Q. X5 `9 s0 g* ^: v5 ~- U. t6 I- ^
    4位:决定在9位模式下的第一位的值;
; E: a7 C& I3 J# {" V+ O& M9 P: m    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;7 l3 {! u1 M; L7 o# t  w( b
    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;, K+ t) J8 P$ u1 \& e7 D/ N6 q. B+ X
    1:0位:SPI_FIFO模式。/ n) G* }$ @) o1 A
* l5 P- }! |0 e# W$ k
    2.3 寄存器配置讲解* p0 Q9 I& n; [2 ]2 H
    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
% ]+ Q$ b% x" j+ k  q    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
# Y7 u/ m0 _" d( c7 n, h0 T; {    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)
7 P6 n' U: }9 H    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)* j* A/ B* D6 T9 v2 a9 A% @
    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)6 f' F7 X6 s2 y8 C/ X1 e
    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)
9 B1 v$ V) I" w3 _    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;" R2 [! ~  N1 H" ^
    SPI的初始化配置寄存器:1 v* y( x8 K" u% w+ W) c
    先关闭SPI, SPI_CTRL_REG =0x8000;
  c: T6 Y& ]' K* k& G    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;
# E& t; c; ~- n  C* d' E" e( S    开SPI, SPI_CTRL_REG | =0x0001;; p: j' u0 G7 x; E( Y
    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);
2 g) S: X1 s+ E    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;
* O( H4 }" t  k" k) ^# z' p3 G9 V; Z8 n6 E. T3 h

4 z, V: |# s2 T# M4 e/ S% ?
* Y+ \  M7 z. y    第三节 SPI实验; H3 h, L& w! f$ w& p
& O% H$ E: j0 E1 x. S& X. Q
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
( B+ J  h5 Z# j# e    使用USB转串模块连接手机蓝牙串口,连接方式如下:
6 Y) U% I  C# O  F3 {+ C( n        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:. l5 u; ~$ i1 ~7 E

: i8 ~- C, o5 j5 p: N    
" }$ I4 M6 W! H) T) T  o# T    图8& `- [! ]2 B! L" k" C* z; Q7 f
    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:( d' t$ e& F$ T6 `
  o  p- Y! ^  t! Y2 _- |
   
( s& O8 ?) C3 s+ e) o    图9* z5 y2 \* y8 y# U* u9 H
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:1 s8 ^9 R9 {6 n; Z( k" G
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:  m+ C* \% G$ m' f* F( }( [9 i

$ L! n8 U. T# h    
: @1 N2 b; d2 K' ^    图10
3 Q- C8 {" k9 ]$ c3 O, J    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:2 b  U2 K0 C. A1 ?/ v, a

2 }8 [! [+ e! U4 G   
8 ?0 H5 y: @1 c7 E; y9 Y    图11
( o' M/ w- O" }: v# K0 [    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。4 O+ ]1 p2 j8 F
    SPI实验的Keil工程为spi_flash.uvproj,位于目录:4 x9 W4 S4 z2 l. h( L
    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
4 m, G6 `+ H5 q) `( s% P
4 r# P* J6 _+ G' U, @. y* B* r    
% \0 Q) f3 {0 I% U0 L0 l3 N! j/ K# H9 W    图12! G3 m0 W' R0 p7 {$ K( F( A$ w
    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:
4 \) d9 ^& {4 t/ X- G) D
3 e" X1 x8 n! l4 B' V2 e$ F
9 T* y0 K, Z7 o. ~% C1 R. y5 v$ ~, t
$ y7 S$ g5 _% ~( k8 _

, K6 b$ ~9 ~" O8 S  c/ R# |    
4 V* c- S3 ^5 n5 ^- U7 R9 u    图13
0 ^2 [  y, R, C7 K9 _2 q
, W% y' @- U' z% B+ J; C8 I0 r% X" ?% }( z$ p& E1 @
- ]; C9 V$ e& J, o  c
" _8 a: r& J6 C+ Z
     文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0)
  i( ~2 Q, y- L( E7 c% A) E) I. y8 f/ c# v  D

! f4 E6 Y  p1 b2 e$ y7 O

该用户从未签到

2#
发表于 2022-9-6 13:07 | 只看该作者
有没有演示的教程
& L+ Y) O. O) ^1 b; X" S+ q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-21 05:27 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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