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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
SPI教程
——疯壳·开发板系列
# Z  S' ^4 b2 L
2 }7 |6 G- q& m" C; {, e0 A9 o
     
; o2 j1 y- W3 V& x" a5 K    图1& w) |0 w" R. T3 i7 @

4 m& ^4 g9 f1 B6 d. L
- m- m% T4 y, c: u2 ^/ Q" Z    第一节SPI Flash硬件电路/ E' Q! X  X) ^
/ _: ^- c3 B  E8 L
    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:
/ c6 h$ S8 y8 ^; u
1 ~2 W* Z: W$ F' S) S    , A9 a% d# Z- O$ x: f- g& S2 |; F8 E/ Z
    图2- T7 L/ U7 L2 B0 W3 M7 ]& x1 j3 v

9 C  `( R4 C" `8 W0 d  x0 N# S
3 ^4 G. [1 k" V* L4 }; P* }
; ?  m7 Q7 W3 i0 d& `; M/ R0 E) G6 k    第二节 SPI+寄存器
: ^3 Q+ @5 y5 e8 V# X" B: C
7 @4 l% Y. x* h$ Y/ g    2.1 SPI+介绍
% M* p+ X% m/ o6 U  F" B$ q5 k# o5 ?/ _0 O3 u. n+ n7 f" s
    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。
. @/ S% s4 O: R  S5 k7 R    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。( U3 k5 D+ G8 O8 `
, i: x* ]+ B, K6 o  \% ~5 h
    2.2 寄存器介绍
+ `) M+ q) L. }, k9 d5 n    2.2.1 SPI控制寄存器0
$ b4 U/ H# P' Q
5 ~: E0 J) Z+ T4 D 2 A2 E; m" S! C3 s9 G
   
; a  B+ B% o5 u& {8 N* \    图3. A6 z+ B& K1 {) Z
    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;9 S3 z: R+ w1 b4 F
    14位:SPI中断使能位,’0’表示无效,’1’表示有效;
* Q9 }: c5 g) w' o    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;! p$ O. g/ x2 ]  `- K7 ]
    12位:返回SPI_DI引脚的状态值;
6 y6 k9 u5 S5 Z8 \" T    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;
: N# \9 u2 R8 z& x    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;
' p6 a- ~2 Z9 P    9位:‘0’正常操作,‘1’复位SPI;4 \9 J$ G) v0 A& s+ O, _
    8:7位:SPI数据格式;8 b% d) U- C9 D3 }
    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;
' j* n2 h/ R2 G4 l    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
& C/ ]% v  ?8 L; n" m) h; y1 r' a    4:3位:SPI在主模式下的时钟频率选择;
3 P2 U6 D8 `' w: R* w7 l( u  \# k    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;
4 C, b5 X" e& H5 h3 G" t    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
- J% x, }9 Y0 A4 n0 [8 o    0位:SPI的开关。
: K/ T; _' I/ x
+ K( t* I$ k) ~# {2 g  F. l3 O    2.2.2 SPI接收/发送寄存器0
* D' E9 x+ I- R) c
$ n* R% t/ J. K. x) w/ K1 W    
# V% R  u! ?6 Y  ]0 e& }    图4
% v9 ^% h! V1 F/ \+ w1 K    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。
! y4 n0 w( Y& @* |% ~0 X" R6 T( Q' Y4 T% ?
    2.2.3 SPI接收/发送寄存器1
  d  ]5 \: H* p+ D8 Y5 J$ j. s9 D- I0 d5 ]% ~
   
- ?/ i" T  k% K7 r' j3 e    图5
$ K- \1 h* C) _    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。* T( {& f$ V) |  Z, {

) ^/ S+ x+ t7 F* Q5 B    2.2.4 SPI清除中断寄存器0 v6 K( @4 ]$ |$ \# Q. U: C0 {

% \+ J" m( l* S% f    4 N9 ?0 v1 b  \; ?
    图6/ Z! q( \3 X1 t9 l, j
    15:0位:写任意值到该寄存器清除SPI的中断标志。% Q1 V; L/ j, F
3 `3 ~* K% K! x+ b
    2.2.5 SPI控制寄存器1
3 B! U: z0 n6 u# ?9 w3 {# G
& N$ I, j% K1 V, ~9 j% H
" ~8 G1 d( s, y" ?! `+ ?   
+ C! v$ t! _6 H6 i  n) E    图7# `4 S& j1 ^$ v) _( F
    15:5位:保留不使用;2 k, F' \) X8 ^, N9 F' s" ?
    4位:决定在9位模式下的第一位的值;( i# s. `7 e/ c' H: c$ n
    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;
: u) l" a) m7 v+ V    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;7 z, N6 j' u, r& l5 Y
    1:0位:SPI_FIFO模式。' ]; u  F% k! B, N  M* |6 R

5 p) X! i/ ^& u+ T0 F( Y; @' d1 _    2.3 寄存器配置讲解
, P5 V; v4 n# L    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
, d. y7 R* e% |6 ^" m: I    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
9 o# ^8 C0 B, X    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)
% m7 B9 G3 {; y! e# g- y    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)
, C# f4 F6 [1 K: X' P+ P    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
" D8 y8 _8 h$ \  W0 M  m( v    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)
- V+ f$ ]2 V3 t. P8 l' X    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;
4 t; O5 f' _; k6 W    SPI的初始化配置寄存器:0 ^' O7 E1 Y- u( O7 Y7 B4 E4 ~3 ^
    先关闭SPI, SPI_CTRL_REG =0x8000;6 \" a1 V: z5 \0 C& Z
    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;
8 k# w1 `# j, J, i- D    开SPI, SPI_CTRL_REG | =0x0001;
* J/ o3 k# G0 R  ]! S/ ^1 Y% T$ x    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);
7 E; h; F1 u. g7 G    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;  \! a! G8 o6 V6 a
1 Y/ x( e: P; @/ z
7 v) u  i8 Y& I9 M. i) n6 U
" _! K" ]( ~9 A$ L0 C
    第三节 SPI实验
4 @4 m& B+ E6 U) M2 i0 Q! v* @  G
; F* L& U/ e3 E  i    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
# Z7 o: J  `: z, D  l4 l* j; Q    使用USB转串模块连接手机蓝牙串口,连接方式如下:
# a3 Y% O) b3 x# f" o+ s6 [5 G        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
2 ]/ j# \' s* D. R4 h4 D+ E  S$ {
   
# A$ o0 ]; |5 W    图8, |& ]3 p. F" u
    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
) D$ i; X' `$ ~$ P1 k- u
' t8 Q4 g: r; i) e; Z/ w2 Q     
7 |1 p6 {2 D) Q/ ^1 z    图9
! Q6 t: z1 q" f6 d    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:1 G& z+ T2 }; o8 @
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
9 h, b8 W7 F+ H1 j8 P
  Q2 x$ A" |: q! |2 @! a    3 L8 [9 |! D, F
    图10) O9 W  F( T* s/ W* ~
    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:" j. T; w2 v. E) w/ g" P$ r
# b- G$ Q- }1 P6 c' r" `/ Q* J
   
' C8 B% W% |! [( }: @    图11/ b* Z0 E# y/ {& f- }" [
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
* D0 Z! N9 W) \5 i1 ?; _+ J# W6 K7 G    SPI实验的Keil工程为spi_flash.uvproj,位于目录:" f6 r) H, x! u/ m
    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
3 [9 V$ k7 z' m" `2 w% s4 S4 c7 F
- P& i* S  k9 ^7 B9 U     5 E1 A' ~1 [+ x6 G2 _0 b7 O
    图12
0 K9 }/ R+ E" ]( `8 L% M    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:' U* T8 b3 F8 j, m6 o$ j
, K2 l. n: {1 W

9 Q2 X% I7 B' @7 Y/ Q# f
, O+ `7 ^$ @' ]  q- s6 M
8 t$ `2 m$ w$ \1 j, u1 z  Q1 \+ Y: ]' Y- \4 |3 H+ J# I9 l
    3 \6 C" I% L! B( o" U8 [+ T2 z( O& Z( K
    图135 c3 f) a9 Q' C1 s6 m' G/ f- o% B
8 j! L( e3 _. \$ G$ C1 ^5 f

1 D( B" C4 j; N1 ]  X% }; g* c6 u, f6 R1 A: U/ f: ^
    配套资料:http://www.fengke.club! M$ d0 l( x7 o7 D1 K. K+ G
    套件地址:http://shop115904315.taobao.com/; G+ ~5 z' H& g! ?* T
    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0) " M, O- ~" E8 ?+ o8 s- Z
5 @" Y6 x+ v  _
  • 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 00:52 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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