<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.radxa.com/mw/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.radxa.com/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pavle</id>
		<title>Radxa Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.radxa.com/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pavle"/>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Special:Contributions/Pavle"/>
		<updated>2026-06-13T16:49:55Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.3</generator>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-07-09T09:37:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: /* GPIO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/wiringX}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/radxa/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/radxa/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/radxa/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/radxa/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''        while(1) {'''&lt;br /&gt;
    '''	        digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	        sleep(1);'''&lt;br /&gt;
    '''	        digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	        sleep(1);'''&lt;br /&gt;
    '''         }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
We also add UART in wiringX to support serial port communication.  Two UART port on J8: UART0 and UART3. A simple example to use UART0 communicate with arduino uno:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int fd=-1, c=0;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		if(wiringXserialDataAvail (fd)&amp;gt;0){'''&lt;br /&gt;
    '''			c=wiringXserialGetchar(fd);'''&lt;br /&gt;
    '''			printf(&amp;quot;Data received is: %d.\n&amp;quot;, c);'''&lt;br /&gt;
    '''			sleep(1);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	unsigned char d=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''	if ((fd = wiringXserialOpen (&amp;quot;/dev/ttyS0&amp;quot;, 9600)) &amp;lt; 0)	{'''&lt;br /&gt;
    '''	    fprintf (stderr, &amp;quot;Unable to open serial device: %s\n&amp;quot;, strerror (errno)) ;'''&lt;br /&gt;
    '''	    return -1;'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''	wiringXserialPutchar(fd, d);'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		digitalWrite(0, HIGH);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''		digitalWrite(0, LOW);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Codes on arduino:&lt;br /&gt;
&lt;br /&gt;
    '''boolean stringComplete = false;  // whether the string is complete'''&lt;br /&gt;
    '''char inChar = 0x00;'''&lt;br /&gt;
    '''void setup() {'''&lt;br /&gt;
    '''  // initialize serial:'''&lt;br /&gt;
    '''  Serial.begin(9600);'''&lt;br /&gt;
    '''  pinMode(13,OUTPUT);'''&lt;br /&gt;
    '''  digitalWrite(13,LOW);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop() {'''&lt;br /&gt;
    '''  if (stringComplete) {'''&lt;br /&gt;
    '''    Serial.write(inChar);'''&lt;br /&gt;
    '''    inChar=inChar+1;'''&lt;br /&gt;
    '''    digitalWrite(13,LOW);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''    digitalWrite(13,HIGH);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void serialEvent() {'''&lt;br /&gt;
    '''  while (Serial.available()) {'''&lt;br /&gt;
    '''    inChar = (char)Serial.read();'''&lt;br /&gt;
    '''    if (inChar == 0x00) {'''&lt;br /&gt;
    '''      stringComplete = true;'''&lt;br /&gt;
    '''    }'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[File:Uart.png]]&lt;br /&gt;
&lt;br /&gt;
And you can see LED on arduino and red led on Rock blink.&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
PWM is also added to wiringX (kenerl 3.0.36 not supported). Interfaces are provided to use two channels pwm on the header. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	pinMode(6, PWM_OUTPUT);'''&lt;br /&gt;
    '''	wiringXsetPwmPeriod(6, 2000000000);'''&lt;br /&gt;
    '''	wiringXsetPwmDuty(6, 200000000);'''&lt;br /&gt;
    '''	wiringXpwmEnable(6, 1);'''&lt;br /&gt;
    '''	sleep(100);'''&lt;br /&gt;
    '''	wiringXpwmRemove(6);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
This will output pwm of period 2s, duty_cycle 10% on pin 12, lasts for 100s.&lt;br /&gt;
&lt;br /&gt;
== AIN ==&lt;br /&gt;
Three ain pins on J8. WiringX supports:  int wiringXanalogRead(int channel). You can use it to read the adc value on channel 0, 1, 2.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-25T04:51:11Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: /* PWM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/wiringX}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/radxa/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/radxa/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/radxa/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/radxa/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
We also add UART in wiringX to support serial port communication.  Two UART port on J8: UART0 and UART3. A simple example to use UART0 communicate with arduino uno:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int fd=-1, c=0;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		if(wiringXserialDataAvail (fd)&amp;gt;0){'''&lt;br /&gt;
    '''			c=wiringXserialGetchar(fd);'''&lt;br /&gt;
    '''			printf(&amp;quot;Data received is: %d.\n&amp;quot;, c);'''&lt;br /&gt;
    '''			sleep(1);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	unsigned char d=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''	if ((fd = wiringXserialOpen (&amp;quot;/dev/ttyS0&amp;quot;, 9600)) &amp;lt; 0)	{'''&lt;br /&gt;
    '''	    fprintf (stderr, &amp;quot;Unable to open serial device: %s\n&amp;quot;, strerror (errno)) ;'''&lt;br /&gt;
    '''	    return -1;'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''	wiringXserialPutchar(fd, d);'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		digitalWrite(0, HIGH);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''		digitalWrite(0, LOW);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Codes on arduino:&lt;br /&gt;
&lt;br /&gt;
    '''boolean stringComplete = false;  // whether the string is complete'''&lt;br /&gt;
    '''char inChar = 0x00;'''&lt;br /&gt;
    '''void setup() {'''&lt;br /&gt;
    '''  // initialize serial:'''&lt;br /&gt;
    '''  Serial.begin(9600);'''&lt;br /&gt;
    '''  pinMode(13,OUTPUT);'''&lt;br /&gt;
    '''  digitalWrite(13,LOW);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop() {'''&lt;br /&gt;
    '''  if (stringComplete) {'''&lt;br /&gt;
    '''    Serial.write(inChar);'''&lt;br /&gt;
    '''    inChar=inChar+1;'''&lt;br /&gt;
    '''    digitalWrite(13,LOW);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''    digitalWrite(13,HIGH);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void serialEvent() {'''&lt;br /&gt;
    '''  while (Serial.available()) {'''&lt;br /&gt;
    '''    inChar = (char)Serial.read();'''&lt;br /&gt;
    '''    if (inChar == 0x00) {'''&lt;br /&gt;
    '''      stringComplete = true;'''&lt;br /&gt;
    '''    }'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[File:Uart.png]]&lt;br /&gt;
&lt;br /&gt;
And you can see LED on arduino and red led on Rock blink.&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
PWM is also added to wiringX (kenerl 3.0.36 not supported). Interfaces are provided to use two channels pwm on the header. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	pinMode(6, PWM_OUTPUT);'''&lt;br /&gt;
    '''	wiringXsetPwmPeriod(6, 2000000000);'''&lt;br /&gt;
    '''	wiringXsetPwmDuty(6, 200000000);'''&lt;br /&gt;
    '''	wiringXpwmEnable(6, 1);'''&lt;br /&gt;
    '''	sleep(100);'''&lt;br /&gt;
    '''	wiringXpwmRemove(6);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
This will output pwm of period 2s, duty_cycle 10% on pin 12, lasts for 100s.&lt;br /&gt;
&lt;br /&gt;
== AIN ==&lt;br /&gt;
Three ain pins on J8. WiringX supports:  int wiringXanalogRead(int channel). You can use it to read the adc value on channel 0, 1, 2.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-23T03:41:40Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/wiringX}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/radxa/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/radxa/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/radxa/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/radxa/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
We also add UART in wiringX to support serial port communication.  Two UART port on J8: UART0 and UART3. A simple example to use UART0 communicate with arduino uno:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int fd=-1, c=0;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		if(wiringXserialDataAvail (fd)&amp;gt;0){'''&lt;br /&gt;
    '''			c=wiringXserialGetchar(fd);'''&lt;br /&gt;
    '''			printf(&amp;quot;Data received is: %d.\n&amp;quot;, c);'''&lt;br /&gt;
    '''			sleep(1);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	unsigned char d=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''	if ((fd = wiringXserialOpen (&amp;quot;/dev/ttyS0&amp;quot;, 9600)) &amp;lt; 0)	{'''&lt;br /&gt;
    '''	    fprintf (stderr, &amp;quot;Unable to open serial device: %s\n&amp;quot;, strerror (errno)) ;'''&lt;br /&gt;
    '''	    return -1;'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''	wiringXserialPutchar(fd, d);'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		digitalWrite(0, HIGH);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''		digitalWrite(0, LOW);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Codes on arduino:&lt;br /&gt;
&lt;br /&gt;
    '''boolean stringComplete = false;  // whether the string is complete'''&lt;br /&gt;
    '''char inChar = 0x00;'''&lt;br /&gt;
    '''void setup() {'''&lt;br /&gt;
    '''  // initialize serial:'''&lt;br /&gt;
    '''  Serial.begin(9600);'''&lt;br /&gt;
    '''  pinMode(13,OUTPUT);'''&lt;br /&gt;
    '''  digitalWrite(13,LOW);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop() {'''&lt;br /&gt;
    '''  if (stringComplete) {'''&lt;br /&gt;
    '''    Serial.write(inChar);'''&lt;br /&gt;
    '''    inChar=inChar+1;'''&lt;br /&gt;
    '''    digitalWrite(13,LOW);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''    digitalWrite(13,HIGH);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void serialEvent() {'''&lt;br /&gt;
    '''  while (Serial.available()) {'''&lt;br /&gt;
    '''    inChar = (char)Serial.read();'''&lt;br /&gt;
    '''    if (inChar == 0x00) {'''&lt;br /&gt;
    '''      stringComplete = true;'''&lt;br /&gt;
    '''    }'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[File:Uart.png]]&lt;br /&gt;
&lt;br /&gt;
And you can see LED on arduino and red led on Rock blink.&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
PWM is also added to wiringX. Interfaces are provided to use two channels pwm on the header. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	pinMode(6, PWM_OUTPUT);'''&lt;br /&gt;
    '''	wiringXsetPwmPeriod(6, 2000000000);'''&lt;br /&gt;
    '''	wiringXsetPwmDuty(6, 200000000);'''&lt;br /&gt;
    '''	wiringXpwmEnable(6, 1);'''&lt;br /&gt;
    '''	sleep(100);'''&lt;br /&gt;
    '''	wiringXpwmRemove(6);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
This will output pwm of period 2s, duty_cycle 10% on pin 12, lasts for 100s.&lt;br /&gt;
&lt;br /&gt;
== AIN ==&lt;br /&gt;
Three ain pins on J8. WiringX supports:  int wiringXanalogRead(int channel). You can use it to read the adc value on channel 0, 1, 2.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-16T09:45:02Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/wiringX}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/radxa/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/radxa/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/radxa/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/radxa/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
We also add UART in wiringX to support serial port communication.  Two UART port on J8: UART0 and UART3. A simple example to use UART0 communicate with arduino uno:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int fd=-1, c=0;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		if(wiringXserialDataAvail (fd)&amp;gt;0){'''&lt;br /&gt;
    '''			c=wiringXserialGetchar(fd);'''&lt;br /&gt;
    '''			printf(&amp;quot;Data received is: %d.\n&amp;quot;, c);'''&lt;br /&gt;
    '''			sleep(1);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	unsigned char d=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''	if ((fd = wiringXserialOpen (&amp;quot;/dev/ttyS0&amp;quot;, 9600)) &amp;lt; 0)	{'''&lt;br /&gt;
    '''	    fprintf (stderr, &amp;quot;Unable to open serial device: %s\n&amp;quot;, strerror (errno)) ;'''&lt;br /&gt;
    '''	    return -1;'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''	wiringXserialPutchar(fd, d);'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		digitalWrite(0, HIGH);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''		digitalWrite(0, LOW);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Codes on arduino:&lt;br /&gt;
&lt;br /&gt;
    '''boolean stringComplete = false;  // whether the string is complete'''&lt;br /&gt;
    '''char inChar = 0x00;'''&lt;br /&gt;
    '''void setup() {'''&lt;br /&gt;
    '''  // initialize serial:'''&lt;br /&gt;
    '''  Serial.begin(9600);'''&lt;br /&gt;
    '''  pinMode(13,OUTPUT);'''&lt;br /&gt;
    '''  digitalWrite(13,LOW);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop() {'''&lt;br /&gt;
    '''  if (stringComplete) {'''&lt;br /&gt;
    '''    Serial.write(inChar);'''&lt;br /&gt;
    '''    inChar=inChar+1;'''&lt;br /&gt;
    '''    digitalWrite(13,LOW);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''    digitalWrite(13,HIGH);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void serialEvent() {'''&lt;br /&gt;
    '''  while (Serial.available()) {'''&lt;br /&gt;
    '''    inChar = (char)Serial.read();'''&lt;br /&gt;
    '''    if (inChar == 0x00) {'''&lt;br /&gt;
    '''      stringComplete = true;'''&lt;br /&gt;
    '''    }'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[File:Uart.png]]&lt;br /&gt;
&lt;br /&gt;
And you can see LED on arduino and red led on Rock blink.&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
PWM is also added to wiringX. Interfaces are provided to use two channels pwm on the header. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	pinMode(6, PWM_OUTPUT);'''&lt;br /&gt;
    '''	wiringXsetPwmPeriod(6, 2000000000);'''&lt;br /&gt;
    '''	wiringXsetPwmDuty(6, 200000000);'''&lt;br /&gt;
    '''	wiringXpwmEnable(6, 1);'''&lt;br /&gt;
    '''	sleep(100);'''&lt;br /&gt;
    '''	wiringXpwmRemove(6);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
This will output pwm of period 2s, duty_cycle 10% on pin 12, lasts for 100s.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-16T09:43:17Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/wiringX}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/radxa/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
We also add UART in wiringX to support serial port communication.  Two UART port on J8: UART0 and UART3. A simple example to use UART0 communicate with arduino uno:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int fd=-1, c=0;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		if(wiringXserialDataAvail (fd)&amp;gt;0){'''&lt;br /&gt;
    '''			c=wiringXserialGetchar(fd);'''&lt;br /&gt;
    '''			printf(&amp;quot;Data received is: %d.\n&amp;quot;, c);'''&lt;br /&gt;
    '''			sleep(1);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	unsigned char d=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''	if ((fd = wiringXserialOpen (&amp;quot;/dev/ttyS0&amp;quot;, 9600)) &amp;lt; 0)	{'''&lt;br /&gt;
    '''	    fprintf (stderr, &amp;quot;Unable to open serial device: %s\n&amp;quot;, strerror (errno)) ;'''&lt;br /&gt;
    '''	    return -1;'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''	wiringXserialPutchar(fd, d);'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		digitalWrite(0, HIGH);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''		digitalWrite(0, LOW);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Codes on arduino:&lt;br /&gt;
&lt;br /&gt;
    '''boolean stringComplete = false;  // whether the string is complete'''&lt;br /&gt;
    '''char inChar = 0x00;'''&lt;br /&gt;
    '''void setup() {'''&lt;br /&gt;
    '''  // initialize serial:'''&lt;br /&gt;
    '''  Serial.begin(9600);'''&lt;br /&gt;
    '''  pinMode(13,OUTPUT);'''&lt;br /&gt;
    '''  digitalWrite(13,LOW);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop() {'''&lt;br /&gt;
    '''  if (stringComplete) {'''&lt;br /&gt;
    '''    Serial.write(inChar);'''&lt;br /&gt;
    '''    inChar=inChar+1;'''&lt;br /&gt;
    '''    digitalWrite(13,LOW);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''    digitalWrite(13,HIGH);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void serialEvent() {'''&lt;br /&gt;
    '''  while (Serial.available()) {'''&lt;br /&gt;
    '''    inChar = (char)Serial.read();'''&lt;br /&gt;
    '''    if (inChar == 0x00) {'''&lt;br /&gt;
    '''      stringComplete = true;'''&lt;br /&gt;
    '''    }'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[File:Uart.png]]&lt;br /&gt;
&lt;br /&gt;
And you can see LED on arduino and red led on Rock blink.&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
PWM is also added to wiringX. Interfaces are provided to use two channels pwm on the header. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	pinMode(6, PWM_OUTPUT);'''&lt;br /&gt;
    '''	wiringXsetPwmPeriod(6, 2000000000);'''&lt;br /&gt;
    '''	wiringXsetPwmDuty(6, 200000000);'''&lt;br /&gt;
    '''	wiringXpwmEnable(6, 1);'''&lt;br /&gt;
    '''	sleep(100);'''&lt;br /&gt;
    '''	wiringXpwmRemove(6);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
This will output pwm of period 2s, duty_cycle 10% on pin 12, lasts for 100s.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock</id>
		<title>Rock</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock"/>
				<updated>2015-06-16T09:37:22Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Rock_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rock}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-8 mwbs-color-darker&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;thumbnail &amp;quot;&amp;gt;http://wiki.radxa.com/mw/images/3/36/Rock.jpg&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;caption&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Radxa Rock(Pro/Lite)&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;text-justify&amp;quot;&amp;gt;Radxa Rock is a RK3188 based SBC(Single Board Computer) by [[Special:SpecialContact| Radxa]]. It has a quad core ARM processor, can run android or some Linux distributions. It also features 80 pin 2.54mm headers, which makes it easy to connect other sensors or use the GPIO.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-9&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-hearts-white&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt; &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hand-o-up&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Getting started&amp;lt;/h3&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
The Radxa Rock is shipped with Android 4.2.2 (Jelly Bean) and Ubuntu/Linaro 13.09 dual boot on the NAND flash (on-board storage) and it works out of the box(Rock Pro is shipped with Android 4.4.2(Kitkat) on NAND flash). Let's read '''[[rock/Getting Started|Radxa Rock Getting Started Guide]]''' and hook everything up and start playing with the board.&lt;br /&gt;
&lt;br /&gt;
Once you get started, you can [[Rock/flash_the_image|flash]] latest [[Rock/prebuilt_images|Android image and several Linux images]], or you can try to [[Rock/SD_images|boot Android/Linux from SD card]]. You can also [[Rock/Android_Build|build your own Android]], [[Rock/Booting_Linux|build your own kernel]], [[Rock/ubuntu|build your own Ubuntu root file system]], or whatever you want.&lt;br /&gt;
&lt;br /&gt;
'''FAQs'''&lt;br /&gt;
&lt;br /&gt;
Before you ask any questions about the Radxa Rock check if your question has already been asked and answered [[rock/FAQ|Radxa Rock FAQ]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-3 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-midnight-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-download&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Download&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Visit the '''[[rock/download| download]]''' page to get the download link and description of the source code, tools, images etc&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cocktail-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-users&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Community&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
'''Users'''&lt;br /&gt;
&lt;br /&gt;
* [http://talk.radxa.com/ Radxa Talk]&lt;br /&gt;
* [https://plus.google.com/communities/114007636590240429960 Radxa Google Plus community]&lt;br /&gt;
* [https://www.facebook.com/groups/218416868348521/ Facebook Group Page]&lt;br /&gt;
&lt;br /&gt;
'''Developers'''&lt;br /&gt;
&lt;br /&gt;
* [https://groups.google.com/forum/#!forum/radxa radxa google groups], send emails to radxa@googlegroups.com to subscribe &lt;br /&gt;
* &amp;lt;tt&amp;gt;#radxa&amp;lt;/tt&amp;gt; [http://en.wikipedia.org/wiki/Internet_Relay_Chat IRC] channel on [http://freenode.net/ Freenode]. Click to [http://webchat.freenode.net/?channels=radxa join #radxa on Freenode (WebChat mode)], or consult [http://irclog.whitequark.org/radxa/ IRC logs].     &lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-gunmetal-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-linux&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Linux&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/Booting Linux | Build your own kernel and boot into Linux]]&lt;br /&gt;
* [[rock/Linux Mainline | Build Linux Mainline]]&lt;br /&gt;
* [[rock/ubuntu| Make Ubuntu rootfs]]&lt;br /&gt;
* [[Rock/debian | Make Debian rootfs]]&lt;br /&gt;
* [[rock/make_sd_image| Make SD booting images]]&lt;br /&gt;
* [[rock/audio | Audio on Rock]]&lt;br /&gt;
* [[rock/display | Display on Rock]]&lt;br /&gt;
* [[rock/LED| Using LEDs on Rock]]&lt;br /&gt;
* [[rock/vnc | Setting up VNC server on Rock]]&lt;br /&gt;
* [[rock/sd lubuntu | Boot Lubuntu from SD card]] '''OBSOLETE'''       &lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-mango-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-cog&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Common HowTos&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/flash the image | Flash the image to NAND]]&lt;br /&gt;
* [[rock/SD images | Flash the image to SD card]]&lt;br /&gt;
* [[rock/SD upgrading | Upgrade NAND from SD card]]&lt;br /&gt;
* [[rock/backup| Backing up]]&lt;br /&gt;
* [[rock/fsck| Recovery ext4 file system]]&lt;br /&gt;
* [[rock/Serial debug tools Setting | Serial console debugging]]&lt;br /&gt;
* [[rock/unbrick | Unbrick Rock]]&lt;br /&gt;
* [[rock/resize linux rootfs |Resize linux rootfs ]]&lt;br /&gt;
* [[rock/ir| Using IR on Rock]]&lt;br /&gt;
* [[rock/usb| Using USB on Rock]]&lt;br /&gt;
* [[rock/uart| Using UART on Rock]]&lt;br /&gt;
* [[rock/Wireless | Using Wireless on Rock]]&lt;br /&gt;
* [[rock/Camera | Using Camera on Rock]]&lt;br /&gt;
* [[rock/Tp,Lvds,Camera | Using Lvds,Tp,Camera on Rock]]&lt;br /&gt;
* [[rock/Rock Lite | Run Rock Lite]]&lt;br /&gt;
* [[rock/Hdmi Resolution| Add new hdmi resolution]]&lt;br /&gt;
* [[rock/wiringX| wringX: GPIO/I2C/SPI/ISR/UART/PWM]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-berry-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-check-circle&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Others&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/dual boot| Dual boot Android/Linux]]&lt;br /&gt;
* [[rock/FreeBSD| Boot FreeBSD]] &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-party-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-gamepad&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Addons&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/cases | Cases]]&lt;br /&gt;
* [[rock/cables | Cables]]&lt;br /&gt;
* [[rock/shields | Extension boards]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cello-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hdd-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Hardware&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/specifications| Specifications]]&lt;br /&gt;
* [[rock/hardware revision | Hardware Revision]]&lt;br /&gt;
* [[rock/extension header | Extension Header]]&lt;br /&gt;
* [[rock/hardware docs | hardware documents]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-meadow-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-android&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Android&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/windows adb| ADB under Windows]]&lt;br /&gt;
* [[rock/linux adb| ADB under Linux]]&lt;br /&gt;
* [[rock/Android Build|Build Android image for RR]]&lt;br /&gt;
* [[rock/SD booting | Making bootable SD card]]&lt;br /&gt;
* [[rock/AP android |Make radxa as a WIFI_AP]]&lt;br /&gt;
* [[rock/Android backup | Backup your apps]]&lt;br /&gt;
* [[rock/Android dev tips | Some tips for android development]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cyanide-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-bold&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Bootloader&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/bootloader | Boot Loader]]&lt;br /&gt;
* [[rock/U-Boot | U-Boot]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-6 pull-left&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-neutral-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;Projects&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [http://radxa.com/Rock/pilight Run Pilight on Radxa Rock for remote control]&lt;br /&gt;
* [http://www.mydbapool.com/install-postgresql-9-4-raspberry-pi-radxa-similarmicrocomputers-running-lubuntu/ How to install PostgreSQL 9.4 on Radxa Rock]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/diy-nas-with-rk3188-device-radxa-rock.html DIY low power NAS (home file server) with Radxa Rock]&lt;br /&gt;
* [http://www.megaleecher.net/Network_Sharing_Radxa_Rock Network sharing on Radxa Rock]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/radxa-rock-communicating-with-i2c.html Hardware hacking: Communicating the Radxa with external I2C devices]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/bitbanging-radxa-rock-gpios.html Hardware hacking: Control Radxa Rock's expansion header GPIOs]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-6 pull-right&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-concrete-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;References&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
'''Photos'''&lt;br /&gt;
&lt;br /&gt;
* [http://dl.radxa.com/rock/media/pic/hd/ Some high definition photos of the Radxa Rock engineering samples]&lt;br /&gt;
&lt;br /&gt;
'''External'''&lt;br /&gt;
&lt;br /&gt;
* [http://www.cnx-software.com/2013/09/07/radxa-rock-development-boards-with-rockchip-rk3188-are-available-for-developers-now/ cnx-soft - radxa rock development boards with rockchips rk3188 are available for developers now]&lt;br /&gt;
* [http://linuxgizmos.com/open-sbc-runs-android-and-linux-on-quad-core-rockchip/ linuxgizmos - open sbc runs android and linux on quad core rockchip]&lt;br /&gt;
* [http://minipute.com/2013/09/12/new-radxa-rock-single-board-computer-runs-rockchip-rk3188-90/3246 minipute - new radxa rock single board computer runs rockchip rk3188]&lt;br /&gt;
* [http://omglaptop.com/desktops/radxa-rock-specs-price/ omglaptop - Radxa Rock Specs]&lt;br /&gt;
* [http://liliputing.com/2013/10/picuntu-4-5-installer-loads-ubuntu-onto-rockchip-rk3188-devices.html PicUntu 4.5 with a GUI installer for RK3188 based devices]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock]]&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-16T09:36:25Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/wiringX}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
We also add UART in wiringX to support serial port communication.  Two UART port on J8: UART0 and UART3. A simple example to use UART0 communicate with arduino uno:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int fd=-1, c=0;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		if(wiringXserialDataAvail (fd)&amp;gt;0){'''&lt;br /&gt;
    '''			c=wiringXserialGetchar(fd);'''&lt;br /&gt;
    '''			printf(&amp;quot;Data received is: %d.\n&amp;quot;, c);'''&lt;br /&gt;
    '''			sleep(1);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	unsigned char d=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''	if ((fd = wiringXserialOpen (&amp;quot;/dev/ttyS0&amp;quot;, 9600)) &amp;lt; 0)	{'''&lt;br /&gt;
    '''	    fprintf (stderr, &amp;quot;Unable to open serial device: %s\n&amp;quot;, strerror (errno)) ;'''&lt;br /&gt;
    '''	    return -1;'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''	wiringXserialPutchar(fd, d);'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		digitalWrite(0, HIGH);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''		digitalWrite(0, LOW);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Codes on arduino:&lt;br /&gt;
&lt;br /&gt;
    '''boolean stringComplete = false;  // whether the string is complete'''&lt;br /&gt;
    '''char inChar = 0x00;'''&lt;br /&gt;
    '''void setup() {'''&lt;br /&gt;
    '''  // initialize serial:'''&lt;br /&gt;
    '''  Serial.begin(9600);'''&lt;br /&gt;
    '''  pinMode(13,OUTPUT);'''&lt;br /&gt;
    '''  digitalWrite(13,LOW);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop() {'''&lt;br /&gt;
    '''  if (stringComplete) {'''&lt;br /&gt;
    '''    Serial.write(inChar);'''&lt;br /&gt;
    '''    inChar=inChar+1;'''&lt;br /&gt;
    '''    digitalWrite(13,LOW);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''    digitalWrite(13,HIGH);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void serialEvent() {'''&lt;br /&gt;
    '''  while (Serial.available()) {'''&lt;br /&gt;
    '''    inChar = (char)Serial.read();'''&lt;br /&gt;
    '''    if (inChar == 0x00) {'''&lt;br /&gt;
    '''      stringComplete = true;'''&lt;br /&gt;
    '''    }'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[File:Uart.png]]&lt;br /&gt;
&lt;br /&gt;
And you can see LED on arduino and red led on Rock blink.&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
PWM is also added to wiringX. Interfaces are provided to use two channels pwm on the header. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	pinMode(6, PWM_OUTPUT);'''&lt;br /&gt;
    '''	wiringXsetPwmPeriod(6, 2000000000);'''&lt;br /&gt;
    '''	wiringXsetPwmDuty(6, 200000000);'''&lt;br /&gt;
    '''	wiringXpwmEnable(6, 1);'''&lt;br /&gt;
    '''	sleep(100);'''&lt;br /&gt;
    '''	wiringXpwmRemove(6);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
This will output pwm of period 2s, duty_cycle 10% on pin 12, lasts for 100s.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock</id>
		<title>Rock</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock"/>
				<updated>2015-06-11T10:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Rock_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rock}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-8 mwbs-color-darker&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;thumbnail &amp;quot;&amp;gt;http://wiki.radxa.com/mw/images/3/36/Rock.jpg&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;caption&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Radxa Rock(Pro/Lite)&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;text-justify&amp;quot;&amp;gt;Radxa Rock is a RK3188 based SBC(Single Board Computer) by [[Special:SpecialContact| Radxa]]. It has a quad core ARM processor, can run android or some Linux distributions. It also features 80 pin 2.54mm headers, which makes it easy to connect other sensors or use the GPIO.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-9&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-hearts-white&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt; &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hand-o-up&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Getting started&amp;lt;/h3&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
The Radxa Rock is shipped with Android 4.2.2 (Jelly Bean) and Ubuntu/Linaro 13.09 dual boot on the NAND flash (on-board storage) and it works out of the box(Rock Pro is shipped with Android 4.4.2(Kitkat) on NAND flash). Let's read '''[[rock/Getting Started|Radxa Rock Getting Started Guide]]''' and hook everything up and start playing with the board.&lt;br /&gt;
&lt;br /&gt;
Once you get started, you can [[Rock/flash_the_image|flash]] latest [[Rock/prebuilt_images|Android image and several Linux images]], or you can try to [[Rock/SD_images|boot Android/Linux from SD card]]. You can also [[Rock/Android_Build|build your own Android]], [[Rock/Booting_Linux|build your own kernel]], [[Rock/ubuntu|build your own Ubuntu root file system]], or whatever you want.&lt;br /&gt;
&lt;br /&gt;
'''FAQs'''&lt;br /&gt;
&lt;br /&gt;
Before you ask any questions about the Radxa Rock check if your question has already been asked and answered [[rock/FAQ|Radxa Rock FAQ]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-3 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-midnight-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-download&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Download&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Visit the '''[[rock/download| download]]''' page to get the download link and description of the source code, tools, images etc&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cocktail-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-users&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Community&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
'''Users'''&lt;br /&gt;
&lt;br /&gt;
* [http://talk.radxa.com/ Radxa Talk]&lt;br /&gt;
* [https://plus.google.com/communities/114007636590240429960 Radxa Google Plus community]&lt;br /&gt;
* [https://www.facebook.com/groups/218416868348521/ Facebook Group Page]&lt;br /&gt;
&lt;br /&gt;
'''Developers'''&lt;br /&gt;
&lt;br /&gt;
* [https://groups.google.com/forum/#!forum/radxa radxa google groups], send emails to radxa@googlegroups.com to subscribe &lt;br /&gt;
* &amp;lt;tt&amp;gt;#radxa&amp;lt;/tt&amp;gt; [http://en.wikipedia.org/wiki/Internet_Relay_Chat IRC] channel on [http://freenode.net/ Freenode]. Click to [http://webchat.freenode.net/?channels=radxa join #radxa on Freenode (WebChat mode)], or consult [http://irclog.whitequark.org/radxa/ IRC logs].     &lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-gunmetal-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-linux&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Linux&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/Booting Linux | Build your own kernel and boot into Linux]]&lt;br /&gt;
* [[rock/Linux Mainline | Build Linux Mainline]]&lt;br /&gt;
* [[rock/ubuntu| Make Ubuntu rootfs]]&lt;br /&gt;
* [[Rock/debian | Make Debian rootfs]]&lt;br /&gt;
* [[rock/make_sd_image| Make SD booting images]]&lt;br /&gt;
* [[rock/audio | Audio on Rock]]&lt;br /&gt;
* [[rock/display | Display on Rock]]&lt;br /&gt;
* [[rock/LED| Using LEDs on Rock]]&lt;br /&gt;
* [[rock/vnc | Setting up VNC server on Rock]]&lt;br /&gt;
* [[rock/sd lubuntu | Boot Lubuntu from SD card]] '''OBSOLETE'''       &lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-mango-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-cog&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Common HowTos&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/flash the image | Flash the image to NAND]]&lt;br /&gt;
* [[rock/SD images | Flash the image to SD card]]&lt;br /&gt;
* [[rock/SD upgrading | Upgrade NAND from SD card]]&lt;br /&gt;
* [[rock/backup| Backing up]]&lt;br /&gt;
* [[rock/fsck| Recovery ext4 file system]]&lt;br /&gt;
* [[rock/Serial debug tools Setting | Serial console debugging]]&lt;br /&gt;
* [[rock/unbrick | Unbrick Rock]]&lt;br /&gt;
* [[rock/resize linux rootfs |Resize linux rootfs ]]&lt;br /&gt;
* [[rock/ir| Using IR on Rock]]&lt;br /&gt;
* [[rock/usb| Using USB on Rock]]&lt;br /&gt;
* [[rock/uart| Using UART on Rock]]&lt;br /&gt;
* [[rock/Wireless | Using Wireless on Rock]]&lt;br /&gt;
* [[rock/Camera | Using Camera on Rock]]&lt;br /&gt;
* [[rock/Tp,Lvds,Camera | Using Lvds,Tp,Camera on Rock]]&lt;br /&gt;
* [[rock/Rock Lite | Run Rock Lite]]&lt;br /&gt;
* [[rock/Hdmi Resolution| Add new hdmi resolution]]&lt;br /&gt;
* [[rock/wiringX| wringX: GPIO/I2C/SPI/ISR/UART]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-berry-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-check-circle&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Others&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/dual boot| Dual boot Android/Linux]]&lt;br /&gt;
* [[rock/FreeBSD| Boot FreeBSD]] &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-party-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-gamepad&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Addons&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/cases | Cases]]&lt;br /&gt;
* [[rock/cables | Cables]]&lt;br /&gt;
* [[rock/shields | Extension boards]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cello-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hdd-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Hardware&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/specifications| Specifications]]&lt;br /&gt;
* [[rock/hardware revision | Hardware Revision]]&lt;br /&gt;
* [[rock/extension header | Extension Header]]&lt;br /&gt;
* [[rock/hardware docs | hardware documents]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-meadow-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-android&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Android&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/windows adb| ADB under Windows]]&lt;br /&gt;
* [[rock/linux adb| ADB under Linux]]&lt;br /&gt;
* [[rock/Android Build|Build Android image for RR]]&lt;br /&gt;
* [[rock/SD booting | Making bootable SD card]]&lt;br /&gt;
* [[rock/AP android |Make radxa as a WIFI_AP]]&lt;br /&gt;
* [[rock/Android backup | Backup your apps]]&lt;br /&gt;
* [[rock/Android dev tips | Some tips for android development]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cyanide-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-bold&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Bootloader&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/bootloader | Boot Loader]]&lt;br /&gt;
* [[rock/U-Boot | U-Boot]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-6 pull-left&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-neutral-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;Projects&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [http://radxa.com/Rock/pilight Run Pilight on Radxa Rock for remote control]&lt;br /&gt;
* [http://www.mydbapool.com/install-postgresql-9-4-raspberry-pi-radxa-similarmicrocomputers-running-lubuntu/ How to install PostgreSQL 9.4 on Radxa Rock]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/diy-nas-with-rk3188-device-radxa-rock.html DIY low power NAS (home file server) with Radxa Rock]&lt;br /&gt;
* [http://www.megaleecher.net/Network_Sharing_Radxa_Rock Network sharing on Radxa Rock]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/radxa-rock-communicating-with-i2c.html Hardware hacking: Communicating the Radxa with external I2C devices]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/bitbanging-radxa-rock-gpios.html Hardware hacking: Control Radxa Rock's expansion header GPIOs]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-6 pull-right&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-concrete-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;References&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
'''Photos'''&lt;br /&gt;
&lt;br /&gt;
* [http://dl.radxa.com/rock/media/pic/hd/ Some high definition photos of the Radxa Rock engineering samples]&lt;br /&gt;
&lt;br /&gt;
'''External'''&lt;br /&gt;
&lt;br /&gt;
* [http://www.cnx-software.com/2013/09/07/radxa-rock-development-boards-with-rockchip-rk3188-are-available-for-developers-now/ cnx-soft - radxa rock development boards with rockchips rk3188 are available for developers now]&lt;br /&gt;
* [http://linuxgizmos.com/open-sbc-runs-android-and-linux-on-quad-core-rockchip/ linuxgizmos - open sbc runs android and linux on quad core rockchip]&lt;br /&gt;
* [http://minipute.com/2013/09/12/new-radxa-rock-single-board-computer-runs-rockchip-rk3188-90/3246 minipute - new radxa rock single board computer runs rockchip rk3188]&lt;br /&gt;
* [http://omglaptop.com/desktops/radxa-rock-specs-price/ omglaptop - Radxa Rock Specs]&lt;br /&gt;
* [http://liliputing.com/2013/10/picuntu-4-5-installer-loads-ubuntu-onto-rockchip-rk3188-devices.html PicUntu 4.5 with a GUI installer for RK3188 based devices]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock]]&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-10T10:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/flash_the_image}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
We also add UART in wiringX to support serial port communication.  Two UART port on J8: UART0 and UART3. A simple example to use UART0 communicate with arduino uno:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int fd=-1, c=0;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		if(wiringXserialDataAvail (fd)&amp;gt;0){'''&lt;br /&gt;
    '''			c=wiringXserialGetchar(fd);'''&lt;br /&gt;
    '''			printf(&amp;quot;Data received is: %d.\n&amp;quot;, c);'''&lt;br /&gt;
    '''			sleep(1);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	unsigned char d=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''	if ((fd = wiringXserialOpen (&amp;quot;/dev/ttyS0&amp;quot;, 9600)) &amp;lt; 0)	{'''&lt;br /&gt;
    '''	    fprintf (stderr, &amp;quot;Unable to open serial device: %s\n&amp;quot;, strerror (errno)) ;'''&lt;br /&gt;
    '''	    return -1;'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''	wiringXserialPutchar(fd, d);'''&lt;br /&gt;
    '''	while(1){'''&lt;br /&gt;
    '''		digitalWrite(0, HIGH);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''		digitalWrite(0, LOW);'''&lt;br /&gt;
    '''		sleep(1);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Codes on arduino:&lt;br /&gt;
&lt;br /&gt;
    '''boolean stringComplete = false;  // whether the string is complete'''&lt;br /&gt;
    '''char inChar = 0x00;'''&lt;br /&gt;
    '''void setup() {'''&lt;br /&gt;
    '''  // initialize serial:'''&lt;br /&gt;
    '''  Serial.begin(9600);'''&lt;br /&gt;
    '''  pinMode(13,OUTPUT);'''&lt;br /&gt;
    '''  digitalWrite(13,LOW);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop() {'''&lt;br /&gt;
    '''  if (stringComplete) {'''&lt;br /&gt;
    '''    Serial.write(inChar);'''&lt;br /&gt;
    '''    inChar=inChar+1;'''&lt;br /&gt;
    '''    digitalWrite(13,LOW);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''    digitalWrite(13,HIGH);'''&lt;br /&gt;
    '''    delay(1000);'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void serialEvent() {'''&lt;br /&gt;
    '''  while (Serial.available()) {'''&lt;br /&gt;
    '''    inChar = (char)Serial.read();'''&lt;br /&gt;
    '''    if (inChar == 0x00) {'''&lt;br /&gt;
    '''      stringComplete = true;'''&lt;br /&gt;
    '''    }'''&lt;br /&gt;
    '''  }'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[File:Uart.png]]&lt;br /&gt;
&lt;br /&gt;
And you can see LED on arduino and red led on Rock blink.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Uart.png</id>
		<title>File:Uart.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Uart.png"/>
				<updated>2015-06-10T10:49:03Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-10T01:43:16Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/flash_the_image}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(35, OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(35, HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(35, LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-09T13:11:34Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/flash_the_image}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provides digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(pinToGPIO[35], OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(pinToGPIO[35], HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(pinToGPIO[35], LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-09T13:07:10Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/flash_the_image}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35). Pin number defined in wiringX is as below:&lt;br /&gt;
[[File:pin-wiringX.png]]&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provide digitalread and digitalwrite, after you set it as input/output using pinMode. The example below shows how to blink the blue LED (pin NO. 35) on board.&lt;br /&gt;
   ''' #include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	pinMode(pinToGPIO[35], OUTPUT);'''&lt;br /&gt;
    '''	digitalWrite(pinToGPIO[35], HIGH);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''	digitalWrite(pinToGPIO[35], LOW);'''&lt;br /&gt;
    '''	sleep(1);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
To test I2C, SPI and ISR, an arduino uno is used. It has I2C  and SPI, and can act as interrupt source.&lt;br /&gt;
[[File:Arduino.png]]&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8. Code on radxa:&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''                                               &lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''                                                             &lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''                                                            &lt;br /&gt;
    '''#define I2C_ADDR        0x04'''                                                    &lt;br /&gt;
    '''int fd_i2c; '''                                                                    &lt;br /&gt;
    '''int main(void) {   '''                                                             &lt;br /&gt;
    '''        wiringXSetup();'''&lt;br /&gt;
    '''        if((fd_i2c = wiringXI2CSetup(I2C_ADDR)) &amp;lt; 0) {    '''                      &lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup failed: %i\n&amp;quot;, fd_i2c);             ''' &lt;br /&gt;
    '''                return -1;                              '''                        &lt;br /&gt;
    '''        } else {                                                                '''&lt;br /&gt;
    '''                fprintf(stderr, &amp;quot;I2C Setup OK: %i\n&amp;quot;, fd_i2c);          '''       &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''        int data=0;                                               '''              &lt;br /&gt;
    '''        while(1) {                                            '''                  &lt;br /&gt;
    '''                data=wiringXI2CRead(fd_i2c);            '''                        &lt;br /&gt;
    '''                sleep(2);                                                       &lt;br /&gt;
    '''                printf(&amp;quot;Data received is:%d\n&amp;quot;,data);            '''               &lt;br /&gt;
    '''        }                                                                       '''&lt;br /&gt;
    '''} '''&lt;br /&gt;
&lt;br /&gt;
Code on arduino:&lt;br /&gt;
    ''' #include &amp;lt;Wire.h&amp;gt;'''&lt;br /&gt;
    ''' byte i=0;'''&lt;br /&gt;
    ''' void setup()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.begin(4);'''&lt;br /&gt;
    '''   Wire.onRequest(requestEvent);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void loop()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   delay(100);'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
    ''' void requestEvent()'''&lt;br /&gt;
    ''' {'''&lt;br /&gt;
    '''   Wire.write(i);'''&lt;br /&gt;
    '''   i++;'''&lt;br /&gt;
    ''' }'''&lt;br /&gt;
The result:&lt;br /&gt;
&lt;br /&gt;
[[File:I2C.png]]&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. A simple example on radxa: &lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdint.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''/* SPI Config */'''&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''int fd_spi;'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	unsigned char spi_data=0x00;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	// set up SPI'''&lt;br /&gt;
    '''	if((fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED)) &amp;lt; 0) {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup failed: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	} else {'''&lt;br /&gt;
    '''		fprintf(stderr, &amp;quot;SPI Setup OK: %i\n&amp;quot;, fd_spi);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''	while(1) {		'''&lt;br /&gt;
    '''		wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
    '''		printf(&amp;quot;%c\n&amp;quot;,spi_data);'''&lt;br /&gt;
    '''		sleep(2);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
Arduino code:&lt;br /&gt;
    '''#include &amp;lt;SPI.h&amp;gt;'''&lt;br /&gt;
    '''char buf=0;'''&lt;br /&gt;
    '''volatile boolean process_it;'''&lt;br /&gt;
    '''void setup (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  pinMode(MISO, OUTPUT);'''&lt;br /&gt;
    '''  SPCR |= _BV(SPE);'''&lt;br /&gt;
    '''  process_it = false;'''&lt;br /&gt;
    '''  SPI.attachInterrupt();'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''ISR (SPI_STC_vect)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  byte c = SPDR;'''&lt;br /&gt;
    '''  SPDR=0x31;'''&lt;br /&gt;
    '''  buf = c;'''&lt;br /&gt;
    '''  process_it = true;'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''void loop (void)'''&lt;br /&gt;
    '''{'''&lt;br /&gt;
    '''  if (process_it)'''&lt;br /&gt;
    '''  {'''&lt;br /&gt;
    '''    buf= 0;  '''&lt;br /&gt;
    '''    process_it = false;'''&lt;br /&gt;
    '''  } '''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. A simple example:&lt;br /&gt;
&lt;br /&gt;
    '''#include &amp;lt;stdio.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;stdlib.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;unistd.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;lt;pthread.h&amp;gt;'''&lt;br /&gt;
    '''#include &amp;quot;wiringX.h&amp;quot;'''&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0) {'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		} else {'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''		}'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
    '''int main(void) {'''&lt;br /&gt;
    '''	pthread_t pth;'''&lt;br /&gt;
    '''	wiringXSetup();'''&lt;br /&gt;
    '''	wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''	pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
&lt;br /&gt;
It will cause interrupt when rising edge inputs to pin 1. The result:&lt;br /&gt;
&lt;br /&gt;
[[File:Interrupt.png]]&lt;br /&gt;
&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Interrupt.png</id>
		<title>File:Interrupt.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Interrupt.png"/>
				<updated>2015-06-09T13:04:55Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:I2C.png</id>
		<title>File:I2C.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:I2C.png"/>
				<updated>2015-06-09T12:47:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Arduino.png</id>
		<title>File:Arduino.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Arduino.png"/>
				<updated>2015-06-09T12:36:00Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Pin-wiringX.png</id>
		<title>File:Pin-wiringX.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Pin-wiringX.png"/>
				<updated>2015-06-09T12:13:29Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-09T04:19:27Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/flash_the_image}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When compile your source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only pins can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used, (number 33-35).&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provide digitalread and digitalwrite, after you set it as input/output using pinMode:&lt;br /&gt;
    '''wiringXSetup();'''&lt;br /&gt;
    '''pinMode(0, OUTPUT);'''&lt;br /&gt;
    '''digitalWrite(0, HIGH);'''&lt;br /&gt;
&lt;br /&gt;
Theoretically, all pins can be used as GPIO. However, some multiplexed pins can't be used (pin number defined in extension header): J8: 11-16, 20, 22, 24, 26-28, 31-32; J12/15: 33-38. These pins can only be used as PWM, UART or SPI, not for GPIO.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
I2C0 is connected to pin 31, 32 on J8, it can be simply used like:&lt;br /&gt;
    '''#define I2C_ADDR        0x04 '''&lt;br /&gt;
    '''fd_i2c = wiringXI2CSetup(I2C_ADDR)'''&lt;br /&gt;
    '''data=wiringXI2CRead(fd_i2c);'''&lt;br /&gt;
    '''wiringXI2CWrite(fd_i2c, data);'''&lt;br /&gt;
== SPI ==&lt;br /&gt;
SPI0 and SPI1 are connected to J12/15, J8 respectively. It can be used like:&lt;br /&gt;
    '''#define SPI_CHAN	0'''&lt;br /&gt;
    '''#define SPI_SPEED	250000'''&lt;br /&gt;
    '''wiringXSetup();'''&lt;br /&gt;
    '''fd_spi = wiringXSPISetup(SPI_CHAN, SPI_SPEED);'''&lt;br /&gt;
    '''wiringXSPIDataRW(SPI_CHAN, &amp;amp;spi_data, 1);'''&lt;br /&gt;
== ISR ==&lt;br /&gt;
For RK3188, Port A can be configured as interrupt. It can be used like:&lt;br /&gt;
    '''pthread_t pth;'''&lt;br /&gt;
    '''wiringXSetup();'''&lt;br /&gt;
    '''wiringXISR(1, INT_EDGE_RISING);'''&lt;br /&gt;
    '''pthread_create(&amp;amp;pth, NULL, interrupt, NULL);'''&lt;br /&gt;
This will creat a thread &amp;quot;interrupt&amp;quot; to handle:&lt;br /&gt;
    '''void *interrupt(void *param) {'''&lt;br /&gt;
    '''	while(1) {'''&lt;br /&gt;
    '''		if(waitForInterrupt(1, 1000) &amp;gt; 0)'''&lt;br /&gt;
    '''			printf(&amp;quot;interrupt\n&amp;quot;);'''&lt;br /&gt;
    '''		else'''&lt;br /&gt;
    '''			printf(&amp;quot;timeout\n&amp;quot;);'''&lt;br /&gt;
    '''	}'''&lt;br /&gt;
    '''}'''&lt;br /&gt;
It should take note that, for a linux kernel version below  3.12, interrupt only support INT_EDGE_RISING or INT_EDGE_FALLING, not for INT_EDGE_BOTH.&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-09T03:33:44Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/flash_the_image}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. Till now, it supports five platforms: Raspberry Pi, Hummingboard, BananaPi, Radxa Rock and &lt;br /&gt;
MIPS CI20 Creator. For Radxa Rock(pro/lite), wiringX provides interfaces for GPIO, I2C, SPI and ISR. You can easily use these function on Rock through wiringX.&lt;br /&gt;
&lt;br /&gt;
Firstly, you can get wiringX from [https://github.com/wiringX/wiringX github]:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
&lt;br /&gt;
When you compile you source code, add the static lib like:&lt;br /&gt;
    '''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
    '''./test'''&lt;br /&gt;
WiringX is running on your board!&lt;br /&gt;
&lt;br /&gt;
== Pin Number Defined in WiringX==&lt;br /&gt;
You can find pin numbers for Radxa Rock(pro/lite) [http://radxa.com/Rock/extension_header here]. However, only those pins that can be used as GPIO are valid in wiringX. Thus, for J8, totally 21 pins can be used (number defined as 0-20) and for J12/15, 8 pins can be used (number 25-32). Besides, 3 onboard LEDs can be used on pin number 33-35.&lt;br /&gt;
== GPIO ==&lt;br /&gt;
WiringX provide digitalread and digitalwrite to a pin, after you set it as input/output using pinMode:&lt;br /&gt;
'''wiringXSetup();'''&lt;br /&gt;
'''pinMode(0, OUTPUT);'''&lt;br /&gt;
'''digitalWrite(0, HIGH);'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock/wiringX</id>
		<title>Rock/wiringX</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/wiringX"/>
				<updated>2015-06-09T02:59:00Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: Created page with &amp;quot;{{rock_header}} {{Languages|rock/flash_the_image}} __TOC__  WiringX is a modular approach to several GPIO interfaces. For Rock/pro/lite, wiringX provides interface for GPIO, I...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rock_header}}&lt;br /&gt;
{{Languages|rock/flash_the_image}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WiringX is a modular approach to several GPIO interfaces. For Rock/pro/lite, wiringX provides interface for GPIO, I2C, SPI and ISR. You can get the source code and find the way to use it on [https://github.com/wiringX/wiringX github]. &lt;br /&gt;
Firstly, get wiringX from github:&lt;br /&gt;
    '''git clone https://github.com/wiringX/wiringX.git'''&lt;br /&gt;
    '''cd wiringX'''&lt;br /&gt;
or&lt;br /&gt;
    '''wget https://github.com/wiringX/wiringX/archive/master.zip'''&lt;br /&gt;
    '''unzip master.zip'''&lt;br /&gt;
    '''cd  wiringX-master'''&lt;br /&gt;
Then, install wiringX follow the way on github.&lt;br /&gt;
When you compile you source, add the dynamic lib like:&lt;br /&gt;
    ''''gcc -o test test.c /usr/local/lib/libwiringX.a'''&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
== ISR ==&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock</id>
		<title>Rock</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock"/>
				<updated>2015-06-09T02:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Rock_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rock}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-8 mwbs-color-darker&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;thumbnail &amp;quot;&amp;gt;http://wiki.radxa.com/mw/images/3/36/Rock.jpg&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;caption&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Radxa Rock(Pro/Lite)&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;text-justify&amp;quot;&amp;gt;Radxa Rock is a RK3188 based SBC(Single Board Computer) by [[Special:SpecialContact| Radxa]]. It has a quad core ARM processor, can run android or some Linux distributions. It also features 80 pin 2.54mm headers, which makes it easy to connect other sensors or use the GPIO.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-9&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-hearts-white&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt; &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hand-o-up&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Getting started&amp;lt;/h3&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
The Radxa Rock is shipped with Android 4.2.2 (Jelly Bean) and Ubuntu/Linaro 13.09 dual boot on the NAND flash (on-board storage) and it works out of the box(Rock Pro is shipped with Android 4.4.2(Kitkat) on NAND flash). Let's read '''[[rock/Getting Started|Radxa Rock Getting Started Guide]]''' and hook everything up and start playing with the board.&lt;br /&gt;
&lt;br /&gt;
Once you get started, you can [[Rock/flash_the_image|flash]] latest [[Rock/prebuilt_images|Android image and several Linux images]], or you can try to [[Rock/SD_images|boot Android/Linux from SD card]]. You can also [[Rock/Android_Build|build your own Android]], [[Rock/Booting_Linux|build your own kernel]], [[Rock/ubuntu|build your own Ubuntu root file system]], or whatever you want.&lt;br /&gt;
&lt;br /&gt;
'''FAQs'''&lt;br /&gt;
&lt;br /&gt;
Before you ask any questions about the Radxa Rock check if your question has already been asked and answered [[rock/FAQ|Radxa Rock FAQ]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-3 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-midnight-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-download&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Download&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Visit the '''[[rock/download| download]]''' page to get the download link and description of the source code, tools, images etc&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cocktail-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-users&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Community&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
'''Users'''&lt;br /&gt;
&lt;br /&gt;
* [http://talk.radxa.com/ Radxa Talk]&lt;br /&gt;
* [https://plus.google.com/communities/114007636590240429960 Radxa Google Plus community]&lt;br /&gt;
* [https://www.facebook.com/groups/218416868348521/ Facebook Group Page]&lt;br /&gt;
&lt;br /&gt;
'''Developers'''&lt;br /&gt;
&lt;br /&gt;
* [https://groups.google.com/forum/#!forum/radxa radxa google groups], send emails to radxa@googlegroups.com to subscribe &lt;br /&gt;
* &amp;lt;tt&amp;gt;#radxa&amp;lt;/tt&amp;gt; [http://en.wikipedia.org/wiki/Internet_Relay_Chat IRC] channel on [http://freenode.net/ Freenode]. Click to [http://webchat.freenode.net/?channels=radxa join #radxa on Freenode (WebChat mode)], or consult [http://irclog.whitequark.org/radxa/ IRC logs].     &lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-gunmetal-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-linux&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Linux&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/Booting Linux | Build your own kernel and boot into Linux]]&lt;br /&gt;
* [[rock/Linux Mainline | Build Linux Mainline]]&lt;br /&gt;
* [[rock/ubuntu| Make Ubuntu image]]&lt;br /&gt;
* [[rock/audio | Audio on Rock]]&lt;br /&gt;
* [[rock/display | Display on Rock]]&lt;br /&gt;
* [[rock/LED| Using LEDs on Rock]]&lt;br /&gt;
* [[rock/vnc | Setting up VNC server on Rock]]&lt;br /&gt;
* [[rock/sd lubuntu | Boot Lubuntu from SD card]] '''OBSOLETE'''       &lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-mango-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-cog&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Common HowTos&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/flash the image | Flash the image to NAND]]&lt;br /&gt;
* [[rock/SD images | Flash the image to SD card]]&lt;br /&gt;
* [[rock/SD upgrading | Upgrade NAND from SD card]]&lt;br /&gt;
* [[rock/make_sd_image| Make SD booting images]]&lt;br /&gt;
* [[rock/backup| Backing up]]&lt;br /&gt;
* [[rock/fsck| Recovery ext4 file system]]&lt;br /&gt;
* [[rock/Serial debug tools Setting | Serial console debugging]]&lt;br /&gt;
* [[rock/unbrick | Unbrick Rock]]&lt;br /&gt;
* [[rock/resize linux rootfs |Resize linux rootfs ]]&lt;br /&gt;
* [[rock/ir| Using IR on Rock]]&lt;br /&gt;
* [[rock/usb| Using USB on Rock]]&lt;br /&gt;
* [[rock/uart| Using UART on Rock]]&lt;br /&gt;
* [[rock/Wireless | Using Wireless on Rock]]&lt;br /&gt;
* [[rock/Camera | Using Camera on Rock]]&lt;br /&gt;
* [[rock/Tp,Lvds,Camera | Using Lvds,Tp,Camera on Rock]]&lt;br /&gt;
* [[rock/Rock Lite | Run Rock Lite]]&lt;br /&gt;
* [[rock/Hdmi Resolution| Add new hdmi resolution]]&lt;br /&gt;
* [[rock/wiringX| wringX: GPIO/I2C/SPI/ISR]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-berry-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-check-circle&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Others&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/dual boot| Dual boot Android/Linux]]&lt;br /&gt;
* [[rock/FreeBSD| Boot FreeBSD]] &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-party-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-gamepad&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Addons&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/cases | Cases]]&lt;br /&gt;
* [[rock/cables | Cables]]&lt;br /&gt;
* [[rock/shields | Extension boards]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-4 &amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cello-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hdd-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Hardware&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/specifications| Specifications]]&lt;br /&gt;
* [[rock/hardware revision | Hardware Revision]]&lt;br /&gt;
* [[rock/extension header | Extension Header]]&lt;br /&gt;
* [[rock/hardware docs | hardware documents]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-meadow-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-android&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Android&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/windows adb| ADB under Windows]]&lt;br /&gt;
* [[rock/linux adb| ADB under Linux]]&lt;br /&gt;
* [[rock/Android Build|Build Android image for RR]]&lt;br /&gt;
* [[rock/SD booting | Making bootable SD card]]&lt;br /&gt;
* [[rock/AP android |Make radxa as a WIFI_AP]]&lt;br /&gt;
* [[rock/Android backup | Backup your apps]]&lt;br /&gt;
* [[rock/Android dev tips | Some tips for android development]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-cyanide-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-bold&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Bootloader&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[rock/bootloader | Boot Loader]]&lt;br /&gt;
* [[rock/U-Boot | U-Boot]]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-6 pull-left&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-neutral-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;Projects&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [http://radxa.com/Rock/pilight Run Pilight on Radxa Rock for remote control]&lt;br /&gt;
* [http://www.mydbapool.com/install-postgresql-9-4-raspberry-pi-radxa-similarmicrocomputers-running-lubuntu/ How to install PostgreSQL 9.4 on Radxa Rock]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/diy-nas-with-rk3188-device-radxa-rock.html DIY low power NAS (home file server) with Radxa Rock]&lt;br /&gt;
* [http://www.megaleecher.net/Network_Sharing_Radxa_Rock Network sharing on Radxa Rock]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/radxa-rock-communicating-with-i2c.html Hardware hacking: Communicating the Radxa with external I2C devices]&lt;br /&gt;
* [http://hwswbits.blogspot.com/2013/10/bitbanging-radxa-rock-gpios.html Hardware hacking: Control Radxa Rock's expansion header GPIOs]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;col-md-6 pull-right&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel panel-concrete-white&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;References&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
'''Photos'''&lt;br /&gt;
&lt;br /&gt;
* [http://dl.radxa.com/rock/media/pic/hd/ Some high definition photos of the Radxa Rock engineering samples]&lt;br /&gt;
&lt;br /&gt;
'''External'''&lt;br /&gt;
&lt;br /&gt;
* [http://www.cnx-software.com/2013/09/07/radxa-rock-development-boards-with-rockchip-rk3188-are-available-for-developers-now/ cnx-soft - radxa rock development boards with rockchips rk3188 are available for developers now]&lt;br /&gt;
* [http://linuxgizmos.com/open-sbc-runs-android-and-linux-on-quad-core-rockchip/ linuxgizmos - open sbc runs android and linux on quad core rockchip]&lt;br /&gt;
* [http://minipute.com/2013/09/12/new-radxa-rock-single-board-computer-runs-rockchip-rk3188-90/3246 minipute - new radxa rock single board computer runs rockchip rk3188]&lt;br /&gt;
* [http://omglaptop.com/desktops/radxa-rock-specs-price/ omglaptop - Radxa Rock Specs]&lt;br /&gt;
* [http://liliputing.com/2013/10/picuntu-4-5-installer-loads-ubuntu-onto-rockchip-rk3188-devices.html PicUntu 4.5 with a GUI installer for RK3188 based devices]&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock]]&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Rock2-square_header.png</id>
		<title>File:Rock2-square header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Rock2-square_header.png"/>
				<updated>2015-06-03T08:23:10Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: Pavle uploaded a new version of &amp;amp;quot;File:Rock2-square header.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Rock2-square_header.png</id>
		<title>File:Rock2-square header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Rock2-square_header.png"/>
				<updated>2015-06-03T08:20:50Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: Pavle uploaded a new version of &amp;amp;quot;File:Rock2-square header.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Rock2-square_header.png</id>
		<title>File:Rock2-square header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Rock2-square_header.png"/>
				<updated>2015-06-03T08:15:31Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: Pavle uploaded a new version of &amp;amp;quot;File:Rock2-square header.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Rock2-square_header.png</id>
		<title>File:Rock2-square header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Rock2-square_header.png"/>
				<updated>2015-06-03T08:14:09Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: Pavle uploaded a new version of &amp;amp;quot;File:Rock2-square header.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock2/square_bb/extension_header</id>
		<title>Rock2/square bb/extension header</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock2/square_bb/extension_header"/>
				<updated>2015-06-03T07:52:19Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rock2 Sqaure has two extension header on board, one is 50pin 2mm extension header for display. It support LVDS and single channel display with i2c for touch screen. The other is 40 pin 2.54mm extension header for GPIO/SPI/UART /I2C etc.&lt;br /&gt;
[[File:Rock2-square header.png]] 	&lt;br /&gt;
==J7 (near wifi antenna, 50 pin 2mm)==&lt;br /&gt;
J7 is mainly used for MIPI and LVDS. There are several pins can be used as GPIO, but not recommended.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:50%; white-space:nowrap&amp;quot;&lt;br /&gt;
 ! colspan=8 | J7 &amp;lt;small&amp;gt;(50 Pins)&amp;lt;/small&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ! 1&lt;br /&gt;
 | style=&amp;quot;width:50%;&amp;quot; | I2C4_SDA_TP  || colspan=2 | GPIO7_C1_d&lt;br /&gt;
 ! 2&lt;br /&gt;
 | style=&amp;quot;width:50%;&amp;quot; | TOUCH_INT || colspan=2 | GPIO7_A6_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 3&lt;br /&gt;
 | I2C4_SCL_TP || colspan=2 | GPIO7_C2_d&lt;br /&gt;
 ! 4&lt;br /&gt;
 | colspan=3 | VCC_TP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 5&lt;br /&gt;
 | TOUCH_RST || colspan=2 | GPIO7_A5_d&lt;br /&gt;
 ! 6&lt;br /&gt;
 | colspan=3 | VCC_TP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 7&lt;br /&gt;
 | colspan=3 | VCC_LCD&lt;br /&gt;
 ! 8&lt;br /&gt;
 |I2C1_SCL_Sensor || colspan=2 |  GPIO8_A5&lt;br /&gt;
 |-&lt;br /&gt;
 ! 9&lt;br /&gt;
 | colspan=3 | VCC_LCD&lt;br /&gt;
 ! 10&lt;br /&gt;
 | I2C1_SDA_Sensor || colspan=2 |  GPIO8_A4&lt;br /&gt;
 |-&lt;br /&gt;
 ! 11&lt;br /&gt;
 | colspan=3 | LVDS_D5N&lt;br /&gt;
 ! 12&lt;br /&gt;
 | colspan=3 | LVDS_D5P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 13&lt;br /&gt;
 | colspan=3 | LVDS_D6N&lt;br /&gt;
 ! 14&lt;br /&gt;
 | colspan=3 | LVDS_D6P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 15&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 ! 16&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 |- &lt;br /&gt;
 ! 17&lt;br /&gt;
 | colspan=3 | LVDS_D7N&lt;br /&gt;
 ! 18&lt;br /&gt;
 | colspan=3 | LVDS_D7P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 19&lt;br /&gt;
 | colspan=3 | LVDS_D8N&lt;br /&gt;
 ! 20&lt;br /&gt;
 | colspan=3 | LVDS_D8P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 21&lt;br /&gt;
 | colspan=3 | LVDS_CLK1N&lt;br /&gt;
 ! 22&lt;br /&gt;
 | colspan=3 | LVDS_CLK1P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 23&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D3N&lt;br /&gt;
 ! 24&lt;br /&gt;
 |colspan=3 |MIPI_TX/RX_D3P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 25&lt;br /&gt;
 |colspan=3 | MIPI_TX/RX_D2N&lt;br /&gt;
 ! 26&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D2P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 27&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D1N&lt;br /&gt;
 ! 28&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D1P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 29&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D0N&lt;br /&gt;
 ! 30&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D0P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 31&lt;br /&gt;
 |  colspan=3 | LVDS_D0N&lt;br /&gt;
 ! 32&lt;br /&gt;
 |  colspan=3 | LVDS_D0P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 33&lt;br /&gt;
 | colspan=3 | LVDS_D1N&lt;br /&gt;
 ! 34&lt;br /&gt;
 | colspan=3 | LVDS_D1P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 35&lt;br /&gt;
 | colspan=3 | LCD_BL_LVDS&lt;br /&gt;
 ! 36&lt;br /&gt;
 | colspan=3 | BL_EN_LVDS&lt;br /&gt;
 |-&lt;br /&gt;
 ! 37&lt;br /&gt;
 | colspan=3 | VCC_LEDK&lt;br /&gt;
 ! 38&lt;br /&gt;
 | colspan=3 | VCC_LEDA&lt;br /&gt;
 |-&lt;br /&gt;
 ! 39&lt;br /&gt;
 | colspan=3 | VCC_LEDK&lt;br /&gt;
 ! 40&lt;br /&gt;
 | colspan=3 | VCC_LEDA&lt;br /&gt;
 |-&lt;br /&gt;
 ! 41&lt;br /&gt;
 | colspan=3 | LVDS_D2N&lt;br /&gt;
 ! 42&lt;br /&gt;
 | colspan=3 | LVDS_D2P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 43&lt;br /&gt;
 | colspan=3 | LVDS_D3N&lt;br /&gt;
 ! 44&lt;br /&gt;
 | colspan=3 | LVDS_D3P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 45&lt;br /&gt;
 | colspan=3 | LVDS_CLK0N&lt;br /&gt;
 ! 46&lt;br /&gt;
 | colspan=3 | LVDS_CLK0P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 47&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_CLKN&lt;br /&gt;
 ! 48&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_CLKP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 49&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 ! 50&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==J13 (near DC jack, 40 pin 2.54mm)==&lt;br /&gt;
J13: most pins can be used as GPIO, also multiplexed as SPI, UART, I2C, etc.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:50%; white-space:nowrap&amp;quot;&lt;br /&gt;
 ! colspan=8 | J25 &lt;br /&gt;
 |-&lt;br /&gt;
 ! 1&lt;br /&gt;
 | colspan=3 style=&amp;quot;width:50%;&amp;quot; | GND&lt;br /&gt;
 ! 2&lt;br /&gt;
 | colspan=3 style=&amp;quot;width:50%;&amp;quot; | VCC_SYS&lt;br /&gt;
 |-&lt;br /&gt;
 ! 3&lt;br /&gt;
 | colspan=3 | GPIO3_B5_u&lt;br /&gt;
 ! 4&lt;br /&gt;
 | colspan=3 | GPIO2_A7&lt;br /&gt;
 |-&lt;br /&gt;
 ! 5&lt;br /&gt;
 | colspan=3 | GPIO3_B4_d&lt;br /&gt;
 ! 6&lt;br /&gt;
 | colspan=3 | GPIO2_A6&lt;br /&gt;
 |-&lt;br /&gt;
 ! 7&lt;br /&gt;
 | colspan=3 | GPIO3_B3_d&lt;br /&gt;
 ! 8&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 |-&lt;br /&gt;
 ! 9&lt;br /&gt;
 | colspan=3 | GPIO3_B2_u&lt;br /&gt;
 ! 10&lt;br /&gt;
 | colspan=3 | GPIO7_B6&lt;br /&gt;
 |-&lt;br /&gt;
 ! 11&lt;br /&gt;
 | colspan=3 |  VCC_18&lt;br /&gt;
 ! 12&lt;br /&gt;
 |  colspan=3 | GPIO4_A7&lt;br /&gt;
 |-&lt;br /&gt;
 ! 13&lt;br /&gt;
 |  colspan=3 | VCC_3V&lt;br /&gt;
 ! 14&lt;br /&gt;
 | colspan=3 |  VCC18_DVP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 15&lt;br /&gt;
 | ADCIN2 || colspan=2 | GPIO6_A7_d&lt;br /&gt;
 ! 16&lt;br /&gt;
 |  colspan=3 | BAT_DET&lt;br /&gt;
 |- &lt;br /&gt;
 ! 17&lt;br /&gt;
 | colspan=3 | HUB_DM1&lt;br /&gt;
 ! 18&lt;br /&gt;
 | colspan=3 | GPIO8_A0&lt;br /&gt;
 |-&lt;br /&gt;
 ! 19&lt;br /&gt;
 |  colspan=3 | HUB_DP1&lt;br /&gt;
 ! 20&lt;br /&gt;
 | SPI2_TXD|| colspan=2 | GPIO8_B1&lt;br /&gt;
 |-&lt;br /&gt;
 ! 21&lt;br /&gt;
 | I2C1_SDA_Sensor || colspan=2 | GPIO8_A4&lt;br /&gt;
 ! 22&lt;br /&gt;
 | SPI2_RXD || colspan=2 |  GPIO8_B0&lt;br /&gt;
 |-&lt;br /&gt;
 ! 23&lt;br /&gt;
 | I2C1_SCL_Sensor || colspan=2 | GPIO8_A5&lt;br /&gt;
 ! 24&lt;br /&gt;
 | SPI2_CLK || colspan=2 | GPIO8_A6&lt;br /&gt;
 |-&lt;br /&gt;
 ! 25&lt;br /&gt;
 | colspan=3 | VCC_IO&lt;br /&gt;
 ! 26&lt;br /&gt;
 | SPI2_CSn1 || colspan=2 | GPIO8_A3&lt;br /&gt;
 |-&lt;br /&gt;
 ! 27&lt;br /&gt;
 | colspan=3 | HSIC_STROBE&lt;br /&gt;
 ! 28&lt;br /&gt;
 | SPI2_CSn0 || colspan=2 | GPIO8_A7&lt;br /&gt;
 |-&lt;br /&gt;
 ! 29&lt;br /&gt;
 | colspan=3 | HSIC_DATA&lt;br /&gt;
 ! 30&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 |-&lt;br /&gt;
 ! 31&lt;br /&gt;
 | colspan=3 |  GND&lt;br /&gt;
 ! 32&lt;br /&gt;
 | SPI0_TXD || colspan=2 | GPIO5_B6_d&lt;br /&gt;
 |-&lt;br /&gt;
 ! 33&lt;br /&gt;
 | UART1_RX || colspan=2 | GPIO5_B0_u&lt;br /&gt;
 ! 34&lt;br /&gt;
 | SPI0_RXD || colspan=2 | GPIO5_B7_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 35&lt;br /&gt;
 | UART1_RTS || colspan=2 | GPIO5_B3_u&lt;br /&gt;
 ! 36&lt;br /&gt;
 | SPI0_CSn1 || colspan=2 | GPIO5_C0_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 37&lt;br /&gt;
 | UART1_CTS || colspan=2 | GPIO5_B2_u&lt;br /&gt;
 ! 38&lt;br /&gt;
 | SPI0_CSn0 || colspan=2 | GPIO5_B5_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 39&lt;br /&gt;
 | UART1_TX || colspan=2 | GPIO5_B1_d&lt;br /&gt;
 ! 40&lt;br /&gt;
 | SPI0_CLK || colspan=2 | GPIO5_B4_u&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/Rock2/square_bb/extension_header</id>
		<title>Rock2/square bb/extension header</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock2/square_bb/extension_header"/>
				<updated>2015-06-03T07:51:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rock2 Sqaure has two extension header on board, one is 50pin 2mm extension header for display. It support LVDS and single channel display with i2c for touch screen. The other is 40 pin 2.54mm extension header for GPIO/SPI/UART etc.&lt;br /&gt;
[[File:Rock2-square header.png]] 	&lt;br /&gt;
==J7 (near wifi antenna, 50 pin 2mm)==&lt;br /&gt;
J7 is mainly used for MIPI and LVDS. There are several pins can be used as GPIO, but not recommended.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:50%; white-space:nowrap&amp;quot;&lt;br /&gt;
 ! colspan=8 | J7 &amp;lt;small&amp;gt;(50 Pins)&amp;lt;/small&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ! 1&lt;br /&gt;
 | style=&amp;quot;width:50%;&amp;quot; | I2C4_SDA_TP  || colspan=2 | GPIO7_C1_d&lt;br /&gt;
 ! 2&lt;br /&gt;
 | style=&amp;quot;width:50%;&amp;quot; | TOUCH_INT || colspan=2 | GPIO7_A6_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 3&lt;br /&gt;
 | I2C4_SCL_TP || colspan=2 | GPIO7_C2_d&lt;br /&gt;
 ! 4&lt;br /&gt;
 | colspan=3 | VCC_TP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 5&lt;br /&gt;
 | TOUCH_RST || colspan=2 | GPIO7_A5_d&lt;br /&gt;
 ! 6&lt;br /&gt;
 | colspan=3 | VCC_TP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 7&lt;br /&gt;
 | colspan=3 | VCC_LCD&lt;br /&gt;
 ! 8&lt;br /&gt;
 |I2C1_SCL_Sensor || colspan=2 |  GPIO8_A5&lt;br /&gt;
 |-&lt;br /&gt;
 ! 9&lt;br /&gt;
 | colspan=3 | VCC_LCD&lt;br /&gt;
 ! 10&lt;br /&gt;
 | I2C1_SDA_Sensor || colspan=2 |  GPIO8_A4&lt;br /&gt;
 |-&lt;br /&gt;
 ! 11&lt;br /&gt;
 | colspan=3 | LVDS_D5N&lt;br /&gt;
 ! 12&lt;br /&gt;
 | colspan=3 | LVDS_D5P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 13&lt;br /&gt;
 | colspan=3 | LVDS_D6N&lt;br /&gt;
 ! 14&lt;br /&gt;
 | colspan=3 | LVDS_D6P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 15&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 ! 16&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 |- &lt;br /&gt;
 ! 17&lt;br /&gt;
 | colspan=3 | LVDS_D7N&lt;br /&gt;
 ! 18&lt;br /&gt;
 | colspan=3 | LVDS_D7P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 19&lt;br /&gt;
 | colspan=3 | LVDS_D8N&lt;br /&gt;
 ! 20&lt;br /&gt;
 | colspan=3 | LVDS_D8P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 21&lt;br /&gt;
 | colspan=3 | LVDS_CLK1N&lt;br /&gt;
 ! 22&lt;br /&gt;
 | colspan=3 | LVDS_CLK1P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 23&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D3N&lt;br /&gt;
 ! 24&lt;br /&gt;
 |colspan=3 |MIPI_TX/RX_D3P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 25&lt;br /&gt;
 |colspan=3 | MIPI_TX/RX_D2N&lt;br /&gt;
 ! 26&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D2P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 27&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D1N&lt;br /&gt;
 ! 28&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D1P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 29&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D0N&lt;br /&gt;
 ! 30&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_D0P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 31&lt;br /&gt;
 |  colspan=3 | LVDS_D0N&lt;br /&gt;
 ! 32&lt;br /&gt;
 |  colspan=3 | LVDS_D0P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 33&lt;br /&gt;
 | colspan=3 | LVDS_D1N&lt;br /&gt;
 ! 34&lt;br /&gt;
 | colspan=3 | LVDS_D1P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 35&lt;br /&gt;
 | colspan=3 | LCD_BL_LVDS&lt;br /&gt;
 ! 36&lt;br /&gt;
 | colspan=3 | BL_EN_LVDS&lt;br /&gt;
 |-&lt;br /&gt;
 ! 37&lt;br /&gt;
 | colspan=3 | VCC_LEDK&lt;br /&gt;
 ! 38&lt;br /&gt;
 | colspan=3 | VCC_LEDA&lt;br /&gt;
 |-&lt;br /&gt;
 ! 39&lt;br /&gt;
 | colspan=3 | VCC_LEDK&lt;br /&gt;
 ! 40&lt;br /&gt;
 | colspan=3 | VCC_LEDA&lt;br /&gt;
 |-&lt;br /&gt;
 ! 41&lt;br /&gt;
 | colspan=3 | LVDS_D2N&lt;br /&gt;
 ! 42&lt;br /&gt;
 | colspan=3 | LVDS_D2P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 43&lt;br /&gt;
 | colspan=3 | LVDS_D3N&lt;br /&gt;
 ! 44&lt;br /&gt;
 | colspan=3 | LVDS_D3P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 45&lt;br /&gt;
 | colspan=3 | LVDS_CLK0N&lt;br /&gt;
 ! 46&lt;br /&gt;
 | colspan=3 | LVDS_CLK0P&lt;br /&gt;
 |-&lt;br /&gt;
 ! 47&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_CLKN&lt;br /&gt;
 ! 48&lt;br /&gt;
 | colspan=3 |MIPI_TX/RX_CLKP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 49&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 ! 50&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==J13 (near DC jack, 40 pin 2.54mm)==&lt;br /&gt;
J13: most pins can be used as GPIO, also multiplexed as SPI, UART, I2C, etc.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:50%; white-space:nowrap&amp;quot;&lt;br /&gt;
 ! colspan=8 | J25 &lt;br /&gt;
 |-&lt;br /&gt;
 ! 1&lt;br /&gt;
 | colspan=3 style=&amp;quot;width:50%;&amp;quot; | GND&lt;br /&gt;
 ! 2&lt;br /&gt;
 | colspan=3 style=&amp;quot;width:50%;&amp;quot; | VCC_SYS&lt;br /&gt;
 |-&lt;br /&gt;
 ! 3&lt;br /&gt;
 | colspan=3 | GPIO3_B5_u&lt;br /&gt;
 ! 4&lt;br /&gt;
 | colspan=3 | GPIO2_A7&lt;br /&gt;
 |-&lt;br /&gt;
 ! 5&lt;br /&gt;
 | colspan=3 | GPIO3_B4_d&lt;br /&gt;
 ! 6&lt;br /&gt;
 | colspan=3 | GPIO2_A6&lt;br /&gt;
 |-&lt;br /&gt;
 ! 7&lt;br /&gt;
 | colspan=3 | GPIO3_B3_d&lt;br /&gt;
 ! 8&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 |-&lt;br /&gt;
 ! 9&lt;br /&gt;
 | colspan=3 | GPIO3_B2_u&lt;br /&gt;
 ! 10&lt;br /&gt;
 | colspan=3 | GPIO7_B6&lt;br /&gt;
 |-&lt;br /&gt;
 ! 11&lt;br /&gt;
 | colspan=3 |  VCC_18&lt;br /&gt;
 ! 12&lt;br /&gt;
 |  colspan=3 | GPIO4_A7&lt;br /&gt;
 |-&lt;br /&gt;
 ! 13&lt;br /&gt;
 |  colspan=3 | VCC_3V&lt;br /&gt;
 ! 14&lt;br /&gt;
 | colspan=3 |  VCC18_DVP&lt;br /&gt;
 |-&lt;br /&gt;
 ! 15&lt;br /&gt;
 | ADCIN2 || colspan=2 | GPIO6_A7_d&lt;br /&gt;
 ! 16&lt;br /&gt;
 |  colspan=3 | BAT_DET&lt;br /&gt;
 |- &lt;br /&gt;
 ! 17&lt;br /&gt;
 | colspan=3 | HUB_DM1&lt;br /&gt;
 ! 18&lt;br /&gt;
 | colspan=3 | GPIO8_A0&lt;br /&gt;
 |-&lt;br /&gt;
 ! 19&lt;br /&gt;
 |  colspan=3 | HUB_DP1&lt;br /&gt;
 ! 20&lt;br /&gt;
 | SPI2_TXD|| colspan=2 | GPIO8_B1&lt;br /&gt;
 |-&lt;br /&gt;
 ! 21&lt;br /&gt;
 | I2C1_SDA_Sensor || colspan=2 | GPIO8_A4&lt;br /&gt;
 ! 22&lt;br /&gt;
 | SPI2_RXD || colspan=2 |  GPIO8_B0&lt;br /&gt;
 |-&lt;br /&gt;
 ! 23&lt;br /&gt;
 | I2C1_SCL_Sensor || colspan=2 | GPIO8_A5&lt;br /&gt;
 ! 24&lt;br /&gt;
 | SPI2_CLK || colspan=2 | GPIO8_A6&lt;br /&gt;
 |-&lt;br /&gt;
 ! 25&lt;br /&gt;
 | colspan=3 | VCC_IO&lt;br /&gt;
 ! 26&lt;br /&gt;
 | SPI2_CSn1 || colspan=2 | GPIO8_A3&lt;br /&gt;
 |-&lt;br /&gt;
 ! 27&lt;br /&gt;
 | colspan=3 | HSIC_STROBE&lt;br /&gt;
 ! 28&lt;br /&gt;
 | SPI2_CSn0 || colspan=2 | GPIO8_A7&lt;br /&gt;
 |-&lt;br /&gt;
 ! 29&lt;br /&gt;
 | colspan=3 | HSIC_DATA&lt;br /&gt;
 ! 30&lt;br /&gt;
 | colspan=3 | GND&lt;br /&gt;
 |-&lt;br /&gt;
 ! 31&lt;br /&gt;
 | colspan=3 |  GND&lt;br /&gt;
 ! 32&lt;br /&gt;
 | SPI0_TXD || colspan=2 | GPIO5_B6_d&lt;br /&gt;
 |-&lt;br /&gt;
 ! 33&lt;br /&gt;
 | UART1_RX || colspan=2 | GPIO5_B0_u&lt;br /&gt;
 ! 34&lt;br /&gt;
 | SPI0_RXD || colspan=2 | GPIO5_B7_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 35&lt;br /&gt;
 | UART1_RTS || colspan=2 | GPIO5_B3_u&lt;br /&gt;
 ! 36&lt;br /&gt;
 | SPI0_CSn1 || colspan=2 | GPIO5_C0_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 37&lt;br /&gt;
 | UART1_CTS || colspan=2 | GPIO5_B2_u&lt;br /&gt;
 ! 38&lt;br /&gt;
 | SPI0_CSn0 || colspan=2 | GPIO5_B5_u&lt;br /&gt;
 |-&lt;br /&gt;
 ! 39&lt;br /&gt;
 | UART1_TX || colspan=2 | GPIO5_B1_d&lt;br /&gt;
 ! 40&lt;br /&gt;
 | SPI0_CLK || colspan=2 | GPIO5_B4_u&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:Rock2-square_header.png</id>
		<title>File:Rock2-square header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:Rock2-square_header.png"/>
				<updated>2015-06-03T07:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:J13_header.png</id>
		<title>File:J13 header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:J13_header.png"/>
				<updated>2015-06-03T07:24:24Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/File:J7_header.png</id>
		<title>File:J7 header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/File:J7_header.png"/>
				<updated>2015-06-03T07:18:35Z</updated>
		
		<summary type="html">&lt;p&gt;Pavle: J7_header.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;J7_header.png&lt;/div&gt;</summary>
		<author><name>Pavle</name></author>	</entry>

	</feed>