S32K148-SPI(裸机开发)
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(裸机开发)的更多相关文章
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...
- Cubieboard2裸机开发之(四)定时器操作
前言 在Cubieboard2裸机开发之(三)里用到了一个延时函数delay,它的延时时间是不精确的,因此为了能够精确延时,就需要定时器的配合.定时器可以精确延时的一个重要原因是它的计时时钟(或者说频 ...
- 【转载】s3c2440裸机开发调试环境(MDK4.6,Jlink v8,mini2440)
用于arm裸机程序开发的IDE基本有 以下3个:MDK,IAR,还有ADS.具体它们的具体情况在这里我就不多说了,百度一下就明白了.由于之前开发c51,stm32时候都使用了MDK开发环境,而且MDK ...
- S3C2416裸机开发系列19_Fatfs播放录像wav音频文件
S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩 1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...
- ARM裸机开发中内存管理库RT_HEAP的使用
在使用arm芯片进行裸机开发的时候,很多时候都需要内存管理的功能,我们可以使用自己写的内存管理程序,也可以直接使用标准库,不过我一般比较喜欢标准库,速度快,今天就来说说在C语言环境下怎么样进行内存的动 ...
- [国嵌攻略][158][SPI裸机驱动设计]
SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...
- ok6410[000] 搭建裸机开发环境
1.安装交叉工具链arm-linux-gcc-4.3.2 先把这个工具复制到rhat系统中[rhel-server-6.3-i386-dvd.iso] 解压arm-linux-gcc-4.3.2到一个 ...
- S3C2440—3.用点亮LED来熟悉裸机开发的详细流程
文章目录 一.硬件知识 1.LED原理图 2.芯片手册 Ⅰ.找LED原理图 Ⅱ.找对应引脚 Ⅲ.在芯片手册中查找引脚信息 Ⅳ.查看寄存器说明 Ⅴ.配置寄存器 二.S3C2440框架与启动过程 三.要用 ...
- S3C2440—2.裸机开发步骤及工具使用
文章目录 一.裸机开发步骤简介 1.在X86架构的Windows系统中 2.在X86架构的Ubuntu系统中 3.ARM裸机开发 二.soucre insight使用 1.sourec insight ...
- 使用GNU工具链进行嵌入式裸机开发
Embedded-Programming-with-the-GNU-Toolchain Vijay Kumar B. vijaykumar@bravegnu.org 翻译整理:thammer gith ...
随机推荐
- .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
一:背景 1. 讲故事 前面几篇我们说完了 harmony 的几个注入点,这篇我们聚焦注入点可接收的几类参数的解读,非常有意思,在.NET高级调试 视角下也是非常重要的,到底是哪些参数,用一张表格整理 ...
- Win32汇编学习笔记02.RadAsm和联合编译
https://bpsend.net/thread-151-1-1.html 汇编使用资源 汇编使用资源的方式和C的一样,也是把资源文件 rc 编译成 res 再链接进去,汇编没有自己的资源编辑器,需 ...
- Springboot 之JPA查询报错
在 CatDao中添加自定义查询方法后,启动报错 1 2019-06-11 11:06:13.874 INFO 14700 --- [ restartedMain] org.hibernate.Ver ...
- ODOO路由里面的auth="user" 的使用
一.controller介绍:Controller层在odoo里面可以认为是控制器,根据url地址来控制后端的业务和前端的内容展示,我们一般偏向于叫路由控制, 它相当于内网和外网之间的防火墙,外网的请 ...
- JVM划重点:引用类型、垃圾回收算法和内存划分
一.Java四种引用类型 每种编程语言都有操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过"引用"(Reference).在 Java ...
- Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF]
在Spring Boot项目中,使用org.springframework.mail.javamail.JavaMailSender发送邮件抛异常,异常信息: Mail server connecti ...
- Ubuntu部署tensorflow(CPU/GPU)方法
本文介绍在Linux操作系统的发行版本Ubuntu中,配置可以用CPU或GPU运行的Python新版本深度学习库tensorflow的方法. 在文章部署CPU与GPU通用的tensorflow ...
- QMediaPlayer+QVideoWidget+QAudioOutput实现一个简单视频播放器-Qt6.8
此篇是我在观看使用nginx搭建音视频点播服务器 - seedoubleu - 博客园后,想着使用qt widget写的一个简单播放器 完成nginx搭建音视频点播服务器的话,我推荐使用ffplay进 ...
- Permutation Counting
\(n\) 的范围很小,考虑动态规划. \(f_{i,j}\) 在前 \(i\) 个数有 \(j\) 个 \(<\) 的个数. 若 \(\texttt {a<b<c<d}\), ...
- python中的split()函数
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 a,b,c=input().split(,) 意思是在a,b,c三个输入值直接 ...