公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

学习笔记--之三 TC1728 SPI 的应用

学习笔记--之三 TC1728 SPI 的应用

jian1
Level 5
Level 5
10 solutions authored 5 solutions authored First solution authored

Part III – SPI

TC1728的SPI功能可以通过SSC (Synchronous Serial Communication) 模块实现。TC1728包含4个SSC模块,与SPI接口完全兼容。TC1728的SSC模块支持作为master或者slave节点。同时可以与内部的DMA接口相连,实现数据在无需占用中央处理器资源条件下的自动输入输出。

初始化时需要对SSC模块的时钟、master/slave、数据类型等参数进行设置。同时,本套软件是基于DMA进行SSC模块信息的自动发送和接收,即通过DMA模块自动将待发数据写入SSC的TB (Transmit Buffer),同时自动将SSC模块的RB (Receive Buffer) 的数据写入接收缓存区。因此,在初始化SSC模块前需要初始化对应的DMA模块。

SSC的时钟设置包括CLC,FDR和BR三个寄存器,每一个SSC模块有单独的CLC、FDR和BR。每一个模块的时钟输入为系统时钟fsys(=fFPI),经过CLC和FDR控制的时钟控制和分频后,再通过BR控制的波特率发生器,产生最终的波特率,如下图所示。

                                             

在normal divider模式下(FDR.DM=01),波特率的计算公式为:

在目前的软件中,所有的SSC模块的CLC都被设成0x8,即允许sleep mode,其他默认。FDR被设为0x43FF,即normal divider模式,FDR.STEP=1023.这样可以使波特率尽可能的高。

BR_VALUE的设置在本软件是在每一个SPI报文的初始化中完成的,这样使得不同报文即使共用同一个SSC channel也可以获得不同的波特率。目前软件中的系统时钟频率fsys被设置为64MHz,则若要使得波特率为1Mbit/s,则BR_VALUE应当设置为:

BR_VALUE=(fsys/(1024-FDR.STEP)/2/Baud rate)-1=(64/1/2/1)-1=31

软件中在Tc178x_spi.h文件中定义了宏SSC0_BAUD(desiredbaud)来进行该运算,不过需要注意的是,其中的参数desiredbaud的单位为bit/s,如1Mbit/s就应让desiredbaud=1000000.

接下来SSC模块的初始化需要设置控制寄存器CON,每一个SSC模块有一个单独的CON。CON中会设置master还是slave类型(MS),还有数据宽度(BM),Parity Mode使能(PARTEN,PARREN),以及模块使能(EN)等等。

SSC模块的初始化还包括每个使用到的pin脚的初始化,如果是作为SPI的master,一般会使用到3个pin脚,包括MTSR(即通常SPI中所称的MOSI)、MRST(即SPI中的MISO)、SCLK。


0 点赞
1729 次查看
9 评论