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