一、简介
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
评论