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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

$ Q3 D7 w' Z( e5 x% C% a2 R9 k; ~+ q& T2 a4 |3 Q
     
! Q/ t# c$ ?; ~  O- @% [. r. M    图1
0 M  ^8 ?& p9 D8 |% o8 l! v! S2 W$ Y" z% }2 V$ @9 k) r

: x- D7 z) {9 ~/ M8 u    第一节SPI Flash硬件电路
4 ]- t( p- p; P. M! A# Z8 [; q$ h9 Q4 w8 S2 F7 o" @
    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:
8 @. q3 a, n8 ?1 ^
9 E( v% r/ U& p7 V8 D    ' ]& K" K( F9 t* |! S9 F
    图24 g; V- G  X& u! `7 u
8 j5 q5 p2 `  u/ G: ^1 F% a

0 D8 K. R8 r$ \0 H
9 e, x! J& \: X    第二节 SPI+寄存器
6 T2 t/ c# [4 f: V' @# y, t# N2 |' ^0 S5 h* u/ ^0 l: {6 N5 H  {  p
    2.1 SPI+介绍, e, K+ u  @2 y" R

3 O) K* a4 \) H/ P" N* w& e! Q6 v    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。
+ y) C9 P, R" C- w3 N8 b- g    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
; V( \3 }2 v; f$ ?3 ?* {
2 L+ w: M/ V1 J, T2 H/ ^5 W/ C/ i    2.2 寄存器介绍1 a& O' P0 u+ X! V; y& L! f
    2.2.1 SPI控制寄存器0
4 z! |  B" k; J6 b* F3 z- G  q
- ~$ d  a7 N% C5 M' i 4 Z1 L* o8 V$ M6 c% a9 _) d
    % z' k* ^3 j' R  m7 k
    图3
/ A4 s# u# e( B& y% |% r    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;6 _, b( Q: Z; l, r) N" |* Y
    14位:SPI中断使能位,’0’表示无效,’1’表示有效;; @  x/ A7 e7 I7 u
    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;
4 T) ^; f  c5 O8 ~, U- y    12位:返回SPI_DI引脚的状态值;5 t1 u5 s' A1 N' B  j% a
    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;; _, o6 T! e+ N( J# q9 _% y
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;
6 ~  D3 |& {& m5 I6 O2 n+ l, {    9位:‘0’正常操作,‘1’复位SPI;
8 x; ]) \* Y6 G2 u6 \1 ~9 |    8:7位:SPI数据格式;
8 \- l; f9 V" o8 l' D- B    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;$ |3 Z7 L  S2 D* }8 ]
    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
9 [/ {8 J+ }, }& X  n* A    4:3位:SPI在主模式下的时钟频率选择;
5 E! U5 U" _4 e5 X: e2 y, X    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;
+ Q: Z; U* k1 u, d    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)8 w& v% j: {0 E1 l& E% J
    0位:SPI的开关。
# s3 d' F8 ~4 _0 y9 C. [6 X$ a( ^) S* _" V0 F4 g5 o
    2.2.2 SPI接收/发送寄存器0
$ k1 M- d2 p( z, k7 p% j+ J, v: p& |% y: h3 c- M# R. k
   
5 |" V+ e: G* q; }7 t$ h    图4
2 r# X: @0 n" |    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。5 N5 w# w2 [# }! D2 E( E6 P
3 k6 z1 i) ~' z' m  i( e& c- m0 M
    2.2.3 SPI接收/发送寄存器17 ^5 t1 F' T( R: \2 N/ {
8 {1 }0 U% n. A+ @
   # y0 u  Q3 Q+ K, e9 }- b: V8 d
    图5( t; y/ M2 M! t
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。
8 t, c% o, D* q) `  D' @& U
" ~6 ^+ f) `+ r5 W3 y    2.2.4 SPI清除中断寄存器# a- g) }! F" _; x, s/ n# Q

5 f2 B1 L) r3 e5 y& _    : O# V8 y+ `# |) t8 \9 X4 G0 s" C: j+ Q
    图6. ]' _$ u7 ]7 A) Y9 w
    15:0位:写任意值到该寄存器清除SPI的中断标志。% B( `* E$ C4 C6 Q8 N

! s6 |5 P4 N! P" I+ Z8 s4 B7 u    2.2.5 SPI控制寄存器15 p2 n- S7 q7 l% l! M
5 f( L0 Y8 |+ q5 W! l! \: `
, |3 ~1 D0 Z; w3 ?9 w1 @; G
  , I- |* `/ S; q# y
    图7: r- Q! q6 M# J9 A/ A
    15:5位:保留不使用;. W: M7 [  C  ^. i
    4位:决定在9位模式下的第一位的值;
4 ^4 _) m* ~' C    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;
" }* a, U. R. H0 n% m( ]    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;# S" @8 f& |; G9 H' @
    1:0位:SPI_FIFO模式。
! {! ?+ a$ X, x# ]( f/ Z/ T! ^4 m5 a, h$ {7 g% k3 {8 h
    2.3 寄存器配置讲解
; W) O( x) R3 K# n6 ^    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)1 @# L. u# U, m' {! N/ B0 {
    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
# X, y$ W' B( J: Z    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)1 }9 r- f4 M1 p$ G
    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)
0 w2 q+ j8 k  z  I: S    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
5 [6 _- Z) o* t" V' |" ]3 v+ n4 K- ]    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)- z4 G% p+ ~) B
    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;7 z1 Z9 c" Y% Y( b( D1 s8 L6 w& R
    SPI的初始化配置寄存器:; b8 X( m3 b5 {/ D! e
    先关闭SPI, SPI_CTRL_REG =0x8000;
# k9 W+ ~5 G9 K7 K% Z    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;
4 N/ _. I2 q# i; y' G0 ]1 W8 B  E    开SPI, SPI_CTRL_REG | =0x0001;9 y8 g/ F  `/ _' r' q
    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);- K; J) |& Z- x% H
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;1 h" ?0 o2 |3 k
* H8 Y- Z3 J/ ~0 w
7 L2 X  C& K6 C" n( Y( T$ `
; \/ C% v& E, Q: d
    第三节 SPI实验' v" k. t: M1 W# K- f5 W# u
) ]& ?& W1 f  a1 O  J
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
. [7 J5 [3 e6 j1 z    使用USB转串模块连接手机蓝牙串口,连接方式如下:0 ]' Y9 Z; F' w0 I3 S' u9 n
        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
2 f0 Y; y! W$ s
' j6 u) d8 |% w- D- b4 A    9 s4 k) u( V/ K4 A+ Y# v
    图8
7 h" f- L& S  R' n% \. c  U    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
+ F! J1 f# v" p5 B( D) \5 C. g3 {: A8 J  `
     $ b3 z5 f: b0 \' `' @% M2 ?
    图9! Y' i' M3 O' f, H
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:; C/ A0 ?9 ]* X# G
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:! V6 R2 E% G3 z: X9 o; E9 G' x$ V
; A8 n7 v8 {" M- ^7 M1 \8 G
   
; ^/ p4 F% O$ [+ k( H, C, T) {    图10
' \% q. ?6 g$ I6 }    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
# O% g( R- Y. v% C3 b3 `' t( P1 k6 f; M, V5 O, @
   
1 C7 f1 C1 U7 ?0 A. q* `3 w    图11
6 A& c9 F% t$ k8 p1 \+ O    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。. u$ t8 K; ?# `. x( w3 a8 f
    SPI实验的Keil工程为spi_flash.uvproj,位于目录:
! f/ j1 j' e5 h/ p    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:5 n; u9 A3 Y! C/ [2 r9 C

+ [( x) c$ f& U5 W) Q9 K0 H     
1 d& K7 c. B8 @; f. ^    图12
2 }7 d0 _$ x( V+ r- @( T    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:' J, l  N% q, i7 r) h5 t

/ s3 M0 C; N1 u5 F9 R
- v3 z2 K# }# ^
* B) G( A& f2 |8 }/ u " B7 w3 i: N- _! s
' _( m6 V7 T- X3 T7 a
    5 J3 U% ]* A' i+ z: a. I( G
    图13
6 Z3 A7 a! ^' d: s% o6 P) t8 D' Z8 K( ?
$ E! ~7 s% V4 x8 h

: I0 @+ K3 E# }  M7 p# P    配套资料:http://www.fengke.club
' h5 W+ E8 x3 P+ ^2 r    套件地址:http://shop115904315.taobao.com/" i& c' ?4 R8 i6 n  R
    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0)   d& \5 ?2 `) i  W  o1 Y, G
  u0 v& r5 s3 r2 |/ t
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-11 22:49 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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