S32K148-SPI驱动开发步骤:

1)SPI引脚复用

2)enable PCC for  SPI

3)disable module

4)部分寄存器配置:控制寄存器,时钟寄存器,发送寄存器,接收寄存器

5)enable SPI

SPI初始化函数、:

void spi0_init(void)
{
/*pin mux for spi0
gpio_init(PTe, 6, 1, 1);//引脚初始化
PORTE->PCR[2] |= (1<<9);
PORTE->PCR[1] |= (1<<9);
PORTE->PCR[0] |= (1<<9);
/*Disable clocks to modify PCS ( default)*/
PCC->PCCn[PCC_LPSPI0_INDEX] = 0;
/*(default) Peripheral is present.
* Enable PCS=SPLL_DIV2 (40 MHz func'l clock) */
PCC->PCCn[PCC_LPSPI0_INDEX] = 0xC6000000;
/*disable module for cfg*/
LPSPI0->CR = 0x00000000;
LPSPI0->IER = 0x00000000;
LPSPI0->DER = 0x00000000;
LPSPI0->CFGR0 = 0x00000000;
/* Configurations: master mode
* PCSCFG=0: PCS[3:2] are enabled
* OUTCFG=0: Output data retains last value when CS negated
* PINCFG=0: SIN is input, SOUT is output
* MATCFG=0: Match disabled
* PCSPOL=0: PCS is active low
* NOSTALL=0: Stall if Tx FIFO empty or Rx FIFO full
* AUTOPCS=0: does not apply for master mode
* SAMPLE=0: input data sampled on SCK edge
* MASTER=1: Master mode*/
LPSPI0->CFGR1 = 0x00000001;
/* Transmit cmd: PCS3, 16 bits, prescale func'l clk by 4, etc
* CPOL=1: SCK inactive state is low
* CPHA=1: Change data on SCK lead'g, capture on trail'g edge
* PRESCALE=2: Functional clock divided by 2**2 = 4,40M/4=10M
* PCS=0: Transfer using PCS0
* LSBF=0: Data is transfered MSB first
* BYSW=0: Byte swap disabled
* CONT, CONTC=0: Continuous transfer disabled
* RXMSK=0: Normal transfer: rx data stored in rx FIFO
* TXMSK=0: Normal transfer: data loaded from tx FIFO
* WIDTH=0: Single bit transfer
* FRAMESZ=7: # bits in frame = 7+1=8 */
LPSPI0->TCR = 0xC8000007;
/* Clock dividers based on prescaled func'l clk of 100 nsec
* SCKPCS=4: SCK to PCS delay = 4+1 = 5 (500 nsec)
* PCSSCK=4: PCS to SCK delay = 9+1 = 10 (1 usec)
* DBT=8: Delay between Transfers = 8+2 = 10 (1 usec)
* SCKDIV=8: SCK divider =8+2 = 10 ,10M/10=1M(1 usec: 1 MHz baud rate) *///sck=18
LPSPI0->CCR = 0x04040812;
/* RXWATER=0: Rx flags set when Rx FIFO >0
* TXWATER=3: Tx flags set when Tx FIFO <= 3 */
LPSPI0->FCR = 0x00000003;
/* Enable module for operation
* DBGEN=1: module enabled in debug mode
* DOZEN=0: module enabled in Doze mode
* RST=0: Master logic not reset
* MEN=1: Module is enabled */
LPSPI0->CR = 0x00000009;
}

SPI发送接收函数

uint8_t LPSPI0_TransmitReceice_1Byte (uint8_t senddata)
{
uint8_t receivedata;
/* Wait for Tx FIFO available */
while((LPSPI0->SR & 0x1) == 0);
/* Transmit data */
LPSPI0->TDR = senddata;
/* Wait at least one RxFIFO entry */
while((LPSPI0->SR & 0x2) >> 1 == 0);//如果没有接收设备,处于死循环,影响程序执行
/* Read received data */
receivedata = LPSPI0->RDR;
/* Clear TDF flag */
LPSPI0->SR |= 0x1;
/* Clear RDF flag */
LPSPI0->SR |= 0x2;
return receivedata;
}

S32K148-SPI(裸机开发)的更多相关文章

  1. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...

  2. Cubieboard2裸机开发之(四)定时器操作

    前言 在Cubieboard2裸机开发之(三)里用到了一个延时函数delay,它的延时时间是不精确的,因此为了能够精确延时,就需要定时器的配合.定时器可以精确延时的一个重要原因是它的计时时钟(或者说频 ...

  3. 【转载】s3c2440裸机开发调试环境(MDK4.6,Jlink v8,mini2440)

    用于arm裸机程序开发的IDE基本有 以下3个:MDK,IAR,还有ADS.具体它们的具体情况在这里我就不多说了,百度一下就明白了.由于之前开发c51,stm32时候都使用了MDK开发环境,而且MDK ...

  4. S3C2416裸机开发系列19_Fatfs播放录像wav音频文件

    S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩    1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...

  5. ARM裸机开发中内存管理库RT_HEAP的使用

    在使用arm芯片进行裸机开发的时候,很多时候都需要内存管理的功能,我们可以使用自己写的内存管理程序,也可以直接使用标准库,不过我一般比较喜欢标准库,速度快,今天就来说说在C语言环境下怎么样进行内存的动 ...

  6. [国嵌攻略][158][SPI裸机驱动设计]

    SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...

  7. ok6410[000] 搭建裸机开发环境

    1.安装交叉工具链arm-linux-gcc-4.3.2 先把这个工具复制到rhat系统中[rhel-server-6.3-i386-dvd.iso] 解压arm-linux-gcc-4.3.2到一个 ...

  8. S3C2440—3.用点亮LED来熟悉裸机开发的详细流程

    文章目录 一.硬件知识 1.LED原理图 2.芯片手册 Ⅰ.找LED原理图 Ⅱ.找对应引脚 Ⅲ.在芯片手册中查找引脚信息 Ⅳ.查看寄存器说明 Ⅴ.配置寄存器 二.S3C2440框架与启动过程 三.要用 ...

  9. S3C2440—2.裸机开发步骤及工具使用

    文章目录 一.裸机开发步骤简介 1.在X86架构的Windows系统中 2.在X86架构的Ubuntu系统中 3.ARM裸机开发 二.soucre insight使用 1.sourec insight ...

  10. 使用GNU工具链进行嵌入式裸机开发

    Embedded-Programming-with-the-GNU-Toolchain Vijay Kumar B. vijaykumar@bravegnu.org 翻译整理:thammer gith ...

随机推荐

  1. .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)

    一:背景 1. 讲故事 前面几篇我们说完了 harmony 的几个注入点,这篇我们聚焦注入点可接收的几类参数的解读,非常有意思,在.NET高级调试 视角下也是非常重要的,到底是哪些参数,用一张表格整理 ...

  2. Win32汇编学习笔记02.RadAsm和联合编译

    https://bpsend.net/thread-151-1-1.html 汇编使用资源 汇编使用资源的方式和C的一样,也是把资源文件 rc 编译成 res 再链接进去,汇编没有自己的资源编辑器,需 ...

  3. Springboot 之JPA查询报错

    在 CatDao中添加自定义查询方法后,启动报错 1 2019-06-11 11:06:13.874 INFO 14700 --- [ restartedMain] org.hibernate.Ver ...

  4. ODOO路由里面的auth="user" 的使用

    一.controller介绍:Controller层在odoo里面可以认为是控制器,根据url地址来控制后端的业务和前端的内容展示,我们一般偏向于叫路由控制, 它相当于内网和外网之间的防火墙,外网的请 ...

  5. JVM划重点:引用类型、垃圾回收算法和内存划分

    一.Java四种引用类型    每种编程语言都有操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过"引用"(Reference).在 Java ...

  6. Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF]

    在Spring Boot项目中,使用org.springframework.mail.javamail.JavaMailSender发送邮件抛异常,异常信息: Mail server connecti ...

  7. Ubuntu部署tensorflow(CPU/GPU)方法

      本文介绍在Linux操作系统的发行版本Ubuntu中,配置可以用CPU或GPU运行的Python新版本深度学习库tensorflow的方法.   在文章部署CPU与GPU通用的tensorflow ...

  8. QMediaPlayer+QVideoWidget+QAudioOutput实现一个简单视频播放器-Qt6.8

    此篇是我在观看使用nginx搭建音视频点播服务器 - seedoubleu - 博客园后,想着使用qt widget写的一个简单播放器 完成nginx搭建音视频点播服务器的话,我推荐使用ffplay进 ...

  9. Permutation Counting

    \(n\) 的范围很小,考虑动态规划. \(f_{i,j}\) 在前 \(i\) 个数有 \(j\) 个 \(<\) 的个数. 若 \(\texttt {a<b<c<d}\), ...

  10. python中的split()函数

    Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 a,b,c=input().split(,) 意思是在a,b,c三个输入值直接 ...