From fbdb302a5c0cf9e01cf8b595bb2d9a0162670a30 Mon Sep 17 00:00:00 2001
From: Grace Copplestone <gracecopplestone@dhcp-18-111-7-58.dyn.mit.edu>
Date: Wed, 9 Aug 2017 11:50:36 -0400
Subject: [PATCH] change file structure

---
 .DS_Store                                     | Bin 0 -> 6148 bytes
 documentation/.gitkeep                        |   0
 families/.DS_Store                            | Bin 0 -> 6148 bytes
 .../e5}/8e5_datasheet.pdf                     | Bin
 families/e5/8e5_hello_world.c                 |  79 ++++++
 families/e5/8e5_hello_world_layout.png        | Bin 0 -> 7731 bytes
 families/e5/8e5_hello_world_outline.png       | Bin 0 -> 7493 bytes
 families/e5/8e5_hello_world_traces.png        | Bin 0 -> 19827 bytes
 {documentation => families/e5}/8e5_pinout.jpg | Bin
 families/e5/8e5_usart_hello_world.make        |  19 ++
 README.md => families/e5/README.md            |   2 +-
 families/e5/serial.h                          | 226 ++++++++++++++++++
 {adc => functionality/adc}/adc.8E5.board.jpg  | Bin
 {adc => functionality/adc}/adc.8E5.c          |   0
 .../adc}/adc.8E5.interior.png                 | Bin
 {adc => functionality/adc}/adc.8E5.layout.png | Bin
 {adc => functionality/adc}/adc.8E5.make       |   0
 {adc => functionality/adc}/adc.8E5.traces.png | Bin
 {adc => functionality/adc}/adc.h              |   0
 .../adc}/load-cell-small.mp4                  | Bin
 {adc => functionality/adc}/serial.h           |   0
 {dac => functionality/dac}/hello.8E5.dac.c    |   0
 {dac => functionality/dac}/hello.8E5.dac.make |   0
 {dac => functionality/dac}/make_lookup.py     |   0
 {dac => functionality/dac}/sine.png           | Bin
 .../dac}/xmega-8e5-dac-board.jpg              | Bin
 .../dac}/xmega-8e5-dac-layout.png             | Bin
 .../dac}/xmega-8e5-dac-outline.png            | Bin
 .../dac}/xmega-8e5-dac-traces.png             | Bin
 .../i2c}/hall-encoder-interior.png            | Bin
 .../i2c}/hall-encoder-layout.png              | Bin
 .../i2c}/hall-encoder-traces.png              | Bin
 .../i2c}/hall-encoder-wj.png                  | Bin
 {i2c => functionality/i2c}/hall-encoder.c     |   0
 {i2c => functionality/i2c}/hall-encoder.ko    |   0
 {i2c => functionality/i2c}/hall-encoder.make  |   0
 {i2c => functionality/i2c}/load.py            |   0
 .../i2c}/loadcell-reading-v-force.png         | Bin
 {i2c => functionality/i2c}/serial.h           |   0
 {i2c => functionality/i2c}/testing.jpg        | Bin
 .../qdec}/hello.16a4u.qdec.c                  |   0
 .../qdec}/hello.16a4u.qdec.make               |   0
 {qdec => functionality/qdec}/qdec.mp4         | Bin
 {qdec => functionality/qdec}/serial.h         |   0
 .../qdec}/xmega-16a4u-qdec-board.jpg          | Bin
 .../qdec}/xmega-16a4u-qdec-interior.png       | Bin
 .../qdec}/xmega-16a4u-qdec-layout.png         | Bin
 .../qdec}/xmega-16a4u-qdec-traces.png         | Bin
 {usart => functionality/usart}/README.md      |   0
 {usart => functionality/usart}/serial.h       |   0
 {usart => functionality/usart}/usart.32a4u.c  |   0
 .../usart}/usart.32a4u.interior.png           | Bin
 {usart => functionality/usart}/usart.32a4u.ko |   0
 .../usart}/usart.32a4u.layout.png             | Bin
 .../usart}/usart.32a4u.make                   |   0
 .../usart}/usart.32a4u.traces.png             | Bin
 .../usart}/xmega_usart_app_note.pdf           | Bin
 {xcl => functionality/xcl}/.png               | Bin
 {xcl => functionality/xcl}/TEK00025.PNG       | Bin
 {xcl => functionality/xcl}/TEK00026.PNG       | Bin
 {xcl => functionality/xcl}/xcl.8E5.c.hex      |   0
 {xcl => functionality/xcl}/xcl.8e5.c          |   0
 .../xcl}/xcl.8e5.interior.png                 | Bin
 {xcl => functionality/xcl}/xcl.8e5.ko         |   0
 {xcl => functionality/xcl}/xcl.8e5.layout.png | Bin
 {xcl => functionality/xcl}/xcl.8e5.make       |   0
 {xcl => functionality/xcl}/xcl.8e5.scope.png  | Bin
 {xcl => functionality/xcl}/xcl.8e5.traces.png | Bin
 index.html                                    |  96 ++++----
 69 files changed, 374 insertions(+), 48 deletions(-)
 create mode 100644 .DS_Store
 delete mode 100644 documentation/.gitkeep
 create mode 100644 families/.DS_Store
 rename {documentation => families/e5}/8e5_datasheet.pdf (100%)
 create mode 100644 families/e5/8e5_hello_world.c
 create mode 100644 families/e5/8e5_hello_world_layout.png
 create mode 100644 families/e5/8e5_hello_world_outline.png
 create mode 100644 families/e5/8e5_hello_world_traces.png
 rename {documentation => families/e5}/8e5_pinout.jpg (100%)
 create mode 100644 families/e5/8e5_usart_hello_world.make
 rename README.md => families/e5/README.md (86%)
 create mode 100644 families/e5/serial.h
 rename {adc => functionality/adc}/adc.8E5.board.jpg (100%)
 rename {adc => functionality/adc}/adc.8E5.c (100%)
 rename {adc => functionality/adc}/adc.8E5.interior.png (100%)
 rename {adc => functionality/adc}/adc.8E5.layout.png (100%)
 rename {adc => functionality/adc}/adc.8E5.make (100%)
 rename {adc => functionality/adc}/adc.8E5.traces.png (100%)
 rename {adc => functionality/adc}/adc.h (100%)
 rename {adc => functionality/adc}/load-cell-small.mp4 (100%)
 rename {adc => functionality/adc}/serial.h (100%)
 rename {dac => functionality/dac}/hello.8E5.dac.c (100%)
 rename {dac => functionality/dac}/hello.8E5.dac.make (100%)
 rename {dac => functionality/dac}/make_lookup.py (100%)
 rename {dac => functionality/dac}/sine.png (100%)
 rename {dac => functionality/dac}/xmega-8e5-dac-board.jpg (100%)
 rename {dac => functionality/dac}/xmega-8e5-dac-layout.png (100%)
 rename {dac => functionality/dac}/xmega-8e5-dac-outline.png (100%)
 rename {dac => functionality/dac}/xmega-8e5-dac-traces.png (100%)
 rename {i2c => functionality/i2c}/hall-encoder-interior.png (100%)
 rename {i2c => functionality/i2c}/hall-encoder-layout.png (100%)
 rename {i2c => functionality/i2c}/hall-encoder-traces.png (100%)
 rename {i2c => functionality/i2c}/hall-encoder-wj.png (100%)
 rename {i2c => functionality/i2c}/hall-encoder.c (100%)
 rename {i2c => functionality/i2c}/hall-encoder.ko (100%)
 rename {i2c => functionality/i2c}/hall-encoder.make (100%)
 rename {i2c => functionality/i2c}/load.py (100%)
 rename {i2c => functionality/i2c}/loadcell-reading-v-force.png (100%)
 rename {i2c => functionality/i2c}/serial.h (100%)
 rename {i2c => functionality/i2c}/testing.jpg (100%)
 rename {qdec => functionality/qdec}/hello.16a4u.qdec.c (100%)
 rename {qdec => functionality/qdec}/hello.16a4u.qdec.make (100%)
 rename {qdec => functionality/qdec}/qdec.mp4 (100%)
 rename {qdec => functionality/qdec}/serial.h (100%)
 rename {qdec => functionality/qdec}/xmega-16a4u-qdec-board.jpg (100%)
 rename {qdec => functionality/qdec}/xmega-16a4u-qdec-interior.png (100%)
 rename {qdec => functionality/qdec}/xmega-16a4u-qdec-layout.png (100%)
 rename {qdec => functionality/qdec}/xmega-16a4u-qdec-traces.png (100%)
 rename {usart => functionality/usart}/README.md (100%)
 rename {usart => functionality/usart}/serial.h (100%)
 rename {usart => functionality/usart}/usart.32a4u.c (100%)
 rename {usart => functionality/usart}/usart.32a4u.interior.png (100%)
 rename {usart => functionality/usart}/usart.32a4u.ko (100%)
 rename {usart => functionality/usart}/usart.32a4u.layout.png (100%)
 rename {usart => functionality/usart}/usart.32a4u.make (100%)
 rename {usart => functionality/usart}/usart.32a4u.traces.png (100%)
 rename {usart => functionality/usart}/xmega_usart_app_note.pdf (100%)
 rename {xcl => functionality/xcl}/.png (100%)
 rename {xcl => functionality/xcl}/TEK00025.PNG (100%)
 rename {xcl => functionality/xcl}/TEK00026.PNG (100%)
 rename {xcl => functionality/xcl}/xcl.8E5.c.hex (100%)
 rename {xcl => functionality/xcl}/xcl.8e5.c (100%)
 rename {xcl => functionality/xcl}/xcl.8e5.interior.png (100%)
 rename {xcl => functionality/xcl}/xcl.8e5.ko (100%)
 rename {xcl => functionality/xcl}/xcl.8e5.layout.png (100%)
 rename {xcl => functionality/xcl}/xcl.8e5.make (100%)
 rename {xcl => functionality/xcl}/xcl.8e5.scope.png (100%)
 rename {xcl => functionality/xcl}/xcl.8e5.traces.png (100%)

diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..e61546eb0fc7649248970a4d669b13e3ad4b0cc0
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8zOq>i@0Z1N%F(jFwA|Odduo*cFnGC56#X0GQ!BDwT
zYH)`DDDF5I(ijpMav3rikm4^nKeqtM=@@Eq^Icq0N=uR%7_M%(yBDkyi<%UIY6>z8
zgVF5bWk_QvWyoVlW+-9EWXNa8V@L$Mtc0Nwl(L9djpD|aU^n71J2xN6wFFgTaW~k4
zQDQU%MnhmU1cpEeFhbnO!408D$<YuP4S~@RfQJC6d{6-O6&M&89H4Xqga%15FfuTJ
zy8w&~3@k8BkbVFINDibGM1!<~XpmM0Mi2{Z23RWtBUCFRxElh}2kMf5Xs~t$MzGBw
zK3F>gBiLpJ21bZ>21cmOjG%@r$Xtka21bZ>21c;$FxQRJqaiRF0<aKZhA;#`^}j0v
z1Frr*MAaxc8UmvsFf2oWk;Nt0#R*h-;_x1*t_9Vn2~c@Z9So|D8A0_jLJV9LGeHIv
iC7{Bf>K>#OM1!khMg|6u*3pIlEPzJo(GVDb5C8zi9afD1

literal 0
HcmV?d00001

diff --git a/documentation/.gitkeep b/documentation/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/families/.DS_Store b/families/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..1a549434637bf7f63f10684fe7bba2d3a1acf05b
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8z4DAe90Z1N%F(jFwA}k>DKxQQ8=N3T4h^0V!nHW+T
zOmor=gVFSZ#dGsrTvAF)k{KATZn*mwY%Ekf1*>>L28KCcO{2tU2#kinXb6mkz-S1J
zh5$GO7{Me12RDQsB}YSGGz3ON03HIM@<9R8wr6mF(hU$AB*nnUzyR(7FfuTJn(<(L
zjG%r1L=8wQNDW9Uhz4n8U<9$i@?fnDj8LtN;BE*510%Rg0;0j%85qGfgZN<W42)o#
z85kHL+8G$3HZwwdD2$*U4aj_mb_PbU?O>;k5~Cq78Ujcmzzksvfa-r&1_oUHe~7A4
zax?@+Ltt2j03(Y_u!|F@(!}9CP+beEPZN;j89{Y2L=Q+BRIP)nVkXFdq6ADSBLf3S
cD@Yz(6*Dq0fNS#6h5#&tM(NQIpnnJe0Mnl$3jhEB

literal 0
HcmV?d00001

diff --git a/documentation/8e5_datasheet.pdf b/families/e5/8e5_datasheet.pdf
similarity index 100%
rename from documentation/8e5_datasheet.pdf
rename to families/e5/8e5_datasheet.pdf
diff --git a/families/e5/8e5_hello_world.c b/families/e5/8e5_hello_world.c
new file mode 100644
index 0000000..781e93d
--- /dev/null
+++ b/families/e5/8e5_hello_world.c
@@ -0,0 +1,79 @@
+//
+// xmega twi for as5510 linear magnetic encoder
+// sec, 2016
+
+#include "serial.h"
+#include <avr/io.h>
+#include <util/delay.h>
+#include <avr/pgmspace.h>
+#include <avr/interrupt.h>
+
+#define SLAVE_ADDRESS    0x56
+#define CPU_SPEED       32000000
+
+USART_data_t USART_data;
+
+uint32_t value; //magnetic encoder reading
+unsigned char Data_LSB, Data_MSB; //high byte and low byte of reading
+
+int main(void) {
+   // set up clock
+   OSC.CTRL = OSC_RC32MEN_bm; // enable 32MHz clock
+   while (!(OSC.STATUS & OSC_RC32MRDY_bm)); // wait for clock to be ready
+   CCP = CCP_IOREG_gc; // enable protected register change
+   CLK.CTRL = CLK_SCLKSEL_RC32M_gc; // switch to 32MHz clock
+
+   //set up usart
+   PORTD.DIRSET = PIN3_bm; //TXD0 where DIRSET sets a pin as an output
+   PORTD.DIRCLR = PIN2_bm; //RXD0 where DIRCLR sets a pin as in input
+   USART_InterruptDriver_Initialize(&USART_data, &USARTD0, USART_DREINTLVL_LO_gc);
+   USART_Format_Set(USART_data.usart, USART_CHSIZE_8BIT_gc,
+                     USART_PMODE_DISABLED_gc, 0);
+   USART_RxdInterruptLevel_Set(USART_data.usart, USART_RXCINTLVL_LO_gc);
+   USART_Baudrate_Set(&USARTD0, 123 , -4); //230400 baud with .08% error
+   USART_Rx_Enable(USART_data.usart);
+   USART_Tx_Enable(USART_data.usart);
+   //enable interrupts
+   PMIC.CTRL |= PMIC_LOLVLEX_bm;
+
+   //set up LED as output 
+   PORTC.DIRSET = PIN0_bm;
+   //setting an internal pull up resistor on pin6 for button
+   PORTC.PIN4CTRL = PORT_OPC_PULLUP_gc;
+
+   sei(); //set global interrupt enable
+
+
+   while(1){
+      PORTC.OUTSET = PIN0_bm;
+      _delay_ms(100);
+      PORTC.OUTCLR = PIN0_bm;
+      _delay_ms(100);
+
+      if(PORTC.IN & PIN4_bm){
+         usart_send_byte(&USART_data,121);
+         usart_send_byte(&USART_data,101);
+         usart_send_byte(&USART_data,115);
+         usart_send_byte(&USART_data,10);
+         usart_send_byte(&USART_data,10); // translate byte using an ASCII table
+      }
+      else{
+         usart_send_byte(&USART_data,110);
+         usart_send_byte(&USART_data,111);
+         usart_send_byte(&USART_data,10);
+         usart_send_byte(&USART_data,10); // translate byte using an ASCII table
+      }
+   }
+}
+
+ISR(USARTD0_RXC_vect){USART_RXComplete(&USART_data);}
+ISR(USARTD0_DRE_vect){USART_DataRegEmpty(&USART_data);}
+
+
+
+
+
+
+
+
+
diff --git a/families/e5/8e5_hello_world_layout.png b/families/e5/8e5_hello_world_layout.png
new file mode 100644
index 0000000000000000000000000000000000000000..64f66f0c4fd79da1e90d254039022653a58d6698
GIT binary patch
literal 7731
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

literal 0
HcmV?d00001

diff --git a/families/e5/8e5_hello_world_outline.png b/families/e5/8e5_hello_world_outline.png
new file mode 100644
index 0000000000000000000000000000000000000000..a271a939a2ca963340bc57e7c887404122646ac1
GIT binary patch
literal 7493
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

literal 0
HcmV?d00001

diff --git a/families/e5/8e5_hello_world_traces.png b/families/e5/8e5_hello_world_traces.png
new file mode 100644
index 0000000000000000000000000000000000000000..2bbc4279a525cfcd97c9e46b53292678c30d3bdc
GIT binary patch
literal 19827
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

literal 0
HcmV?d00001

diff --git a/documentation/8e5_pinout.jpg b/families/e5/8e5_pinout.jpg
similarity index 100%
rename from documentation/8e5_pinout.jpg
rename to families/e5/8e5_pinout.jpg
diff --git a/families/e5/8e5_usart_hello_world.make b/families/e5/8e5_usart_hello_world.make
new file mode 100644
index 0000000..feb5516
--- /dev/null
+++ b/families/e5/8e5_usart_hello_world.make
@@ -0,0 +1,19 @@
+PROJECT=8e5_usart
+SOURCES=$(PROJECT).c
+MMCU=atxmega8e5
+F_CPU = 32000000
+TARGET = x8e5
+PROGRAMMER= atmelice_pdi
+
+CFLAGS=-mmcu=$(MMCU) -Wall -Os -DF_CPU=$(F_CPU)
+
+$(PROJECT).hex: $(PROJECT).out
+	avr-objcopy -O ihex $(PROJECT).out $(PROJECT).c.hex;\
+	avr-size --mcu=$(MMCU) --format=avr $(PROJECT).out
+ 
+$(PROJECT).out: $(SOURCES)
+	avr-gcc $(CFLAGS) -I./ -o $(PROJECT).out $(SOURCES)
+ 
+program: $(PROJECT).hex
+	avrdude -p $(TARGET) -c $(PROGRAMMER) -U flash:w:$(PROJECT).c.hex
+
diff --git a/README.md b/families/e5/README.md
similarity index 86%
rename from README.md
rename to families/e5/README.md
index e80b64d..a2b865f 100644
--- a/README.md
+++ b/families/e5/README.md
@@ -6,7 +6,7 @@
 
 [Manual](http://www.atmel.com/images/Atmel-42005-8-and-16-bit-AVR-Microcontrollers-XMEGA-E_Manual.pdf)
 
-[Data sheet](documentation/8e5_datasheet.pdf)
+[Data sheet](8e5_datasheet.pdf)
 
 Not sure whether this image should be here or in a separate folder.
 
diff --git a/families/e5/serial.h b/families/e5/serial.h
new file mode 100644
index 0000000..9e81daa
--- /dev/null
+++ b/families/e5/serial.h
@@ -0,0 +1,226 @@
+#include <avr/io.h>
+#include <util/delay.h>
+#include <avr/pgmspace.h>
+
+#define output(directions,pin) (directions |= pin) // set port direction for output
+#define set(port,pin) (port |= pin) // set port pin
+#define clear(port,pin) (port &= (~pin)) // clear port pin
+#define pin_test(pins,pin) (pins & pin) // test for port pin
+#define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
+
+/* USART buffer defines. */
+/* \brief  Receive buffer size: 2,4,8,16,32,64,128 or 256 bytes. */
+#define USART_RX_BUFFER_SIZE 128
+/* \brief Transmit buffer size: 2,4,8,16,32,64,128 or 256 bytes */
+#define USART_TX_BUFFER_SIZE 128
+/* \brief Receive buffer mask. */
+#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )
+/* \brief Transmit buffer mask. */
+#define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )
+
+#if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )
+#error RX buffer size is not a power of 2
+#endif
+#if ( USART_TX_BUFFER_SIZE & USART_TX_BUFFER_MASK )
+#error TX buffer size is not a power of 2
+#endif
+
+/* \brief USART transmit and receive ring buffer. */
+typedef struct USART_Buffer
+{
+   /* \brief Receive buffer. */
+   volatile uint8_t RX[USART_RX_BUFFER_SIZE];
+   /* \brief Transmit buffer. */
+   volatile uint8_t TX[USART_TX_BUFFER_SIZE];
+   /* \brief Receive buffer head. */
+   volatile uint8_t RX_Head;
+   /* \brief Receive buffer tail. */
+   volatile uint8_t RX_Tail;
+   /* \brief Transmit buffer head. */
+   volatile uint8_t TX_Head;
+   /* \brief Transmit buffer tail. */
+   volatile uint8_t TX_Tail;
+} USART_Buffer_t;
+
+
+/*! \brief Struct used when interrupt driven driver is used.
+*
+*  Struct containing pointer to a usart, a buffer and a location to store Data
+*  register interrupt level temporary.
+*/
+typedef struct Usart_and_buffer
+{
+   /* \brief Pointer to USART module to use. */
+   USART_t * usart;
+   /* \brief Data register empty interrupt level. */
+   USART_DREINTLVL_t dreIntLevel;
+   /* \brief Data buffer. */
+   USART_Buffer_t buffer;
+} USART_data_t;
+
+#define USART_RxdInterruptLevel_Set(_usart, _rxdIntLevel)                      \
+   ((_usart)->CTRLA = ((_usart)->CTRLA & ~USART_RXCINTLVL_gm) | _rxdIntLevel)
+#define USART_Format_Set(_usart, _charSize, _parityMode, _twoStopBits)         \
+   (_usart)->CTRLC = (uint8_t) _charSize | _parityMode |                      \
+                     (_twoStopBits ? USART_SBMODE_bm : 0)
+#define USART_Baudrate_Set(_usart, _bselValue, _bScaleFactor)                  \
+   (_usart)->BAUDCTRLA =(uint8_t)_bselValue;                                           \
+   (_usart)->BAUDCTRLB =(_bScaleFactor << USART_BSCALE0_bp)|(_bselValue >> 8)
+#define USART_Rx_Enable(_usart) ((_usart)->CTRLB |= USART_RXEN_bm)
+#define USART_Rx_Disable(_usart) ((_usart)->CTRLB &= ~USART_RXEN_bm)
+#define USART_Tx_Enable(_usart)  ((_usart)->CTRLB |= USART_TXEN_bm)
+#define USART_Tx_Disable(_usart) ((_usart)->CTRLB &= ~USART_TXEN_bm)
+
+
+
+_Bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data)
+{
+   /* Make copies to make sure that volatile access is specified. */
+   uint8_t tempHead = (usart_data->buffer.TX_Head + 1) & USART_TX_BUFFER_MASK;
+   uint8_t tempTail = usart_data->buffer.TX_Tail;
+
+   /* There are data left in the buffer unless Head and Tail are equal. */
+   return (tempHead != tempTail);
+}
+_Bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data)
+{
+   uint8_t tempCTRLA;
+   uint8_t tempTX_Head;
+   _Bool TXBuffer_FreeSpace;
+   USART_Buffer_t * TXbufPtr;
+
+   TXbufPtr = &usart_data->buffer;
+   TXBuffer_FreeSpace = USART_TXBuffer_FreeSpace(usart_data);
+
+
+   if(TXBuffer_FreeSpace)
+   {
+      tempTX_Head = TXbufPtr->TX_Head;
+      TXbufPtr->TX[tempTX_Head]= data;
+      /* Advance buffer head. */
+      TXbufPtr->TX_Head = (tempTX_Head + 1) & USART_TX_BUFFER_MASK;
+
+      /* Enable DRE interrupt. */
+      tempCTRLA = usart_data->usart->CTRLA;
+      tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | usart_data->dreIntLevel;
+      usart_data->usart->CTRLA = tempCTRLA;
+   }
+   return TXBuffer_FreeSpace;
+}
+_Bool USART_RXBufferData_Available(USART_data_t * usart_data)
+{
+   /* Make copies to make sure that volatile access is specified. */
+   uint8_t tempHead = usart_data->buffer.RX_Head;
+   uint8_t tempTail = usart_data->buffer.RX_Tail;
+
+   /* There are data left in the buffer unless Head and Tail are equal. */
+   return (tempHead != tempTail);
+}
+uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data)
+{
+   USART_Buffer_t * bufPtr;
+   uint8_t ans;
+   bufPtr = &usart_data->buffer;
+   ans = (bufPtr->RX[bufPtr->RX_Tail]);
+
+   /* Advance buffer tail. */
+   bufPtr->RX_Tail = (bufPtr->RX_Tail + 1) & USART_RX_BUFFER_MASK;
+   return ans;
+}
+_Bool USART_RXComplete(USART_data_t * usart_data)
+{
+   USART_Buffer_t * bufPtr;
+   _Bool ans;
+
+   bufPtr = &usart_data->buffer;
+   /* Advance buffer head. */
+   uint8_t tempRX_Head = (bufPtr->RX_Head + 1) & USART_RX_BUFFER_MASK;
+
+   /* Check for overflow. */
+   uint8_t tempRX_Tail = bufPtr->RX_Tail;
+   uint8_t data = usart_data->usart->DATA;
+
+   if (tempRX_Head == tempRX_Tail) {
+      ans = 0;
+   }else{
+      ans = 1;
+      usart_data->buffer.RX[usart_data->buffer.RX_Head] = data;
+      usart_data->buffer.RX_Head = tempRX_Head;
+   }
+   return ans;
+}
+void USART_DataRegEmpty(USART_data_t * usart_data)
+{
+   USART_Buffer_t * bufPtr;
+   bufPtr = &usart_data->buffer;
+
+   /* Check if all data is transmitted. */
+   uint8_t tempTX_Tail = usart_data->buffer.TX_Tail;
+   if (bufPtr->TX_Head == tempTX_Tail){
+       /* Disable DRE interrupts. */
+      uint8_t tempCTRLA = usart_data->usart->CTRLA;
+      tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc;
+      usart_data->usart->CTRLA = tempCTRLA;
+
+   }else{
+      /* Start transmitting. */
+      uint8_t data = bufPtr->TX[usart_data->buffer.TX_Tail];
+      usart_data->usart->DATA = data;
+
+      /* Advance buffer tail. */
+      bufPtr->TX_Tail = (bufPtr->TX_Tail + 1) & USART_TX_BUFFER_MASK;
+   }
+}
+void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
+                                      USART_t * usart,
+                                      USART_DREINTLVL_t dreIntLevel)
+{
+   usart_data->usart = usart;
+   usart_data->dreIntLevel = dreIntLevel;
+
+   usart_data->buffer.RX_Tail = 0;
+   usart_data->buffer.RX_Head = 0;
+   usart_data->buffer.TX_Tail = 0;
+   usart_data->buffer.TX_Head = 0;
+}
+void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
+                                                 USART_DREINTLVL_t dreIntLevel)
+{
+   usart_data->dreIntLevel = dreIntLevel;
+}
+
+void usart_send_byte(USART_data_t * usart_data, char msg){
+   while(!USART_TXBuffer_FreeSpace(usart_data)){}
+   USART_TXBuffer_PutByte(usart_data,msg);
+}
+void usart_send_uint32(USART_data_t * usart_data, uint32_t n){
+   unsigned char * nn = (unsigned char *)&n;
+   usart_send_byte(usart_data, nn[0] );
+   usart_send_byte(usart_data, nn[1] );
+   usart_send_byte(usart_data, nn[2] );
+   usart_send_byte(usart_data, nn[3] );
+}
+void usart_send_int32(USART_data_t * usart_data, int32_t n){
+   unsigned char * nn = ( unsigned char *)&n;
+   usart_send_byte(usart_data, nn[0] );
+   usart_send_byte(usart_data, nn[1] );
+   usart_send_byte(usart_data, nn[2] );
+   usart_send_byte(usart_data, nn[3] );   
+}
+uint32_t parse_uint32(char* b){return *(uint32_t *) b;}
+int32_t parse_int32(char* b){return *(int32_t *) b;}
+uint16_t parse_uint16(char* b){return *(uint16_t *) b;}
+
+
+/*
+void usart_write_buffer(char* buffer){
+   //write \n terminated buffer over usart
+   int j=0;
+   do{
+      usart_send_byte( buffer[j] );
+      j++;
+   } while( j < PACKET_SIZE);
+   //} while( buffer[j-1] != 10);
+}
+*/
+
diff --git a/adc/adc.8E5.board.jpg b/functionality/adc/adc.8E5.board.jpg
similarity index 100%
rename from adc/adc.8E5.board.jpg
rename to functionality/adc/adc.8E5.board.jpg
diff --git a/adc/adc.8E5.c b/functionality/adc/adc.8E5.c
similarity index 100%
rename from adc/adc.8E5.c
rename to functionality/adc/adc.8E5.c
diff --git a/adc/adc.8E5.interior.png b/functionality/adc/adc.8E5.interior.png
similarity index 100%
rename from adc/adc.8E5.interior.png
rename to functionality/adc/adc.8E5.interior.png
diff --git a/adc/adc.8E5.layout.png b/functionality/adc/adc.8E5.layout.png
similarity index 100%
rename from adc/adc.8E5.layout.png
rename to functionality/adc/adc.8E5.layout.png
diff --git a/adc/adc.8E5.make b/functionality/adc/adc.8E5.make
similarity index 100%
rename from adc/adc.8E5.make
rename to functionality/adc/adc.8E5.make
diff --git a/adc/adc.8E5.traces.png b/functionality/adc/adc.8E5.traces.png
similarity index 100%
rename from adc/adc.8E5.traces.png
rename to functionality/adc/adc.8E5.traces.png
diff --git a/adc/adc.h b/functionality/adc/adc.h
similarity index 100%
rename from adc/adc.h
rename to functionality/adc/adc.h
diff --git a/adc/load-cell-small.mp4 b/functionality/adc/load-cell-small.mp4
similarity index 100%
rename from adc/load-cell-small.mp4
rename to functionality/adc/load-cell-small.mp4
diff --git a/adc/serial.h b/functionality/adc/serial.h
similarity index 100%
rename from adc/serial.h
rename to functionality/adc/serial.h
diff --git a/dac/hello.8E5.dac.c b/functionality/dac/hello.8E5.dac.c
similarity index 100%
rename from dac/hello.8E5.dac.c
rename to functionality/dac/hello.8E5.dac.c
diff --git a/dac/hello.8E5.dac.make b/functionality/dac/hello.8E5.dac.make
similarity index 100%
rename from dac/hello.8E5.dac.make
rename to functionality/dac/hello.8E5.dac.make
diff --git a/dac/make_lookup.py b/functionality/dac/make_lookup.py
similarity index 100%
rename from dac/make_lookup.py
rename to functionality/dac/make_lookup.py
diff --git a/dac/sine.png b/functionality/dac/sine.png
similarity index 100%
rename from dac/sine.png
rename to functionality/dac/sine.png
diff --git a/dac/xmega-8e5-dac-board.jpg b/functionality/dac/xmega-8e5-dac-board.jpg
similarity index 100%
rename from dac/xmega-8e5-dac-board.jpg
rename to functionality/dac/xmega-8e5-dac-board.jpg
diff --git a/dac/xmega-8e5-dac-layout.png b/functionality/dac/xmega-8e5-dac-layout.png
similarity index 100%
rename from dac/xmega-8e5-dac-layout.png
rename to functionality/dac/xmega-8e5-dac-layout.png
diff --git a/dac/xmega-8e5-dac-outline.png b/functionality/dac/xmega-8e5-dac-outline.png
similarity index 100%
rename from dac/xmega-8e5-dac-outline.png
rename to functionality/dac/xmega-8e5-dac-outline.png
diff --git a/dac/xmega-8e5-dac-traces.png b/functionality/dac/xmega-8e5-dac-traces.png
similarity index 100%
rename from dac/xmega-8e5-dac-traces.png
rename to functionality/dac/xmega-8e5-dac-traces.png
diff --git a/i2c/hall-encoder-interior.png b/functionality/i2c/hall-encoder-interior.png
similarity index 100%
rename from i2c/hall-encoder-interior.png
rename to functionality/i2c/hall-encoder-interior.png
diff --git a/i2c/hall-encoder-layout.png b/functionality/i2c/hall-encoder-layout.png
similarity index 100%
rename from i2c/hall-encoder-layout.png
rename to functionality/i2c/hall-encoder-layout.png
diff --git a/i2c/hall-encoder-traces.png b/functionality/i2c/hall-encoder-traces.png
similarity index 100%
rename from i2c/hall-encoder-traces.png
rename to functionality/i2c/hall-encoder-traces.png
diff --git a/i2c/hall-encoder-wj.png b/functionality/i2c/hall-encoder-wj.png
similarity index 100%
rename from i2c/hall-encoder-wj.png
rename to functionality/i2c/hall-encoder-wj.png
diff --git a/i2c/hall-encoder.c b/functionality/i2c/hall-encoder.c
similarity index 100%
rename from i2c/hall-encoder.c
rename to functionality/i2c/hall-encoder.c
diff --git a/i2c/hall-encoder.ko b/functionality/i2c/hall-encoder.ko
similarity index 100%
rename from i2c/hall-encoder.ko
rename to functionality/i2c/hall-encoder.ko
diff --git a/i2c/hall-encoder.make b/functionality/i2c/hall-encoder.make
similarity index 100%
rename from i2c/hall-encoder.make
rename to functionality/i2c/hall-encoder.make
diff --git a/i2c/load.py b/functionality/i2c/load.py
similarity index 100%
rename from i2c/load.py
rename to functionality/i2c/load.py
diff --git a/i2c/loadcell-reading-v-force.png b/functionality/i2c/loadcell-reading-v-force.png
similarity index 100%
rename from i2c/loadcell-reading-v-force.png
rename to functionality/i2c/loadcell-reading-v-force.png
diff --git a/i2c/serial.h b/functionality/i2c/serial.h
similarity index 100%
rename from i2c/serial.h
rename to functionality/i2c/serial.h
diff --git a/i2c/testing.jpg b/functionality/i2c/testing.jpg
similarity index 100%
rename from i2c/testing.jpg
rename to functionality/i2c/testing.jpg
diff --git a/qdec/hello.16a4u.qdec.c b/functionality/qdec/hello.16a4u.qdec.c
similarity index 100%
rename from qdec/hello.16a4u.qdec.c
rename to functionality/qdec/hello.16a4u.qdec.c
diff --git a/qdec/hello.16a4u.qdec.make b/functionality/qdec/hello.16a4u.qdec.make
similarity index 100%
rename from qdec/hello.16a4u.qdec.make
rename to functionality/qdec/hello.16a4u.qdec.make
diff --git a/qdec/qdec.mp4 b/functionality/qdec/qdec.mp4
similarity index 100%
rename from qdec/qdec.mp4
rename to functionality/qdec/qdec.mp4
diff --git a/qdec/serial.h b/functionality/qdec/serial.h
similarity index 100%
rename from qdec/serial.h
rename to functionality/qdec/serial.h
diff --git a/qdec/xmega-16a4u-qdec-board.jpg b/functionality/qdec/xmega-16a4u-qdec-board.jpg
similarity index 100%
rename from qdec/xmega-16a4u-qdec-board.jpg
rename to functionality/qdec/xmega-16a4u-qdec-board.jpg
diff --git a/qdec/xmega-16a4u-qdec-interior.png b/functionality/qdec/xmega-16a4u-qdec-interior.png
similarity index 100%
rename from qdec/xmega-16a4u-qdec-interior.png
rename to functionality/qdec/xmega-16a4u-qdec-interior.png
diff --git a/qdec/xmega-16a4u-qdec-layout.png b/functionality/qdec/xmega-16a4u-qdec-layout.png
similarity index 100%
rename from qdec/xmega-16a4u-qdec-layout.png
rename to functionality/qdec/xmega-16a4u-qdec-layout.png
diff --git a/qdec/xmega-16a4u-qdec-traces.png b/functionality/qdec/xmega-16a4u-qdec-traces.png
similarity index 100%
rename from qdec/xmega-16a4u-qdec-traces.png
rename to functionality/qdec/xmega-16a4u-qdec-traces.png
diff --git a/usart/README.md b/functionality/usart/README.md
similarity index 100%
rename from usart/README.md
rename to functionality/usart/README.md
diff --git a/usart/serial.h b/functionality/usart/serial.h
similarity index 100%
rename from usart/serial.h
rename to functionality/usart/serial.h
diff --git a/usart/usart.32a4u.c b/functionality/usart/usart.32a4u.c
similarity index 100%
rename from usart/usart.32a4u.c
rename to functionality/usart/usart.32a4u.c
diff --git a/usart/usart.32a4u.interior.png b/functionality/usart/usart.32a4u.interior.png
similarity index 100%
rename from usart/usart.32a4u.interior.png
rename to functionality/usart/usart.32a4u.interior.png
diff --git a/usart/usart.32a4u.ko b/functionality/usart/usart.32a4u.ko
similarity index 100%
rename from usart/usart.32a4u.ko
rename to functionality/usart/usart.32a4u.ko
diff --git a/usart/usart.32a4u.layout.png b/functionality/usart/usart.32a4u.layout.png
similarity index 100%
rename from usart/usart.32a4u.layout.png
rename to functionality/usart/usart.32a4u.layout.png
diff --git a/usart/usart.32a4u.make b/functionality/usart/usart.32a4u.make
similarity index 100%
rename from usart/usart.32a4u.make
rename to functionality/usart/usart.32a4u.make
diff --git a/usart/usart.32a4u.traces.png b/functionality/usart/usart.32a4u.traces.png
similarity index 100%
rename from usart/usart.32a4u.traces.png
rename to functionality/usart/usart.32a4u.traces.png
diff --git a/usart/xmega_usart_app_note.pdf b/functionality/usart/xmega_usart_app_note.pdf
similarity index 100%
rename from usart/xmega_usart_app_note.pdf
rename to functionality/usart/xmega_usart_app_note.pdf
diff --git a/xcl/.png b/functionality/xcl/.png
similarity index 100%
rename from xcl/.png
rename to functionality/xcl/.png
diff --git a/xcl/TEK00025.PNG b/functionality/xcl/TEK00025.PNG
similarity index 100%
rename from xcl/TEK00025.PNG
rename to functionality/xcl/TEK00025.PNG
diff --git a/xcl/TEK00026.PNG b/functionality/xcl/TEK00026.PNG
similarity index 100%
rename from xcl/TEK00026.PNG
rename to functionality/xcl/TEK00026.PNG
diff --git a/xcl/xcl.8E5.c.hex b/functionality/xcl/xcl.8E5.c.hex
similarity index 100%
rename from xcl/xcl.8E5.c.hex
rename to functionality/xcl/xcl.8E5.c.hex
diff --git a/xcl/xcl.8e5.c b/functionality/xcl/xcl.8e5.c
similarity index 100%
rename from xcl/xcl.8e5.c
rename to functionality/xcl/xcl.8e5.c
diff --git a/xcl/xcl.8e5.interior.png b/functionality/xcl/xcl.8e5.interior.png
similarity index 100%
rename from xcl/xcl.8e5.interior.png
rename to functionality/xcl/xcl.8e5.interior.png
diff --git a/xcl/xcl.8e5.ko b/functionality/xcl/xcl.8e5.ko
similarity index 100%
rename from xcl/xcl.8e5.ko
rename to functionality/xcl/xcl.8e5.ko
diff --git a/xcl/xcl.8e5.layout.png b/functionality/xcl/xcl.8e5.layout.png
similarity index 100%
rename from xcl/xcl.8e5.layout.png
rename to functionality/xcl/xcl.8e5.layout.png
diff --git a/xcl/xcl.8e5.make b/functionality/xcl/xcl.8e5.make
similarity index 100%
rename from xcl/xcl.8e5.make
rename to functionality/xcl/xcl.8e5.make
diff --git a/xcl/xcl.8e5.scope.png b/functionality/xcl/xcl.8e5.scope.png
similarity index 100%
rename from xcl/xcl.8e5.scope.png
rename to functionality/xcl/xcl.8e5.scope.png
diff --git a/xcl/xcl.8e5.traces.png b/functionality/xcl/xcl.8e5.traces.png
similarity index 100%
rename from xcl/xcl.8e5.traces.png
rename to functionality/xcl/xcl.8e5.traces.png
diff --git a/index.html b/index.html
index d05ed0b..4483c2a 100644
--- a/index.html
+++ b/index.html
@@ -1,5 +1,7 @@
 <html>
-<head></head>
+<head>
+	<link rel="stylesheet" href="https://copplestone.pages.cba.mit.edu/styling/stylesheet.css">
+</head>
 <body>
 
 <h1>XMega Learning</h1>
@@ -30,77 +32,77 @@
 
 <h3>DAC</h3>
 <ul>
-	<li><a href='dac/sine.png'>Sine Wave</a></li>
-	<li><a href='dac/hello.8E5.dac.c'>hello.8E5.dac.c</a></li>
-	<li><a href='dac/hello.8E5.dac.make'>hello.8E5.dac.make</a></li>
-	<li><a href='dac/make_lookup.py'>make_lookup.py</a></li>
-	<li><a href='dac/xmega-8e5-dac-layout.png'>Layout</a></li>
-	<li><a href='dac/xmega-8e5-dac-traces.png'>Traces</a></li>
-	<li><a href='dac/xmega-8e5-dac-outline.png'>Outline</a></li>
-	<li><a href='dac/xmega-8e5-dac-board.jpg'>Board</a></li>
+	<li><a href='functionality/dac/sine.png'>Sine Wave</a></li>
+	<li><a href='functionality/dac/hello.8E5.dac.c'>hello.8E5.dac.c</a></li>
+	<li><a href='functionality/dac/hello.8E5.dac.make'>hello.8E5.dac.make</a></li>
+	<li><a href='functionality/dac/make_lookup.py'>make_lookup.py</a></li>
+	<li><a href='functionality/dac/xmega-8e5-dac-layout.png'>Layout</a></li>
+	<li><a href='functionality/dac/xmega-8e5-dac-traces.png'>Traces</a></li>
+	<li><a href='functionality/dac/xmega-8e5-dac-outline.png'>Outline</a></li>
+	<li><a href='functionality/dac/xmega-8e5-dac-board.jpg'>Board</a></li>
 </ul>
 
 
 <h3>Quadrature Decoding with Timer/Counters</h3>
 <ul>
-	<li><a href='qdec/qdec.mp4'>Operation</a></li>
-	<li><a href='qdec/hello.16a4u.qdec.c'>hello.16a4u.qdec.c</a></li>
-	<li><a href='qdec/hello.16a4u.qdec.make'>hello.16a4u.qdec.make</a></li>
-	<li><a href='qdec/serial.h'>serial.h</a></li>
-	<li><a href='qdec/xmega-16a4u-qdec-layout.png'>Layout</a></li>
-	<li><a href='qdec/xmega-16a4u-qdec-traces.png'>Traces</a></li>
-	<li><a href='qdec/xmega-16a4u-qdec-interior.png'>Outline</a></li>
-	<li><a href='qdec/xmega-16a4u-qdec-board.jpg'>Board</a></li>
+	<li><a href='functionality/qdec/qdec.mp4'>Operation</a></li>
+	<li><a href='functionality/qdec/hello.16a4u.qdec.c'>hello.16a4u.qdec.c</a></li>
+	<li><a href='functionality/qdec/hello.16a4u.qdec.make'>hello.16a4u.qdec.make</a></li>
+	<li><a href='functionality/qdec/serial.h'>serial.h</a></li>
+	<li><a href='functionality/qdec/xmega-16a4u-qdec-layout.png'>Layout</a></li>
+	<li><a href='functionality/qdec/xmega-16a4u-qdec-traces.png'>Traces</a></li>
+	<li><a href='functionality/qdec/xmega-16a4u-qdec-interior.png'>Outline</a></li>
+	<li><a href='functionality/qdec/xmega-16a4u-qdec-board.jpg'>Board</a></li>
 </ul>
 
 <h3>ADC</h3>
 <ul>
-	<li><a href='adc/adc.8E5.c'>adc.8E5.c</a></li>
-	<li><a href='adc/adc.8E5.make'>adc.8E5.make</a></li>
-	<li><a href='adc/serial.h'>serial.h</a></li>
-	<li><a href='adc/adc.h'>adc.h</a></li>
-	<li><a href='adc/adc.8E5.layout.png'>Layout</a></li>
-	<li><a href='adc/adc.8E5.traces.png'>Traces</a></li>
-	<li><a href='adc/adc.8E5.interior.png'>Outline</a></li>
-	<li><a href='adc/adc.8E5.board.jpg'>Board</a></li>
+	<li><a href='functionality/adc/adc.8E5.c'>adc.8E5.c</a></li>
+	<li><a href='functionality/adc/adc.8E5.make'>adc.8E5.make</a></li>
+	<li><a href='functionality/adc/serial.h'>serial.h</a></li>
+	<li><a href='functionality/adc/adc.h'>adc.h</a></li>
+	<li><a href='functionality/adc/adc.8E5.layout.png'>Layout</a></li>
+	<li><a href='functionality/adc/adc.8E5.traces.png'>Traces</a></li>
+	<li><a href='functionality/adc/adc.8E5.interior.png'>Outline</a></li>
+	<li><a href='functionality/adc/adc.8E5.board.jpg'>Board</a></li>
 	<li><a href='http://www.tag-connect.com/'>Tag Connect Programming connector</a></li>
-	<li><a href='adc/load-cell-small.mp4'>Force measurement using onboard 64x gain.</a></li>
+	<li><a href='functionality/adc/load-cell-small.mp4'>Force measurement using onboard 64x gain.</a></li>
 	<li><a href='http://www.phidgets.com/products.php?category=34&product_id=3133_0'>$7 load cell</a></li>
 </ul>
 
 <h3>USART</h3>
 <ul>
-	<li><a href='usart/usart.32a4u.c'>usart.32a4u.c</a></li>
-	<li><a href='usart/usart.32a4u.make'>usart.32a4u.make</a></li>
-	<li><a href='usart/serial.h'>serial.h</a></li>
-	<li><a href='usart/usart.32a4u.layout.png'>Layout</a></li>
-	<li><a href='usart/usart.32a4u.traces.png'>Traces</a></li>
-	<li><a href='usart/usart.32a4u.interior.png'>Outline</a></li>
+	<li><a href='functionality/usart/usart.32a4u.c'>usart.32a4u.c</a></li>
+	<li><a href='functionality/usart/usart.32a4u.make'>usart.32a4u.make</a></li>
+	<li><a href='functionality/usart/serial.h'>serial.h</a></li>
+	<li><a href='functionality/usart/usart.32a4u.layout.png'>Layout</a></li>
+	<li><a href='functionality/usart/usart.32a4u.traces.png'>Traces</a></li>
+	<li><a href='functionality/usart/usart.32a4u.interior.png'>Outline</a></li>
 	<li><a href='http://www.tag-connect.com/'>Tag Connect Programming connector</a></li>
 </ul>
 
 <h3>XCL</h3>
 <ul>
-	<li><a href='xcl/xcl.8e5.c'>xcl.8e5.c</a></li>
-	<li><a href='xcl/xcl.8e5.make'>xcl.8e5.make</a></li>
-	<li><a href='xcl/xcl.8e5.layout.png'>Layout</a></li>
-	<li><a href='xcl/xcl.8e5.traces.png'>Traces</a></li>
-	<li><a href='xcl/xcl.8e5.interior.png'>Outline</a></li>
-	<li><a href='xcl/xcl.8e5.scope.png'>ANDing square waves (without power supplied to VCC!)</a></li>
+	<li><a href='functionality/xcl/xcl.8e5.c'>xcl.8e5.c</a></li>
+	<li><a href='functionality/xcl/xcl.8e5.make'>xcl.8e5.make</a></li>
+	<li><a href='functionality/xcl/xcl.8e5.layout.png'>Layout</a></li>
+	<li><a href='functionality/xcl/xcl.8e5.traces.png'>Traces</a></li>
+	<li><a href='functionality/xcl/xcl.8e5.interior.png'>Outline</a></li>
+	<li><a href='functionality/xcl/xcl.8e5.scope.png'>ANDing square waves (without power supplied to VCC!)</a></li>
 
 </ul>
 
 <h3>I2C</h3>
 <ul>
-	<li><a href='i2c/hall-encoder.c'>hall-encoder.c</a></li>
-	<li><a href='i2c/serial.h'>serial.h</a></li>
-	<li><a href='i2c/hall-encoder.make'>hall-encoder.make</a></li>
-	<li><a href='i2c/hall-encoder-layout.png'>hall-encoder-layout.png</a></li>
-	<li><a href='i2c/hall-encoder-traces.png'>hall-encoder-traces.png</a></li>
-	<li><a href='i2c/hall-encoder-interior.png'>hall-encoder-interior.png</a></li>
-	<li><a href='i2c/load.py'>load.py</a></li>
-	<li><a href='i2c/testing.jpg'>Testing</a></li>
-	<li><a href='i2c/loadcell-reading-v-force.png'>Results</a></li>
+	<li><a href='functionality/i2c/hall-encoder.c'>hall-encoder.c</a></li>
+	<li><a href='functionality/i2c/serial.h'>serial.h</a></li>
+	<li><a href='functionality/i2c/hall-encoder.make'>hall-encoder.make</a></li>
+	<li><a href='functionality/i2c/hall-encoder-layout.png'>hall-encoder-layout.png</a></li>
+	<li><a href='functionality/i2c/hall-encoder-traces.png'>hall-encoder-traces.png</a></li>
+	<li><a href='functionality/i2c/hall-encoder-interior.png'>hall-encoder-interior.png</a></li>
+	<li><a href='functionality/i2c/load.py'>load.py</a></li>
+	<li><a href='functionality/i2c/testing.jpg'>Testing</a></li>
+	<li><a href='functionality/i2c/loadcell-reading-v-force.png'>Results</a></li>
 </ul>
 
 
-- 
GitLab