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

【疯壳·ARM开发教程10】ARM功能手机-SPI教程

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ARM功能手机
——疯壳·开发板系列
SPI教程   
- D/ G0 t8 r2 Y  S! W8 `
. E) q  |: k9 E4 I# O1 P

; o% O6 i1 K+ r' q( t- p& K2 B, c' r

) e8 p# T- [3 R6 \    图18 o8 w" D) C: S% L2 c
. `& M8 z' [% v% R) T. n- H

( Q8 W: b% u) S* L% B, |    第一节SPI Flash硬件电路5 V, G1 d' W; r& X

' I( N0 I, Z4 r2 r    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:$ s/ f. A) {* f5 t
) F& R  Q5 a! t: B' ^7 {
   
& n0 N! e  E% g5 u; b    图21 T- }, w. \1 m4 e( M
- K4 `- ?8 b, r9 h6 Q5 O. Z

! B* e. R9 e& i8 j' l5 P
* W5 b1 g' V* N% I% ?# {) T& v( [    第二节 SPI+寄存器
0 K" A( H" O2 p" T
+ ?; B( c" i& h9 B5 i( Q    2.1 SPI+介绍
- c' m7 E( N/ S( u1 G# _) f8 N  W% [4 L: e. Y8 w
    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。
% X( S" a) d5 K3 H& l    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
# g& L' a5 u  \/ G( w. h
. T6 ]  k  y" K- R5 I; e$ i: w7 s! U    2.2 寄存器介绍
2 ~' i7 n3 E- r& G    2.2.1 SPI控制寄存器0" Y/ x3 A: O) }" D9 F+ z/ B( M
0 z: S9 P. M4 r+ S9 Y- Z& `4 N
, ?5 ?- ]% {2 l: C' u+ E+ N# D
   . a9 `4 x9 b1 c6 d
    图3
& I# v; b/ M9 v% b: f    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;
6 x- r( \! m- f+ p! T  }    14位:SPI中断使能位,’0’表示无效,’1’表示有效;! c# j3 |2 U/ R) @' @2 o
    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;
! n7 K6 S$ Y0 }5 y    12位:返回SPI_DI引脚的状态值;
- F6 v1 X4 @2 K7 [7 X% o! R    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;; ^7 T; }3 R, y! }" H5 S. Z
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;1 ?: ?  J* n$ }7 j8 C3 G
    9位:‘0’正常操作,‘1’复位SPI;  Z/ A- e+ ?5 G8 J8 @& {
    8:7位:SPI数据格式;
& q+ Z* i2 X4 a    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;
% o' Q! d. N1 Q+ R3 Q; \7 s    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;$ [1 b0 `. p: i2 p
    4:3位:SPI在主模式下的时钟频率选择;
3 I! C: B9 X; ?& g    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;7 D' s; G6 u( K0 x; l# z" N/ {
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
+ j' r+ _6 M# v: y5 o    0位:SPI的开关。  O& \- H9 k5 I9 [
  n8 x0 l7 f8 F
    2.2.2 SPI接收/发送寄存器0! T: ~6 D; u4 U2 k  f+ V
. V  ^0 t$ c# z7 J' Z
   3 g, C* J+ B+ M: v) K# Z7 n# U) s
    图49 f9 f; A- @9 G
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。* m/ g6 P" W, U; _6 s- D9 R; x1 A
5 I8 G, G' E, z5 ]  l
    2.2.3 SPI接收/发送寄存器1
6 Z- j; z0 y* |7 p( O1 P
+ w! V9 o& v7 I/ ?* I* A/ p    
4 ~- q# }2 S3 i: m    图5
! }! N; j5 b4 E. L- J; k: p9 s    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。2 W0 Q$ h+ p% ~# R( M8 V
2 ]2 a. D) Y' O3 ?2 Q  }: J
    2.2.4 SPI清除中断寄存器
, b' m+ t( A1 l. w$ u* v! h7 ^( o0 N
   7 D+ A: a3 W; \: a- M: u) _5 g
    图6
9 a3 `% O2 l  n0 f) I& u. M9 z    15:0位:写任意值到该寄存器清除SPI的中断标志。
6 f) G- P3 B( f' Y4 p  w) Z( s1 O* U8 F$ ^
    2.2.5 SPI控制寄存器1
: Y. t( D" o! k/ x# y3 a, A6 U* D/ p# C0 T$ q& a3 n4 B

0 O& k7 `8 E' v3 J    
0 r# S. N) @* {/ J; ~    图7) s! V' a/ o' S+ z: V3 Z
    15:5位:保留不使用;, M, I% `7 t- Y$ {- p$ P* `) S
    4位:决定在9位模式下的第一位的值;) g. `9 `- {, ^8 G
    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;
0 T* W# H1 m" R- j9 [    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;
) l, u  |" R) \0 ?    1:0位:SPI_FIFO模式。
" Y( r! {1 Z# [$ J* R8 y* M! d
2 m; D& {" O  j7 S  m3 {) k    2.3 寄存器配置讲解
) @" a) f; W% v! j: F7 p& H$ M    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)- P9 p0 A0 s% j( {3 H
    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
* E+ A. \0 I. h1 C, p    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)6 n) q! T& f2 m
    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)
6 _3 c; j$ ]5 a  r& B8 O7 S    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
0 K2 ?' N7 A6 u( k    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)7 z; h  z. c* c+ m1 [. H
    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;  N* m+ ]. y. d. z) m
    SPI的初始化配置寄存器:
- u+ W4 g5 [8 X( W1 G$ s    先关闭SPI, SPI_CTRL_REG =0x8000;
# q" p, N+ T. z3 `) _, b    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;1 U& _  ^/ ?6 t5 Y5 w0 }
    开SPI, SPI_CTRL_REG | =0x0001;
8 B3 u' L$ L3 T$ C% y1 m    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);9 x9 i& D+ |5 K* ^5 Z7 x9 k
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;
& d. ]4 M  D# T$ R" s& p2 m
+ N  `# ~, T: Y  ?1 E7 a
; I- l# q8 s4 _8 R; L. E' T8 x" S
    第三节 SPI实验/ E, I3 z3 P+ S( @/ k
! ?6 j. ]! R  C& f
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。( N: L, S4 |9 T* ~# Q
    使用USB转串模块连接手机蓝牙串口,连接方式如下:
- F& F3 A# [0 B. X" d* G% _- I        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:, z3 f3 v1 d; R3 e( Y

; a% Q. X1 e: {2 {    
) s! f# M+ {1 m9 ?! Q    图8
) R$ ?( j% X% R5 `9 j, s4 j    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
7 k: \, E$ l$ U' q/ c( G/ J4 d1 W( k# `; X- Y
   
0 h/ C0 X' x! n& ?& m$ \    图9
1 ~+ R7 `1 h9 B    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
8 y% B6 u# N' u; M- s# s    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
: \0 [& `/ Q" W
  v0 m- @6 G' `& y8 m    
" m! }" }7 q; O    图10% s  p3 p. {1 K
    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
: Q: N7 U4 C$ X5 K* r0 G' t+ d* G( O! e$ z3 e' d2 R) ~
  # q' H. f) }) H
    图11
6 Y' |( J% e) R! o; ]' ~' C1 C    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
8 z+ B5 ~: |8 T' e! ~# v' C    SPI实验的Keil工程为spi_flash.uvproj,位于目录:
& n4 g/ a+ c  N# |* W" m    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
+ V/ S9 L+ ^5 N7 w8 r% Z/ k# a2 p$ c! Q% ~& C
   
/ H& s& o$ C: }( Y# i' u    图12
1 H7 V/ O7 K7 W    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:0 O2 d; ^3 J; J3 G

# v9 ~1 ?7 o0 d2 C+ ~) n  J7 ?1 t
8 D: T) R  |" ?7 z3 k# l8 S( h7 a( E* z& i
% u- q8 I5 r) N+ M, A) O* t2 v

1 L9 n4 u/ _& N" Q4 _5 C" H+ {( |    
" v" @0 K& }2 C' ~) U$ L    图13. |" ?8 y4 T; h, j: S

! B8 m! @9 l0 Q  o  l2 A' L
  T- y0 ]* y2 {
) _6 q  d  v, _) M3 ]1 q% |% R8 P& u4 f1 e( M
     文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0) 5 u* D* n  e* K+ v1 g
1 M, @3 o. ~5 V7 B7 j5 O
' l+ {: R' n, |) P; |7 c& W

该用户从未签到

2#
发表于 2022-9-6 13:07 | 只看该作者
有没有演示的教程
) e  }- i/ n/ I; Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 23:29 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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