标题:
SPI读数据函数怎样理解
[打印本页]
作者:
zcwjzwd
时间:
2021-1-31 23:26
标题:
SPI读数据函数怎样理解
本帖最后由 zcwjzwd 于 2021-1-31 23:27 编辑
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN low, initialize SPI communication...
SPI_RW(reg); // Select register to read from..
reg_val = SPI_RW(0); // ..then read register value
CSN = 1; // CSN high, terminate SPI communication
return(reg_val); // return register value
}
reg_val是返回的状态寄存器的值还是其他的值?如果sta=SPI_Read(STATUS);//STATUS为状态寄存器地址。
sta的值有事什么?是返回的状态寄存器的值还是其他的值?
作者:
munuc_w
时间:
2021-2-1 08:16
从哪个寄存器地址读出的数据就是那个寄存器的,这没什么怀疑的吧。
作者:
黄youhui
时间:
2021-2-1 08:23
寄存器的值,举个例子(这里仅仅是举例子,不涉及任何单片机)
比如一个GPIO口的寄存器(8位)
第1位如果值是1则代表PA^0输出1,反之则输出0
第2位如果值是1则代表PA^1输出1,反之则输出0
第3位如果值是1则代表PA^2输出1,反之则输出0
........................
如果PA^0~PA^7输出全是1,那么你用这个函数之后返回值reg_val = 0xff
如果你想要的查看PA^5的输出值(或者说状态status),那么就要自己转换 out5 = reg_val & (0x01 << 4)
作者:
cocolala
时间:
2021-2-1 11:54
1、从你的问题描述来看,你的疑惑不是SPI通信总线。SPI通信是可以模拟SPI和硬件SPI两种方式进行。
2、不管是硬件SPI还是模拟SPI,你需要知道SPI通信是回环结构,我也是通过艾克姆科技的文档描述搞得比较清楚的。所以,SPI读一个字节的时候必写一个字节才可。
寄存器3.jpg
(252.87 KB, 下载次数: 51)
下载附件
2021-2-1 11:51 上传
3、你的疑惑点应该是在你需要操作的SPI的对象上,属于应用层次的。这需要看你操作的对象的技术手册,你分析的状态寄存器返回的是状态值,没有问题,手册上肯定也是这样说的。但至于你写0x00,收到的是什么,这个必须去看操作对象的手册,比如你操作的是一个SPI接口的存储器,则你必须去看这个存储器的芯片手册,这是厂家定义的,和SPI没有关系。
作者:
Mr_Fu
时间:
2021-2-1 16:09
返回寄存器中的值
作者:
wjcxy3166
时间:
2021-2-1 16:11
读,写数据最重要的是时序正确就问题不大。严格按时序图来写程序就行的
作者:
zcwjzwd
时间:
2021-2-1 19:03
谢谢各位
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1