diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2014-04-08 11:28:54 +0200 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2014-04-22 16:51:13 +0200 |
commit | 68c180f2aba4471483e1786556c2bc2a94a7d2a7 (patch) | |
tree | 13fd0790193e9e9fe8a745b58cfe34bc108b9b22 | |
parent | e3897565c342bee4765f921240b7ca91cd9b23f1 (diff) | |
download | hourglass-68c180f2aba4471483e1786556c2bc2a94a7d2a7.tar.gz hourglass-68c180f2aba4471483e1786556c2bc2a94a7d2a7.tar.bz2 hourglass-68c180f2aba4471483e1786556c2bc2a94a7d2a7.zip |
Increase CPU and UART speed
Re-enable interrupt based accel.
-rw-r--r-- | accel.c | 2 | ||||
-rw-r--r-- | common.h | 4 | ||||
-rw-r--r-- | i2c.c | 15 | ||||
-rw-r--r-- | main.c | 12 | ||||
-rw-r--r-- | uart.c | 15 |
5 files changed, 40 insertions, 8 deletions
@@ -67,7 +67,7 @@ bool accelProcess () { reading = false; } } else { - if (/*drdy &&*/ twr.status != TWST_WAIT) { + if (drdy && twr.status != TWST_WAIT) { /* new data available in device buffer and bus is free, we are * reading the registers inbetween out_x/y/z and ignore them */ if (!twRequest (TWM_READ, LIS302DL, LIS302DL_UNUSED1, (uint8_t *) val, 6)) { @@ -1,8 +1,8 @@ #ifndef COMMON_H #define COMMON_H -/* cpu runs at 1mhz */ -#define F_CPU 1000000 +/* cpu runs at n mhz */ +#define F_CPU 8000000 #define sleepwhile(cond) \ sleep_enable (); \ @@ -3,6 +3,7 @@ #include <avr/interrupt.h> #include "i2c.h" +#include "common.h" volatile twReq twr; @@ -42,9 +43,21 @@ static bool twWriteRaw (const uint8_t data) { } void twInit () { - /* set scl to 3.6 kHz (at 1Mhz CPU speed)*/ +#if F_CPU == 1000000 + /* set scl to 3.6 kHz */ TWBR = 2; TWSR |= 0x3; /* set prescaler to 64 */ +#elif F_CPU == 4000000 + /* set scl to 50 kHz ? */ + TWBR = 32; + TWSR |= 0x0; /* set prescaler to 0 */ +#elif F_CPU == 8000000 + /* set scl to 100 kHz */ + TWBR = 32; + TWSR |= 0x0; /* set prescaler to 0 */ +#else +#error "cpu speed not supported" +#endif twr.mode = TWM_INVALID; twr.status = TWST_ERR; @@ -28,9 +28,17 @@ static void ledShow (const unsigned char val) { static void cpuInit () { /* enter change prescaler mode */ - CLKPR = CLKPCE << 1; - /* write new prescaler = 8 (i.e. 1Mhz clock frequency) */ + CLKPR = (1 << CLKPCE); + /* write new prescaler */ +#if F_CPU == 1000000 CLKPR = 0b00000011; +#elif F_CPU == 4000000 + CLKPR = 0b00000001; +#elif F_CPU == 8000000 + CLKPR = 0b00000000; +#else +#error "cpu speed not supported" +#endif } int main () { @@ -2,6 +2,7 @@ #include <avr/io.h> #include "uart.h" +#include "common.h" /* blocking uart send */ @@ -23,13 +24,23 @@ static int uartPutc (char c, FILE *stream) { static FILE mystdout = FDEV_SETUP_STREAM (uartPutc, NULL, _FDEV_SETUP_WRITE); void uartInit () { - /* Set baud rate (9600, double speed, at 1mhz) */ UBRR0H = 0; +#if F_CPU == 1000000 + /* Set baud rate (9600, double speed) */ UBRR0L = 12; +#elif F_CPU == 4000000 + /* Set baud rate (9600, double speed) */ + UBRR0L = 51; +#elif F_CPU == 8000000 + /* baudrate 38.4k */ + UBRR0L = 25; +#else +#error "cpu speed not supported" +#endif /* enable double speed mode */ UCSR0A = (1 << U2X0); /* Enable receiver and transmitter */ - UCSR0B = (1<<RXEN0)|(1<<TXEN0); + UCSR0B = (1 << RXEN0) | (1 << TXEN0); /* Set frame format: 8 data, 1 stop bit, even parity */ UCSR0C = (1<<UPM01) | (0 << UPM00) | (0<<USBS0)|(3<<UCSZ00); |