下面是使用 S32K146demo 版开发 SPI 过程中的配置以及测试代码介绍。
1. 配置 PE,点击 ProcessorExpert.pe,配置 SPI
我用的是中断发送是方式:
这个是 pe 的配置,具体使用什么片选和 Phase 要看 MCU(S32K144/6)对应的片选芯片的
具体要求,Phase 可以百度查看 SPI 四种模式区别一文,写的很详细。
2. 关于驱动的初始化:
我采用的是 lpspi,所以生成的 SPI 也是 lpspi 的;MCU 为主,所以用的是 Master 发送。
这里面:
1. Instance 为所选的channel,可以看PE中关于pin_mux中的关于SPI的配置,然后决定所使
用的instance。
2. LpspiSttate 参数为被赋值参数,自定义或使用下图的结构体直接填充都可以:
lpspiCom1State 。
3. spiConfig 参数为general code中用PE配置好的值,直接拿来填充,比如我的配置:把
lpspiCom1_MasterConfig0 带入即可。
初始化结束。
发送:
由于SPI的运行方式为发和接都由一个函数来处理的,我们按照SDS32里面SDK的介绍,一般
用阻塞和非阻塞方式来发送。
非阻塞即为数据发送过程中可以被其他中断打断,等别人做完事情以后再接着发
阻塞即反过来,详细解释百度都有
用demo版测试SPI时,将SPI的TX 、RX用杜邦线接在一起了,做成了回环,可以验证发送
的数据是否成功发送,也可以用示波器测量波形是否正确,所选的phase波形即为发送数据
波形。
注:SDK发送函数中有介绍rxbuffer:可以设置为空,然后我们看下面的测试代码以及结果。
这里面有个问题:
1. 测试buffer为2字节,不加rxbuffer,可以发送成功
LPSPI_DRV_MasterTransferBlocking(SPI_INSTANCE_1,dummyBuffer,NULL,2,OSIF_
WAIT_FOREVER);
2. 测试buffer600字节,不加rxbuffer发送失败!
LPSPI_DRV_MasterTransferBlocking(SPI_INSTANCE_1,dummyBuffer,NULL,600,OSI
F_WAIT_FOREVER);
3. 测试buffer600字节,加rxbuffer,可以发送成功
LPSPI_DRV_MasterTransferBlocking(SPI_INSTANCE_1,dummyBuffer,RxdummyBuffe
r,600,OSIF_WAIT_FOREVER)
测试step2中遇到的问题暂时没有得到解决,等有结果会更新,不过按照以上来处理,可以
保证发送和接收没有问题。