树莓派开发 IO操控代码编程

每个寄存器32位,四个字节

volatile:
1.指令不会因编译器的优化而省略
2.每次直接读值

一、位运算(按位与、按位或、异或)

按位与运算符(&)
参加运算的两个数,按二进制位进行“与”运算。

运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)

即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。

例:3 &5 即 00000011 & 00000101 = 00000001 ,所以 3 & 5的值为1。

按位或运算符(|)
参加运算的两个数,按二进制位进行“或”运算。

运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。

即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1 。

例:2 | 4 即 00000010 | 00000100 = 00000110 ,所以2 | 4的值为 6 。

异或运算符(^)
参加运算的两个数,按二进制位进行“异或”运算。

运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

即 0 ^ 0=0 , 0 ^ 1&

功能强大,直接虐死wiringPi的树莓派IO之pascal代码,包括GPIO,I2C,PWM等控制。 rpi_hal-Hardware Abstraction Library (GPIO, I2C and SPI functions and procedures) This Unit with around 1700 Lines of Code provided by Stefan Fischer, delivers procedures and functions to access the rpi HW I2C, SPI and GPIO: Just an excerpt of the available functions and procedures: procedure gpio_set_pin (pin:longword;highlevel:boolean); { Set RPi GPIO pin to high or low level; Speed @ 700MHz -> 0.65MHz } function gpio_get_PIN (pin:longword):boolean; { Get RPi GPIO pin Level is true when Pin level is '1'; false when '0'; Speed @ 700MHz -> 1.17MHz } procedure gpio_set_input (pin:longword); { Set RPi GPIO pin to input direction } procedure gpio_set_output(pin:longword); { Set RPi GPIO pin to output direction } procedure gpio_set_alt (pin,altfunc:longword); { Set RPi GPIO pin to alternate function nr. 0..5 } procedure gpio_set_gppud (mask:longword); { set RPi GPIO Pull-up/down Register (GPPUD) with mask } ... function rpi_snr :string; { delivers SNR: 0000000012345678 } function rpi_hw :string; { delivers Processor Type: BCM2708 } function rpi_proc:string; { ARMv6-compatible processor rev 7 (v6l) } ... function i2c_bus_write(baseadr,reg:word; var data:databuf_t; lgt:byte; testnr:integer) : integer; function i2c_bus_read (baseadr,reg:word; var data:databuf_t; lgt:byte; testnr:integer) : integer; function i2c_string_read(baseadr,reg:word; var data:databuf_t; lgt:byte; testnr:integer) : string; function i2c_string_write(baseadr,reg:word; s:string; testnr:integer) : integer; ... procedure SPI_Write(devnum:byte; reg,data:word); function SPI_Read(devnum:byte; reg:word) : byte; procedure SPI_BurstRead2Buffer (devnum,start_reg:byte; xferlen:longword); procedure SPI_BurstWriteBuffer (devnum,start_reg:byte; xferlen:longword); { Write 'len' Bytes from Buffer SPI Dev startig at address 'reg' }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值