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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

0 G6 X& n* H$ }+ x2 N+ y
/ t0 X8 U0 {7 @6 n  {, p3 u% u     
. Q  r+ q, I" K    图1# H# b- c( q% z) y" m
6 U% b! K8 _+ A: x: F% B
4 w8 j+ ^5 c; k& s
    第一节SPI Flash硬件电路# }$ y. {( {# r, t* s: U5 m
6 z. t3 ~& Z! N5 }
    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:1 l7 m: h1 y" _4 p0 A/ e

3 b' R! y; B5 j: x$ K+ T    
; ~( @* y$ C  Z+ S6 a) _    图2# Z6 Y1 G# {% u( g

6 Z) G. ~' h2 n( W! N! _5 n* I; \) a2 z; e/ b9 L

/ j2 }  t% ^% [3 X! G% n  ]    第二节 SPI+寄存器0 m! p  t' K' b) N+ c
6 I  l. A# K1 k" l) |  u  l
    2.1 SPI+介绍$ h% _: S: j9 k* b, R6 p
$ I0 O( @  i7 u, U
    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。; L. u7 O- _& a4 r* M5 h
    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
; ]+ O* {& B" @. ]' p' S, x3 C, _$ G  X6 E8 E
    2.2 寄存器介绍6 z! r! Y& t4 [- r2 L) h3 z
    2.2.1 SPI控制寄存器05 X3 V/ }0 [4 t
' G/ q: f3 n# i: j5 b8 |$ ^  i+ _
. \1 S9 X! i, n1 U, S- T8 s
    & b  n5 f3 n, K9 P9 i
    图3
: H: d8 v9 u5 u' N    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;
& t5 a' I  Y3 e' D3 m- b    14位:SPI中断使能位,’0’表示无效,’1’表示有效;# Q. b: z  |  L9 [
    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;
4 A4 l4 J3 S+ B5 i! d    12位:返回SPI_DI引脚的状态值;
+ y$ u/ e! D* x    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;
. q# p2 e# u8 `    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;7 I% }; s% q- Q) c0 a
    9位:‘0’正常操作,‘1’复位SPI;
1 T8 s: i7 D" Q/ A4 L- B    8:7位:SPI数据格式;4 Z' A/ j% U; r0 e- C& {- n
    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;
2 v2 y  e4 P: [/ s    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
* I! t2 C0 f8 y/ t) {    4:3位:SPI在主模式下的时钟频率选择;
: B9 @0 b7 I# O! D: i! K* m# s    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;7 @; _& s9 i/ |; F0 [9 ~1 h
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)$ d3 V6 Q5 N- |4 A1 m6 W  |
    0位:SPI的开关。
' G& e8 t( `$ q9 w+ u9 Y0 Z
+ e% T+ l8 V& a    2.2.2 SPI接收/发送寄存器0
/ Y0 h; V% \$ E! L5 I+ P
5 P5 ~3 _; w/ k& ^" p    * W5 b: ~7 U  ^; J
    图4/ k) H8 j( E- U! U
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。
, {& N# @- |$ Q& x' v6 c" K3 b$ y. @8 d" J& H2 s# j! }8 V
    2.2.3 SPI接收/发送寄存器1
6 |- @4 B2 M1 S7 t0 C
! o, e% u7 O) A' R    
" f! j6 j: T3 `% }5 a4 K7 }$ n    图5  y" b3 `. n3 w1 s8 I/ B* j4 u
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。
. y$ W- ?" {4 V: P/ W
) W2 b/ [/ a3 y5 C9 Z. q8 M    2.2.4 SPI清除中断寄存器$ W% V9 E& }* L8 I# x$ p
& P7 v$ G; @& H" z
   # V# d. q: H- E8 U6 B5 {7 E* Y
    图6
) b7 t  M! \: G    15:0位:写任意值到该寄存器清除SPI的中断标志。( v8 U# n. H3 w* K

+ V9 ^  G+ o- d$ w" R; l; c    2.2.5 SPI控制寄存器1
) N( ]7 k! S# W) Y
0 c) m5 j! K# U, M1 m : Z3 I- b& |! G; l$ W
  
  J9 z4 B6 J" S    图7, o+ m& M3 k7 t; e: |0 I" [0 s
    15:5位:保留不使用;3 I( z5 R" i0 e) N! M& e3 }0 \& }
    4位:决定在9位模式下的第一位的值;
5 w2 y5 i# N' i    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;
- K8 p  ]: p# [2 W    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;% k4 U# y/ L- Q2 t/ `
    1:0位:SPI_FIFO模式。* `' F, u6 i% f- |! Y8 Y. ^1 k

4 E, X! Q) l3 v    2.3 寄存器配置讲解9 ]& J6 S# N1 O& h, Z
    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
8 C6 }9 ~  G! h  F( D* v; X    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
2 F% S6 J" |; F" q2 n    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)
6 c% o& t$ a5 |) Z( ]/ P8 u+ K    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)
* `: z! e% ^7 O8 k& J) }! F    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
. x% Z: U( W# A* j( y    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)
7 J; A) K3 X  z& }: C    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;
+ r% u; w- X( `" G. z3 B    SPI的初始化配置寄存器:% l; N3 i! M" [8 B1 o. {
    先关闭SPI, SPI_CTRL_REG =0x8000;
) \" @1 V: m, f# ^) t6 u4 J  c. `* e    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;% c2 x" @6 S9 Y; `( x) G4 W
    开SPI, SPI_CTRL_REG | =0x0001;
# M  C: r& j3 e1 d    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);
" w4 D" ^& s  H( V' s6 l* Y    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;, ^/ s: |& r+ j9 ]4 v) `
  K9 g6 ^, x9 M: t9 r  e) z
( F8 Y5 b6 e2 ]) e% ?' W" M
0 l+ r: p, B; Z4 K1 R7 `
    第三节 SPI实验
) h+ N1 x3 ?6 v  G5 Z2 j5 l8 C
6 B- x& P, o1 w7 L! Z    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
3 T7 g" V/ n0 o9 @( N% `    使用USB转串模块连接手机蓝牙串口,连接方式如下:; C3 A) _+ y* ?9 i! K
        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:- S' d: W9 D6 y+ I
9 B4 W- F( Q( K$ S/ L; O6 u
   : q( r5 @8 i" m3 @. x) B  _
    图8
+ m( ~$ b; O$ v. `( X7 o; ~    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:: P6 I; E7 H3 N

' U2 B8 `, W9 z( K8 v. c     
( R) I: P6 n! X& j; N" e5 `3 i    图9( s0 a& l  v* }, R" |# u4 T' U; I
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
, f+ a# \% O! c4 ?, p* |6 C    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
, R" c$ J; V9 N4 @  L: U" S! V
- c  o) T. N3 ^  h: R# {    + U4 D* b2 Z  I' v7 n
    图10! h7 ~# a* d& B7 o' H/ K/ B
    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
/ R8 q" ^* l, m9 F0 S1 e' {' V& D- g3 W, J! Z4 V' H, o; k4 `  k' W
   ) k/ Y: c$ k  H) w4 K* A2 h
    图11
8 S" l- |# B) R* Y& T+ g9 X    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。9 B9 _. g6 ~4 a/ {; a8 Z- F& N  K1 D0 q
    SPI实验的Keil工程为spi_flash.uvproj,位于目录:
2 H1 M* [/ I8 j& P$ R    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
& ?0 S0 D8 H# L6 P8 N/ o* T" C+ b
1 X- p' U  k. V     * x* r& f- n5 V2 ~+ I& \' @
    图125 O, }! |. K$ Z, k) T% \/ ~, T
    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:, ~& M+ e/ h% c! B% V2 M' E
( d' q/ f' n& E( o# a: E
) H6 s' Y: f8 t5 S
" i1 o. W8 z8 }  g5 e6 `( U" F. }0 N

) T" Z) [% D2 e" E3 i3 T- @1 w) Z& z- |: T
    7 r4 N! I3 X6 Q. F' [+ P
    图13/ M; Q3 R' Y4 e; p- e4 C" R6 I
) j& w2 ?# a+ U, a& J
# i) T5 h. H" a- f% M! n
6 k% d4 i' ^2 T( Q* g7 R1 q6 F- F: f
    配套资料:http://www.fengke.club. h+ S$ D+ G! x
    套件地址:http://shop115904315.taobao.com/+ t% y, \3 {, v
    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0)
2 H9 K# b7 m9 n
! |, O5 t- F% V6 p! Y/ i6 ?
  • 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-24 01:14 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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