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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

" O. V* f! X; n9 H3 V( c& ^  F4 g9 n! K* |; D! c
     
: l/ n2 J2 Z. J) b( Q  q) K    图17 ^+ e5 ^4 L; L: H
1 d/ v' ~+ ?+ D7 P1 z
9 N( Z+ t0 a( j  C1 X
    第一节SPI Flash硬件电路; K  c8 F1 p# V! t9 H/ Z

+ Y& O, _# E% y( Z7 @  K    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:' e, M" A8 v' V* u" S

7 o+ L# P3 C1 ?/ B8 n9 F' `    2 y: A' q, A9 }2 c3 p
    图2
) B0 u6 _# n" q+ N9 m, @, Z, C/ @8 I+ Y, \3 T& o' [" L
0 {4 f- g1 i2 o# ~0 S# o% \
/ I1 s6 Y. J8 h) o
    第二节 SPI+寄存器, y+ C, d0 N; M# k' M  k: z6 W- r& x
6 d# [  _/ G4 I$ ]: }9 C# a
    2.1 SPI+介绍
8 G5 U1 m1 d+ _
% C& H1 i2 X6 U% \6 O* i3 o( v& A    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。
' e( i' e6 b4 p6 c5 K: a0 ~    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
- L' D( [6 x" d$ j! q
8 y9 {0 }7 z9 H8 M  w9 q% M0 y    2.2 寄存器介绍4 [' f* s7 I3 G" ]) T+ o  e
    2.2.1 SPI控制寄存器0
7 b( T2 H8 g- J( \; t: b% {2 u+ m' o* p0 t' c* ]

% H% t- l' q* Z2 @  g    
: f: d1 k7 r0 `! l( {: C    图3
7 k& F0 |& M0 w- x5 G" A4 r, W    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;
5 E5 `1 G+ U0 V$ M6 r5 x- z- |    14位:SPI中断使能位,’0’表示无效,’1’表示有效;8 z2 T+ @- z8 g) \
    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;' @0 W0 x7 R1 @& w% a
    12位:返回SPI_DI引脚的状态值;0 v6 `4 k5 W9 ~$ n/ _, [
    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;& {$ _7 h! c; C( O
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;; w# f# V1 K! n  z
    9位:‘0’正常操作,‘1’复位SPI;
! k( ^( G  \- @: |    8:7位:SPI数据格式;
* I# M5 W9 {5 `1 o$ t. u; c    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;
, y! Q& S5 V7 a# n  w! s  ]5 K7 o/ }    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
- i7 l1 V6 e: L( O    4:3位:SPI在主模式下的时钟频率选择;
& z2 n+ W+ O4 _( c2 ]% o2 s    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;' t4 y' J% Q! |5 U/ H, R% d- x
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
8 z! n& S% X. V& Q8 U    0位:SPI的开关。
# W" M0 d& {* [5 d: P- U
& Z# ~& o4 R0 M5 V" |2 a    2.2.2 SPI接收/发送寄存器0  @9 o7 |6 Z0 ~( e# Y( X6 q% ^( X1 l

  b- q5 j: m4 E' e    * I4 Y2 e& t6 B- f& i% m
    图4( ~. E; V, l% Z, P: t- Y) P( Q( l
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。  a8 b6 T5 W% T0 m3 v3 ?$ J- d
* h7 I( ~4 N% I9 D: b
    2.2.3 SPI接收/发送寄存器1
8 m4 }! S) |' ^  K9 z
+ D  m$ r, i9 t  \, O    
5 p+ K# [* K- s% N/ E+ s1 h" R    图5
2 x9 s; R) v1 W    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。, G8 i2 `1 N+ Y3 |8 S* A9 y3 l4 |% v
1 F! y. @0 G: [. C. u4 o- y
    2.2.4 SPI清除中断寄存器" e5 b* j& t) a* V3 a% ?2 E/ J( U
! z0 k( v, g2 o% T2 S+ I
   ) |) ~. B; D) O( T' |
    图6
/ b' X6 `3 {% t7 Z    15:0位:写任意值到该寄存器清除SPI的中断标志。
( o, a% u5 l  n& R$ ^0 Z5 [2 q6 ?1 m& K
    2.2.5 SPI控制寄存器18 \! a4 s; n% Y" v

6 g# Q/ N5 H! w! h8 J
6 l- {; r( X- I# [, J   
1 _4 I5 l; c. B* D    图7
) T% Q+ n  l# H: q5 s    15:5位:保留不使用;7 x' U' R2 L6 n  S/ H& D
    4位:决定在9位模式下的第一位的值;
6 u/ a5 W; n+ G; M8 D    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;+ J* h6 ^6 T* B' F$ O# M% s
    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;
) e  Y9 b# R( x0 C    1:0位:SPI_FIFO模式。
9 }+ J5 G, n' `. ~/ l, U! f4 D  n3 d
    2.3 寄存器配置讲解
. W9 e  U: l  r; [1 a    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
" |3 U0 C8 ~+ S$ X1 }* @    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
8 V2 K( D3 L6 I    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)5 U. w" N5 O. ]& a
    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)) ?, V/ ~/ M# F
    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)  Q1 U1 T& @; o- q! _
    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208). u8 E$ P0 Q3 O& Z  L
    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;
  v9 b7 r+ x6 p6 e3 ?4 O# {0 u    SPI的初始化配置寄存器:$ c0 i+ y" R. N% Y2 f: {3 ^
    先关闭SPI, SPI_CTRL_REG =0x8000;
# Z' c, i7 e5 ^2 s! K+ g    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;
% q, V6 d! O; V  F    开SPI, SPI_CTRL_REG | =0x0001;0 t* e6 q$ i) J
    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);  E+ P  u" C+ r. }" `& u0 E) D1 H
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;. ~  c5 a( a7 T: i5 l! e* y3 _

/ d2 W8 c. f) Q. _8 O  ]
5 `7 g6 H3 u4 y7 n( _% k9 ]. B* b
& l7 ^2 H  Q; `- _0 z0 E5 e. {3 g: j    第三节 SPI实验  j9 V. j+ _2 `5 `1 `
# y$ ~. Q( \" N- P! E- }: o7 `
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。. d7 W" u& i0 Y5 ]0 i8 |
    使用USB转串模块连接手机蓝牙串口,连接方式如下:
  u4 y, e# ?7 R" M2 l        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
; s. d) A- F& G; r- a! m. H2 [, U7 X) Y
   * J/ `0 u1 N; z
    图8' j2 k/ J: `1 u  o
    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
8 o/ o$ S" Z) U( k1 K5 o$ `; L/ p  `. N
     
. x; N! ^7 ?- P, {* M. h) D1 p    图9# p& x1 z' `7 T& R5 |/ L$ i& E9 ?
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
8 T9 ]0 S; r& t( M  y" X/ H    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
  v" b  ?$ b8 {8 {5 S
7 x' O) G0 C1 U% X& P1 P    3 |, `7 z$ o9 o$ @
    图104 ?; f- y! T. r/ t9 _6 D# X  v
    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
6 I) {3 A. u5 X# W' |( k7 w
2 u4 z7 S% K4 ?8 V  j2 w* k    
0 ~7 u! e3 a6 Z- E    图11
0 n5 i- p* r8 F0 p8 l1 `: ?    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。+ y- d$ h! X6 X  r: z3 |7 V( V. K
    SPI实验的Keil工程为spi_flash.uvproj,位于目录:2 B5 t6 L; y* |6 V" \3 _8 I
    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
2 u0 j$ L! T, [/ N! k/ l+ ~$ \" ?- H% I6 V+ U7 a/ N
     
8 F. P$ B1 {1 l( q) Q4 q$ _    图12
. \, i. A7 i( o* C# ?4 x    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:8 y2 e, V5 V; H. }

; w: V% n# `. t9 W) E 9 a: K% e, E: N2 Z

2 i0 ?, n' Z. \. ~# O4 u4 o
% O0 b0 z; N% d' a6 v4 h  ^/ f/ ?$ m9 B% m1 C  I
    ! ?' G4 ?4 M( f6 J1 m
    图13' c. G$ g0 e# s) V

; v' ^0 ^6 ~! }- Y- t
0 n0 s0 P, |1 V1 M, E& z- _1 C! K5 P8 q' O
    配套资料:http://www.fengke.club; c1 E: o5 V0 M6 k/ C$ E
    套件地址:http://shop115904315.taobao.com/. A* z! L+ |- F+ p, u
    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0)
( z* x# f" ~9 n7 V- F! k
, W( E5 g) H4 ^1 o! J5 K5 \
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-20 09:57 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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