AUTOSAR实验八 SPI通信主模式
目录
一、实验目的
二、实验环境
三、实验步骤
四、Port配置
五、SPI配置
六、函数说明
七、函数说明
八、数据发送顺序
==============================================================
一、实验目的
(1)通过spi进行通信,传输数据。
二、实验环境
Window10
服务器:windows
和服务器交互软件 winscp putty
Autosar Version: 4.2.2
Tresos studio 23.0
MCAL Version: S32K14X_MCAL4_2_RTM_HF8_1_0_1
Compiling environment:greenhill 201714
三、实验步骤
1.通过EB修改SPI的配置
2.在EB中验证配置,生成目标文件
3.拷贝MCAL工程文件替代模板工程中的MCAL工程文件
4.执行模板工程文件中的copy批处理文件
5.通过winscp 上传工程
6.通过putty执行编译命令
7.将编译过得工程下载到local
8.通过PE下载调试
9.涉及到的模块:port模块,mcu模块(spi参考)、SPI模块
10.涉及到的中断 spi中断。
四、Port配置
以spi0的miso为例,要注意引脚的direction,具体方向参照芯片手册,截图如下
注意主模式和从模式之间的区别
五、SPI配置
要配置channel、ExternDevice、PhyUnit,其次是job和sequence。
1.选择存储空间,分为IB和EB,IB是内部存储,EB是外部存储。内部存储由autosar分配内部空间,外部存储可以自己设置,常用数组的方式分配空间。
2.传输一组数据的大小,硬件上就是多久拉一次片选,根据从机要求来定。
3.此参数包含数据缓冲区的最大大小(数据元素的数量),仅适用于EB通道。
4.在二进制数中,MSB是最高加权位。与十进制数字中最左边的一位类似。通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。在这里表示从最高加权位开始传输。
ExternDevice配置如下图(配置前学习一下spi协议笔记)
1.设置SPI波特率,关于波特率见spi协议笔记
2.片选信号发送通道选择
3.片选信号的电平,从文末逻辑分析仪得到的数据可以看到在电平为低的时候开始传输数据。
4.不详,待查询
5.信号采集的边沿,第一个边沿采集数据还是第二个边沿采集数据,对应于原理中的pha(相位)
6.片上SPI硬件单元选择。
7.搭配参数5,这里对应原理中的POL(相位)
8.不详,待查询
PhyUnit配置如下图
1.选择硬件单元
2.配置为主模式
3.设置参考时钟
4.数据发送方式
job配置如下图
另外,配置过的channel添加到了SpiChannelList中。
sequence配置如下图
六、函数说明
Spi_SetupEB(SpiConf_SpiChannel_P_BOOST_SSN, SampleApp_ucSource, SampleApp_ucDest, 32);
第一个和第二参数分别是发送和接收缓存空间,自己定义。
例如:
#define SPI_DATA_LENGTH 8
Spi_DataBufferType SampleApp_ucSource[SPI_DATA_LENGTH] = {1,2,3,4,5,6,7,8};
Spi_DataBufferType SampleApp_ucDest[SPI_DATA_LENGTH];
第三个参数:要传输的数据的数量
发 |
发送数据长度可以是八位十六位和32位 |
传 |
每次传输只能是八位数据 |
收 |
根据接受类型进行存储,如果发32位收是十六位类型,就会存到两个变量中 |
例 |
发 uint32 0x00010000 收就是;[0]0x0000 [1]0x0001 |
一般情况 |
一般发送接收定义成八位类型宏定义为Spi_DataBufferType |
七、实现代码
Setup/AsyncTransmit (EB)
注册SPI中断
sys_registerIsrHandler(LPSPI0_IRQn,(uint32)&Spi_LPspi_IsrTDF_LPSPI_0);
sys_enableIsrSource(LPSPI0_IRQn, 0x50);
定义缓存空间
#define SPI_DATA_LENGTH 8
Spi_DataBufferType SampleApp_ucSource[SPI_DATA_LENGTH] = {1,2,3,4,5,6,7,8};
Spi_DataBufferType SampleApp_ucDest[SPI_DATA_LENGTH];
初始化
Spi_Init(&Spi_PBCfgVariantPredefined);
Spi_SetAsyncMode(SPI_INTERRUPT_MODE);
传输
Spi_SetupEB(SpiConf_SpiChannel_P_BOOST_SSN, SampleApp_ucSource, SampleApp_ucDest, 8);
Spi_AsyncTransmit(SpiConf_SpiSequence_SpiSequence_BOOST);
Write/AsyncTransmit/Read (IB)
前三步都一样
传输
Spi_WriteIB(SpiConf_SpiChannel_P_BOOST_SSN,SampleApp_ucSource);
Spi_AsyncTransmit(SpiConf_SpiSequence_SpiSequence_BOOST);
Spi_ReadIB(SpiConf_SpiChannel_P_BOOST_SSN,SampleApp_ucDest);
八、数据发送顺序
待发送顺序 0x201
DMA模式
DMA发送顺序为0102
FIFO模式
发送顺序为0201
结论:
DMA:先发送低八位在发送高八位
FIFO:先发送高八位在发送低八位。