pythonspi函数,spi python

帮忙分析一个这个spi读写程序,详细一点的,解释一下。怎么觉得读和写的内容怎么差不多呢,怎么实现的读写

void SpiWriteRegister (uchar reg, uchar value)

成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,十年企业及个人网站建设经验 ,为成都上千客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,品牌网站建设,同时也为不同行业的客户提供网站设计、成都网站设计的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选成都创新互联公司

{

RF_NSEL = 0; // 片选拉低启动SPI通讯

SPI0DAT = (reg|0x80); // 写入1个字节的寄存器地址

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

SPI0DAT = value; // 继续写入第二个字节(寄存器值)

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

RF_NSEL = 1; // 片选拉高结束SPI通讯

}

//-----------------------------------------------------------------------------

//函数描述: SPI读取函数

//相关参数:

//返回信息:

//

//-----------------------------------------------------------------------------

uchar SpiReadRegister (uchar reg)

{

RF_NSEL = 0; // 片选拉低启动SPI通讯

SPI0DAT = reg; // 写入1个字节的寄存器地址

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

SPI0DAT = 0xFF; // 写一个Dummy字节(因为要读取的话必须用写入来启动一个交换数据的传输),当写入完成后从机的数据也完成了读入。

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

RF_NSEL = 1; // 片选拉高结束SPI通讯

return SPI0DAT; // 返回读取的值(在SPI0DAT=0xFF中完成读取)

}

需要注意的是读写操作实际上完成的都是数据的交换,即主机传送1个字节给从机,从机同时传送1个字节给主机。所以读操作看起来像是写数据,但实际上写入完成后就可以从SPI0DAT中获得从机的应答数据了。

为什么很多人喜欢 Python

很多人关注起Python就是因为简单易懂,做Web很方便。但在深入CS学科的很多高级主题时,Python能发挥出更加强大无比的力量。而这来自于Python是个好胶水。

坦白讲,Python不算最好的胶水,至少Lua做胶水就比Python好,API好用。但Python再算上强大的标准库、数据结构、友好的转义后,就脱颖而出了。

在科学计算领域,NumPy和SciPy的存在解放了很多人的思想束缚。其底层C模块,性能一流。

而当你需要一流的性能与一流的可调试性时,Python C模块是最好的选择。封装虽然有些麻烦,但封装后可以在Python里调用实在太方便。一些已有的C/C++应用也可以通过将函数封装给Python调用,而极大的降低调试难度,提升单元测试覆盖率。

2007年时我开始学Python的C模块编程,并在博客中放出了我的笔记。那时写了不少东西。封装libpcap后,做网络抓包,通信劫持,使得别人眼里,我俨然是个正经黑客。后来迷恋erlang期间,做了C node的Python封装,使得Python与Erlang可以互发消息,组建集群。搞硬件开发期间,封装了Cubieboard和RaspberryPi的GPIO、SPI等众多外设的Python接口,调试速度快到了云边。做USB通信期间,因为PyUSB不支持isochronous通信而自己重写了个libusb的Python封装,使得USB编程不再困难。做音视频识别的日子里,做了v4l2的Python封装,使得操作摄像头的控制精度达到了最高。

相比于其他人,用上这些Python封装后,迭代速度数十倍的提高带来了系统进化速度的极大提高。比如我在音视频识别的研究期间,因为NumPy和我自己的封装,每天动则十几次甚至几十次的迭代,优化算法的各种参数。使得我在不到两年时间里,识别效果就超过可某大学教授12年的研究成果。识别速度更是超出对方两个数量级。

对于各个领域的研究者,我是真心推荐Python的。用上NumPy和SciPy,你就拥有了极致的性能,顶级的可调式性,和产品级的稳定性。而这也使得Python的这套组合成为科学计算领域唯一能与matlab竞争的选择。

关于SPI 模拟时序的问题

//*****************************************************************************************

//函数名:SpisendByte(INT8U dat)

//输入:发送的数据

//输出:无

//功能描述:SPI发送一个字节

//*****************************************************************************************

INT8U SpiTxRxByte(INT8U dat)

{

INT8U i,temp;

temp = 0;

SCK = 0;

for(i=0; i8; i++)

{

if(dat 0x80)

{

MOSI = 1;

}

else MOSI = 0;

dat = 1;

SCK = 1;

_nop_();

_nop_();

temp = 1;

if(MISO)temp++;

SCK = 0;

_nop_();

_nop_();

}

return temp;

}

//*****************************************************************************************

//函数名:void RESET_CC1100(void)

//输入:无

//输出:无

//功能描述:复位CC1100

//*****************************************************************************************

void RESET_CC1100(void)

{

CSN = 0;

while (MISO);

SpiTxRxByte(CCxxx0_SRES); //写入复位命令

while (MISO);

CSN = 1;

}

//*****************************************************************************************

//函数名:void POWER_UP_RESET_CC1100(void)

//输入:无

//输出:无

//功能描述:上电复位CC1100

//*****************************************************************************************

void POWER_UP_RESET_CC1100(void)

{

CSN = 1;

halWait(1);

CSN = 0;

halWait(1);

CSN = 1;

halWait(41);

RESET_CC1100(); //复位CC1100

}

//*****************************************************************************************

//函数名:void halSpiWriteReg(INT8U addr, INT8U value)

//输入:地址和配置字

//输出:无

//功能描述:SPI写寄存器

//*****************************************************************************************

void halSpiWriteReg(INT8U addr, INT8U value)

{

CSN = 0;

while (MISO);

SpiTxRxByte(addr); //写地址

SpiTxRxByte(value); //写入配置

CSN = 1;

}

//*****************************************************************************************

//函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)

//输入:地址,写入缓冲区,写入个数

//输出:无

//功能描述:SPI连续写配置寄存器

//*****************************************************************************************

void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)

{

INT8U i, temp;

temp = addr | WRITE_BURST;

CSN = 0;

while (MISO);

SpiTxRxByte(temp);

for (i = 0; i count; i++)

{

SpiTxRxByte(buffer[i]);

}

CSN = 1;

}

//*****************************************************************************************

//函数名:void halSpiStrobe(INT8U strobe)

//输入:命令

//输出:无

//功能描述:SPI写命令

//*****************************************************************************************

void halSpiStrobe(INT8U strobe)

{

CSN = 0;

while (MISO);

SpiTxRxByte(strobe); //写入命令

CSN = 1;

}

//*****************************************************************************************

//函数名:INT8U halSpiReadReg(INT8U addr)

//输入:地址

//输出:该寄存器的配置字

//功能描述:SPI读寄存器

//*****************************************************************************************

INT8U halSpiReadReg(INT8U addr)

{

INT8U temp, value;

temp = addr|READ_SINGLE;//读寄存器命令

CSN = 0;

while (MISO);

SpiTxRxByte(temp);

value = SpiTxRxByte(0);

CSN = 1;

return value;

}

//*****************************************************************************************

//函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)

//输入:地址,读出数据后暂存的缓冲区,读出配置个数

//输出:无

//功能描述:SPI连续写配置寄存器

//*****************************************************************************************

void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)

{

INT8U i,temp;

temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令

CSN = 0;

while (MISO);

SpiTxRxByte(temp);

for (i = 0; i count; i++)

{

buffer[i] = SpiTxRxByte(0);

}

CSN = 1;

}

//*****************************************************************************************

//函数名:INT8U halSpiReadReg(INT8U addr)

//输入:地址

//输出:该状态寄存器当前值

//功能描述:SPI读状态寄存器

//*****************************************************************************************

INT8U halSpiReadStatus(INT8U addr)

{

INT8U value,temp;

temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令

CSN = 0;

while (MISO);

SpiTxRxByte(temp);

value = SpiTxRxByte(0);

CSN = 1;

return value;

}

我还有其他的,其实想这样的模拟的很简单的,网上也很多,我做了个点阵用SPI的方式,但是那是自带的,

根据SPI协议,写一字节数据到从机,为什么还要读出一字节的数据?示例程序如下:

SPI协议中接收和发送数据是一体的,数据传输的线路为一个循环链路(loop).如果主机发送数据给从机,则必须从从机读取数据(即从机也发送数据到主机).同理,如果主机读取从机发来的数据,也必须同时发送数据给从机.总之,同一个时钟周期内,读和写2个操作都必须执行.

树莓派怎么样用 Python 控制 GPIO 来发送串口指令

python GPIO

1、先安装python-dev,输入以下指令。

sudo

apt-get install python-dev

2、安装RPi.GPIO,依次输入以下指令。

1)下载:$ wget

2)解压缩:$ tar xvzf RPi.GPIO-0.5.3a.tar.gz

3)进入解压之后的目录 :$ cd RPi.GPIO-0.5.3a

4)启动安装 :$ sudo python setup.py install

3、例子:

[python] view plain copy

# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO

import time

# BOARD编号方式,基于插座引脚编号

GPIO.setmode(GPIO.BOARD)

# 输出模式

GPIO.setup(11, GPIO.OUT)

while True:

GPIO.output(11, GPIO.HIGH)

time.sleep(1)

GPIO.output(11, GPIO.LOW)

time.sleep(1)

4、执行:

sudo python led.py

5、说明:

1)GPIO.setmode(GPIO.BOARD),采用插座引脚编号方式。

2)由于采用插座引脚编号方式,此处的11脚相当于BCM2835寄存器编号方式的引脚11。

python GPIO

1、说明:

WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C++开发并且可以被其他语言包转,例如python、ruby或者PHP等。

wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。用户可以利用gpio命令通过shell脚本控制或查询

GPIO管脚。wiringPi是可以扩展的,可以利用wiringPi的内部模块扩展模拟量输入芯片,可以使用

MCP23x17/MCP23x08(I2C

或者SPI)扩展GPIO接口。另外可通过树莓派上的串口和Atmega(例如arduino等)扩展更多的GPIO功能。另外,用户可以自己编写扩展模

块并把自定义的扩展模块集成到wiringPi中。WiringPi支持模拟量的读取和设置功能,不过在树莓派上并没有模拟量设备。但是使用

WiringPi中的软件模块却可以轻松地应用AD或DA芯片。


本文题目:pythonspi函数,spi python
转载来源:http://abwzjs.com/article/hodpdo.html