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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
SPI教程
——疯壳·开发板系列

7 i  W( }2 s% l; h
% k1 [- }9 H3 h; O     # [' C1 R3 c0 v8 i/ j8 x" p
    图17 n& P( m; }; T( |9 k) r0 I

8 Q( J/ `( @+ |. O  t" c' ]
+ [+ F" W9 w, l    第一节SPI Flash硬件电路
  m  e' l2 r' n( a8 y
+ c9 s$ f0 |  @! ]' f5 \; N$ H    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:' Y( p+ v4 u! R7 L& |: H3 a; ]

7 {; Z7 K; r( E3 ?    
9 ~6 g6 Q. k4 u1 y9 ?4 x: B    图2  e2 J8 Z+ X/ [9 ~- i

. @) \' }+ W% z* Z+ R# \9 d& W2 {7 H+ |
# ~, S6 o+ |" T
    第二节 SPI+寄存器
* m" t5 l6 r. k6 s2 A
6 j% _8 _4 {; C5 [( A9 t    2.1 SPI+介绍
8 }, t, `- p8 [: U6 @9 S' B( `; z: \! |8 C
    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。
1 X4 i9 C3 U3 M" R; R+ G( T* ^    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。4 h* D# r& y7 l7 B& L# s
4 T8 x1 Z/ {8 n3 m2 x7 q
    2.2 寄存器介绍
2 V# R% }; y4 X3 n2 O& f    2.2.1 SPI控制寄存器0
, D) L4 ]0 j* E  b* a- S) B. s5 ~4 W

, [5 a( `' `5 R% x: W! C    
9 |# G) e; {, {    图3
- }5 C, ?$ u  I) f" Z( U5 ]    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;5 {6 p, |' m+ O4 `8 h2 e8 T1 z
    14位:SPI中断使能位,’0’表示无效,’1’表示有效;
5 L2 M% V8 R* x( q3 P) X' [1 h5 I3 W    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;9 D9 x* B# ^; W/ ^* |
    12位:返回SPI_DI引脚的状态值;1 z- v- F( ^9 g( j' |( w
    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;: j  _! a& R- V; P
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;  b6 v; d. R! y7 c/ }1 h
    9位:‘0’正常操作,‘1’复位SPI;- O/ N! h$ A$ p) L% S; Z$ y
    8:7位:SPI数据格式;
% O" q1 ?: G+ g- A0 C) L* o. R8 y    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;
" K- ]) o; r" Z4 h    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
* D: k+ m- W( z( K5 K6 W' X    4:3位:SPI在主模式下的时钟频率选择;7 [1 a+ A3 g0 E+ {& a
    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;
& A7 m8 h* X0 V0 v    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
  f( ]: O& X+ _3 Z: q    0位:SPI的开关。
% r( O9 U: y! [3 k3 N9 i) u1 L/ ?# d" G
    2.2.2 SPI接收/发送寄存器0! x. B: ^& K2 `9 u  E- k; L
+ h( N& H$ n* n3 t$ L
   4 j7 Y7 m  O% R9 p" d
    图4' }1 m$ G- Z* f( P/ D5 F
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。
- c: J" S$ f5 `9 ?. {0 x- O. B5 K* m. R7 ~6 n  x# {2 u+ X
    2.2.3 SPI接收/发送寄存器10 V7 I$ |+ T# n* `' p

/ n% V1 r6 n2 }0 x6 E' b    
- z2 E- ^: i, W$ n0 p    图5$ z5 a7 M+ f& m4 B! ~) l. Q
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。( R, ]- |- c* e  E
. j. w6 e3 M% k. j
    2.2.4 SPI清除中断寄存器$ |4 ?5 r- ^1 k0 j. H" n# k$ _

+ m3 |: J# [; v3 i! G    8 K3 E: n$ A% q, ^1 _( @
    图6
/ W% q% l: j( n; z7 B+ G8 {    15:0位:写任意值到该寄存器清除SPI的中断标志。
. g. y; `% @: s6 ?/ }1 g4 O6 g2 Q9 {6 V
    2.2.5 SPI控制寄存器1) q4 S( j8 ?! |8 d1 b3 z( R/ ?% y
+ l3 b" V; n! b3 R9 o
7 p4 p) w8 p/ f, t
  0 \) m* u; p) y8 G6 D. g
    图7, j, [2 C% t$ y- [, ?
    15:5位:保留不使用;6 q4 B8 v6 c4 I, X7 W
    4位:决定在9位模式下的第一位的值;' N' y/ v5 w1 e# g) Q3 ]
    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;- {5 |2 D  e9 `" \7 i0 ?
    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;; v+ G7 |- c  g3 v- S' r6 Z: Y
    1:0位:SPI_FIFO模式。
/ b6 Q3 e5 X& J( y8 Y
0 y; o# q& S/ Q0 P9 D5 Y+ t' p    2.3 寄存器配置讲解
" |  t+ S! O& u& i% n/ Y    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
! W1 |4 t( J2 O* \% f' }! l9 A1 F    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200), H7 _" N6 H5 j1 P  P
    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)
) k8 K6 i' x5 P6 v0 n/ N; ^    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204): j5 K4 q. k# h1 }! r
    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
6 h' l3 F& Y: Q* V- R# H    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)
9 d% Z: d  _9 o. ?) j    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;
* N: |( f0 y* q( r  x$ Z2 D- o% c" V    SPI的初始化配置寄存器:) H4 o  z7 i- U) L+ l0 k1 ~! v
    先关闭SPI, SPI_CTRL_REG =0x8000;9 W$ {$ C+ ~  }: N
    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;  p; j/ \/ a) Z' N! U; r
    开SPI, SPI_CTRL_REG | =0x0001;) _9 P; a! [8 g+ p7 M6 p
    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);8 `6 ?( H" s3 h) L# D3 g
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;
5 n1 N6 H6 w: ?  K
6 }4 a, X& |) I0 t3 [1 Z- c
0 _# f3 M, |- O" j2 r: M1 `; O% |2 C8 F- ^
    第三节 SPI实验
! s% }8 D. X; [/ \
$ g% @6 \& M- r% O2 n) m& F+ B    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
  j2 o+ e& q# z$ Q$ T" d1 w    使用USB转串模块连接手机蓝牙串口,连接方式如下:
: f( n1 s. F/ ~+ ~) z9 O; u        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
2 p) U8 p+ p7 I* O. q  s0 S2 h7 a* i# Z0 B0 r
   
$ D/ B4 N1 }1 f    图8. Y, ~$ x* a* T& W, Q' J
    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:6 Z) D( F: O: x7 I5 J4 p

0 J9 R+ `' p+ F  e, g     % c5 U& [  s  w5 U+ r
    图9
6 B  u! d# _: A  x' K    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:. d6 B: o! h% S$ J$ K. \: z: [* a) @
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:3 L. {+ U& Z! Z7 T
$ L" `9 j* x1 E
   
; F8 n, i* e7 x0 k( k3 x    图10
1 J+ L) a- M5 }# q    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
! C1 q6 A! b( ]6 h5 g* H# ]
0 o/ o1 n! z: B' C    ! ^0 s: D' K9 A0 b2 p4 S/ p8 {, P& W
    图11, ?: I" |1 J' v8 f& h6 K; Z
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。; b# m" j+ r! j! h( U( G" c
    SPI实验的Keil工程为spi_flash.uvproj,位于目录:
8 u( w( B% c9 R0 F% z    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
4 z' U) Y- R0 q5 v2 o. ]: o, f# Y0 h. Y$ h
     
/ l8 m0 j' Z9 G, |- G4 ^    图123 w8 v0 E! u8 L0 J! X$ Y
    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:4 D4 s& P' U5 }$ x  |* \5 U
" f! }* V/ V' L( {8 T

: [" X. g4 I- u' }0 o& N" f( ?4 x) j3 ^! N$ r0 ]0 L0 @

3 C* A) |( d" W. A
+ [& w' W, t; {    
6 Q0 W0 T* D& m' B; @    图13
4 E4 m# m2 Z, W! ]+ a# b
$ _# e/ g7 M/ [; t% f7 T0 x* I7 E: q' z  ]4 N: W/ g$ q; C& W

' U; B2 v8 [, ?1 |5 N8 Q  o/ I    配套资料:http://www.fengke.club
) L2 o+ V7 @6 B1 s6 c4 X# }    套件地址:http://shop115904315.taobao.com/" h8 A' I" t3 R* }
    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0)
, f/ `! U- n+ ~, v# c" G- B4 a* p, D8 t$ q* G1 Y" c
  • 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 18:02 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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