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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ARM功能手机
——疯壳·开发板系列
SPI教程   
/ a2 L& n" H- a8 n

) i' v! A- }& |: k4 }4 j; ?& G  t* d4 g3 l$ h( v* V

. I3 y  k* k$ }6 ^* v7 S. s # Y) r/ o& l$ ~! ]& t1 @5 ]1 a
    图11 J% J4 H* A# @* t" M

4 _" y' e  q) P( C: q8 u( [' V# k+ c3 w/ T% p& }5 j
    第一节SPI Flash硬件电路
: y4 h% c6 R2 z2 q8 U
; S( F/ K. E; J    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:/ F) z' d# [  {& o2 l0 h3 t
0 S* Z1 b) B! S* c  R
   
, n+ u1 F! j1 Q( r$ G' _& i    图28 Q8 n" b6 @" H9 P/ E- ^* R- Z
  Q3 j+ X9 S1 ~" s' P& ^# i* q
7 J0 U- s1 p: B

0 _; O7 d% l( a8 P  o6 Z    第二节 SPI+寄存器6 f: D- l: g, F& N$ c& U6 B
' T6 a- V7 z$ {, y: K$ J) d
    2.1 SPI+介绍
( a2 ~0 @# m# g. O; Y7 |0 X5 y$ T8 {' V, q( ~5 U) g5 r
    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。9 H" |: c* G# X; d7 i, v
    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。' d6 i( ]! Z" r$ K! G# S' q( U
% U, ~& c) {) R' u! j2 \, N
    2.2 寄存器介绍
. a0 s6 `" h' e3 h( B    2.2.1 SPI控制寄存器0& v# o; v( ]5 |( @3 S
" i! V3 R( `$ [! S, ?" J# M! Z
; m6 n9 R# Q* F$ S  N$ p. Z
   , m. q5 G0 R7 Y; ]( l) m+ q- {( y
    图3
! v/ i( Z. d2 C' X3 r$ a3 b    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;) `: F' _7 C% G9 |8 C2 q
    14位:SPI中断使能位,’0’表示无效,’1’表示有效;
; X3 j! p* E2 |* c    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;
( l% r. L5 R6 s, M, Z    12位:返回SPI_DI引脚的状态值;
% s& _& R5 g) T    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;
% a, ?/ i8 v  {6 u! V' p    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;' Y% e. V8 ]2 z" _0 n
    9位:‘0’正常操作,‘1’复位SPI;: ~: H: s4 r0 d& H) C# w* y
    8:7位:SPI数据格式;
. g4 }: ?( F& ?9 K! `9 w    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;7 M# V% m& s7 z2 d( r" G
    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
% y6 `/ A) p8 U% t9 m    4:3位:SPI在主模式下的时钟频率选择;0 `1 o+ T9 d! G9 H& v* Z! `
    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;1 e/ k* ~1 \# L/ {/ U7 y
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
( Q3 `, ?8 [$ R1 H3 I    0位:SPI的开关。. ~5 d8 f# z7 s" h
3 n9 H# X! Z: ~: r# ^" d- x# `
    2.2.2 SPI接收/发送寄存器04 K' b( n6 m  {3 v9 H+ t7 n1 r

* O8 h  u7 ?9 N5 L. h/ T    2 m& a) v% A! N9 U5 p; r
    图4) _9 {7 D1 C& r! @: n' d# G; K
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。( y1 _* l9 T4 |9 a! v1 T! ^
0 N; A( f3 Y- |( `" f$ ?
    2.2.3 SPI接收/发送寄存器16 `* I1 P% l) |5 @$ @9 u& I
( j9 A( U- A. {6 c4 d2 B
    & P! u; \# H! Z' f# V0 h3 A' q
    图5# j! S. e2 F- e, |, s! P2 N
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。- C6 z/ j7 {! S# G  j- y/ l  K

' C( A, l( |( h* K% _3 v2 x    2.2.4 SPI清除中断寄存器: X& q( r! ~7 t, W

7 o2 z, f' F" B+ Q4 |    / v4 Q3 p: `+ Y2 v* H$ D+ N$ w
    图6
+ B, [# `. z- D  }4 W    15:0位:写任意值到该寄存器清除SPI的中断标志。0 S% J1 a5 D0 ^& Y; a
( ]) v& g- B- L4 c
    2.2.5 SPI控制寄存器1$ X1 n& ?2 m/ q8 P

0 M) ]3 A0 N4 P0 Q3 I
, r( T5 B2 j8 q: x    : j( Z% l* F, ]  c
    图7
6 C) @" \; l' N    15:5位:保留不使用;
5 B- |! V' W* ?4 r; |7 W0 x    4位:决定在9位模式下的第一位的值;6 b. X) d. E0 k' h+ _/ A: s
    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;+ R/ }4 b1 S4 N, O: G7 Q2 L" L& ?
    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;# ?0 K: y0 t6 A  h$ h+ m7 l- k
    1:0位:SPI_FIFO模式。+ t  |+ {7 s6 c. @) u- ^

& k# M5 i0 r. |    2.3 寄存器配置讲解
, O2 h) X0 }* D5 p    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
; O! K* @* |# T1 D( J    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
1 `9 O( x$ d; j# z% c    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)
* B* ^* U2 z4 D, x( d    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)
5 k" U' B0 s+ W+ a) Z% n5 f6 ~/ T1 E    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)9 I% y7 m7 H9 R( r1 g
    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)
" _+ e4 _! K4 C/ X7 l8 M* Y    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;
4 q+ Y! r/ r( h' ]5 X( {3 C' A, |    SPI的初始化配置寄存器:
- g: Y; b. z7 q  s1 b2 f    先关闭SPI, SPI_CTRL_REG =0x8000;
8 v4 I# C2 e6 p2 \    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;
+ G) L3 l8 X6 U* Y6 {, I& m    开SPI, SPI_CTRL_REG | =0x0001;
% H" W* |( Y' [6 h# d, D    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);
5 ^% E2 ~7 L" a/ `# G- W' @    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;$ L& W  p0 e0 y: e- e' U
& z% K; R3 M# b, s
' _" e/ U* }; W7 _3 w

* [8 @( |+ V+ b5 v" C    第三节 SPI实验4 r* c+ ~7 E" T- W. [
+ [; b, e% B. Y2 z
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
9 k  Z( E5 X; Q6 p" q    使用USB转串模块连接手机蓝牙串口,连接方式如下:: X# J. ^, z3 h/ i. K' E
        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
! R+ z" d! t( x
2 I4 n" n/ ~7 T) K) A* _1 l    
" U% i& o, M4 A! E) X$ i    图87 d5 c, n! Z8 X. Q2 V7 r, P
    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:+ ^  N0 D3 [  v* {0 M/ @( h" H$ @
% M, u; ]' @4 n
   
" z1 V1 L; H# ]8 Z4 M- w3 y    图9
8 Q! S/ O9 N7 D# }    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
, p' E' S1 O! Y* u    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
- P6 ~3 y  \6 t; D1 h0 ]* k( s3 u- s7 q7 P/ F* q8 B* Y, D" F0 v  _
   
, ?) A5 p3 n$ ]% N, I! W    图10
) j! ?4 O! M- {    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:8 _' v9 }% ^: c' f; b

; V. M" o: ~# c, Q   * h9 C" l3 b) `0 h# G; G
    图11
. X/ ~) B9 B8 f! ^* t( B    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
5 ^' p5 K. V7 K) r    SPI实验的Keil工程为spi_flash.uvproj,位于目录:/ w3 |* P1 N4 z. T4 M
    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:- C' k* h( g/ a$ D( ]* @' B

% I4 E; Q# h6 h! o) [: b6 U9 O- f3 ^0 W    
3 _- [4 _, ^, @    图12
6 P( U: }* O7 l# ?1 S    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:4 d  y* M$ f3 C! M2 h( `  v4 i

8 i, V* b" }" }1 I: }( j; i * [% ?$ p9 y$ d% u4 f/ L
3 l; L% i2 ?' a  [3 p4 C) @

! M' g2 z1 Z2 m
3 H4 q: h  }+ @( T3 k) V' N    
% t4 J+ {5 {1 m# g% K, w0 K    图13
" D# L( h6 v  I& n0 g. V+ w" h- ], ^: [. ]! s; W# P' w$ r

/ }7 I9 |- b9 G) l- @
1 ]' F) k" K+ b* G
$ h5 @7 I! T# l! D     文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0) 6 z2 I: y& S  O0 L# x1 Z: ]
" B1 m! L4 S/ E0 j# K4 t3 o! I; d

$ K3 e5 X" D4 x  l: l- Z+ U; t

该用户从未签到

2#
发表于 2022-9-6 13:07 | 只看该作者
有没有演示的教程7 [* m3 y/ i( a7 s' @; Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 05:47 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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