【EB 配置 MCAL】之 E3 SPI MCAL 配置 & 测试

一、简介

E3400 or E3600 普通 SPI 有 8 个硬件模块,每个 SPI 有四个硬件的片选通道,用户可以自由配置,当然可以使用 IO 进行拓展芯片引脚。
MCAL 配置 SPI , 有 序列、任务、通道 等概念:Sequence/Job/Channel。


Sequence
一个序列 Sequence 下可以有多个 Job , 不同 Job 可以是不同外设,也就是可以使用不同 SPI 模块,一个 Job 所绑定的是 一个外设。
Job 一个 Job 下可以绑定多个 Channel , 同个 Job 的片选在传输是不释放的,也就是同个 Job 下 的 channel 在传输时 片选不释放,不同 Job 之间,SPI 片选是释放的。
Channel 一个 Channel 理论上可以给到不同 Job 使用,但是Channel 是绑定 Buffer 的,这样子使用会导致数据混乱,不推荐使用,channel 最好独立使用,即 一个channel 最好绑定给一个 Job,给同一个 Device 使用
上图的 Channel2 和 Channel5 的区别是,channel2 使用在不同的 Job ,同时是不同的外设从机,channel5 是使用在不同 job, 但是是使用在同一个外设从机。
配置 Sequence/Job/Channel 需要完整配置到 channel ,不然 EB 会报错。

二、使用具体用例说明 SPI 配置

1. 使用两个 SPI 模块,SPI2 & SPI6 ,一个序列,两个 Job(即两个 Device ),每个 Job 绑定一个 channel, 工作模式选择在 SPI 工作模式 1,波特率用户自定义即可。

(1) E3 开发板找到 SPI2 & SPI6 对应 IO 口,结合 用户手册,标注好具体 IO ,连接 IO 到逻辑分析仪

SPI2
GPIO_M7  SS0
GPIO_A8  SS2
GPIO_M8  CLK
GPIO_A9  SS1
GPIO_M9  MISO
GPIO_A10  SS0
GPIO_M10  MOSI
GPIO_A11  CLK
GPIO_M11  SS1
GPIO_A12  MISO
GPIO_A7  SS3
GPIO_A13  MOSI

 

SPI6
GPIO_Y1  SS1
GPIO_G1 SS2
GPIO_Y2  SS0
GPIO_G2 SS0
GPIO_Y3  CLK
GPIO_G3 CLK
GPIO_Y4  MISO
GPIO_G4  MISO
GPIO_Y5  MOSI
GPIO_G5  MOSI
GPIO_G0 SS3
GPIO_G6  SS1

       

所以在接下来直接在 EB 进行配置

第一步打开 MCU , 进行外设配置,使能 SPI2 & SPI6

 



第二步打开 Port, 配置引脚,片选引脚需要配置为 pullup 模式,片选引脚初始化电平虚拟号也要配置。

 



(2)开始配置 SPI 外设

打开 SPI , 配置 SPI 总的配置里面的 Sequence/Job/Channel 的数量;

 


配置 SPI 外设, Device 名字,波特率,SPI 工作模式(时钟的电平的极性和高低电平空闲的选择),这个都是根据 Device 要求去配置的,工作模式的配置按照以下表格的内容,在 EB 里面进行选择配置。

 



片选信号引脚的配置,包括拉低有效的配置,片选引脚的选择,时钟到片选信号的时延(时钟开始和结束到片选的拉低拉高时间);


最后一个是,是否需要使能 MISO 接收,还有就是 MISO 的时延,因为有一些实际应用,会快一个时钟信号采样 MISO 信号,导致 接收信号最后一位丢失。

(3)配置 SPI Job

这里在例程基础上增加两个 Job ,优先级设置一样即可,然后将 Job 分别选择到不同的 Device ,继续点击进去,可以看到需要绑定的 Channel, 所以,在绑定 channel 之前,先把 Channel 配置好。

 

(4)配置 Channel

Channel 绑定的是 Buffer, 所以在配置里面,最好一个 Channel 只给一个 Job 绑定,增加我们这个示例所用到的两个 Channel, Channel 选择 EB 外部 Buffer ,设置 SPI 的数据宽度以及数据长度,还有就是数据传输的高位和低位在前。

 

 

(5)配置 序列 Sequence

这里直接增加一个 Sequence ,在这里的 id 是 5 ,按照题目要求,绑定两个 Job

 

 

(6)配置 SPI 外设为 master 模式

 

 

(7)EB 检查生成代码,在IAR 进行编译,调试

更改测试代码

 

测试结果

一个 Sequence 绑定两个 Job, 每一个 Job 单独绑定一个 Channel

 
 

2 . 一个序列 Sequence ,绑定一个 Job , 一个 Job 绑定两个 channel

测试结果

 

 

3 . 两个序列 Squence,每个 Sequence 绑定 1 个 Job ,每个 Job 绑定两个 channel

测试结果


三、总结

        1、SPI 的配置主要是搞清楚 Sequence & Job & Channel 的关系,其余按部就班配置即可

        2、SPI 的同步异步操作区别主要是 API 函数的调用,具体可以看底层驱动了解

 

四、参考

        1、Semidrive_Spi_User_Manual.pdf

        2、Semidrive_PORT_Module_User_Manual.pdf

        3、E3400_E3600_MCU_Technical_Reference_Manual_Rev00.11.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论