Merge branch 'master' of ghostdub.de:gg-button

master
Paul Goeser 14 years ago
commit 4b5b40a0b1

@ -52,7 +52,7 @@ ISR(TIMER1_OVF1_vect)
/* TODO: a-law decoding */ /* TODO: a-law decoding */
/* TODO: 11bit PWM emulation */ /* TODO: 11bit PWM emulation */
OCR1A = buffer[pos];/* play next sample */ OCR1A = buffer[pos];/* play sample */
} }

@ -3,12 +3,14 @@
#include <complex> #include <complex>
#include <cstring> #include <cstring>
#include <cstdlib> #include <cstdlib>
#include <stdint.h>
//signed short decode(unsigned char t);
int16_t decode(uint8_t t);
signed short decode(unsigned char t);
main() main()
{ {
std::vector<unsigned char> data; std::vector<unsigned char> data;
FILE* f = fopen("outputfileulaw.raw", "rb"); FILE* f = fopen("outputfileulaw.wav", "rb");
rewind(f); rewind(f);
while(!feof(f)) while(!feof(f))
{ {
@ -16,7 +18,7 @@ main()
fread(&s, sizeof s, 1, f); fread(&s, sizeof s, 1, f);
data.push_back(s); data.push_back(s);
} }
FILE* o = fopen("outputfileulaw.dec", "wb"); FILE* o = fopen("outputfileulaw.raw", "wb");
int headersize = 4; int headersize = 4;
int old_header_size = 58; int old_header_size = 58;
unsigned int samples = data.size() - old_header_size; unsigned int samples = data.size() - old_header_size;
@ -39,8 +41,16 @@ main()
fwrite(&new_data[0], sizeof(unsigned char), samples_old+headersize, o); fwrite(&new_data[0], sizeof(unsigned char), samples_old+headersize, o);
} }
int16_t decode(uint8_t t)
signed short decode(unsigned char t) {
int16_t exp = 0x8 - (0x7 & (t >> 4));
uint16_t base = (0x1 << (exp+ 5)) - 34;
int16_t step = 0x1 << exp;
int16_t ret = base - step * (0xf & t);
ret = -ret - 1 + (2 * ret + 1) * (t >> 7);
return ret;
}
/*signed short decode(unsigned char t)
{ {
int exp = 0x8 - (0x7 & (t >> 4)); int exp = 0x8 - (0x7 & (t >> 4));
int base = (0x1 << (exp+ 5)) - 34; int base = (0x1 << (exp+ 5)) - 34;
@ -48,4 +58,4 @@ signed short decode(unsigned char t)
signed short ret = base - step * (0xf & t); signed short ret = base - step * (0xf & t);
ret = -ret - 1 + (2 * ret + 1) * (t >> 7); ret = -ret - 1 + (2 * ret + 1) * (t >> 7);
return ret; return ret;
} }*/

28
mmc.c

@ -9,15 +9,15 @@ mail@ulrichradig.de
oder im Forum meiner Web Page : www.ulrichradig.de oder im Forum meiner Web Page : www.ulrichradig.de
Dieses Programm ist freie Software. Sie können es unter den Bedingungen der Dieses Programm ist freie Software. Sie können es unter den Bedingungen der
GNU General Public License, wie von der Free Software Foundation veröffentlicht, GNU General Public License, wie von der Free Software Foundation veröffentlicht,
weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder
(nach Ihrer Option) jeder späteren Version. (nach Ihrer Option) jeder späteren Version.
Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, Die Veröffentlichung dieses Programms erfolgt in der Hoffnung,
daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, dass es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE,
sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT
FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
Programm erhalten haben. Programm erhalten haben.
@ -115,7 +115,7 @@ unsigned char mmc_write_command (unsigned char *cmd)
mmc_write_byte(*cmd++); mmc_write_byte(*cmd++);
} }
//Wartet auf ein gültige Antwort von der MMC/SD-Karte //Wartet auf ein gültige Antwort von der MMC/SD-Karte
while (tmp == 0xff) while (tmp == 0xff)
{ {
tmp = mmc_read_byte(); tmp = mmc_read_byte();
@ -133,12 +133,12 @@ unsigned char mmc_read_byte (void)
//############################################################################ //############################################################################
{ {
unsigned char Byte = 0; unsigned char Byte = 0;
#if SPI_Mode //Routine für Hardware SPI #if SPI_Mode //Routine für Hardware SPI
SPDR = 0xff; SPDR = 0xff;
while(!(SPSR & (1<<SPIF))){}; while(!(SPSR & (1<<SPIF))){};
Byte = SPDR; Byte = SPDR;
#else //Routine für Software SPI #else //Routine für Software SPI
for (unsigned char a=8; a>0; a--) //das Byte wird Bitweise nacheinander Empangen MSB First for (unsigned char a=8; a>0; a--) //das Byte wird Bitweise nacheinander Empangen MSB First
{ {
MMC_Write &=~(1<<SPI_Clock); //erzeugt ein Clock Impuls (Low) MMC_Write &=~(1<<SPI_Clock); //erzeugt ein Clock Impuls (Low)
@ -163,12 +163,12 @@ unsigned char mmc_read_byte (void)
void mmc_write_byte (unsigned char Byte) void mmc_write_byte (unsigned char Byte)
//############################################################################ //############################################################################
{ {
#if SPI_Mode //Routine für Hardware SPI #if SPI_Mode //Routine für Hardware SPI
SPDR = Byte; //Sendet ein Byte SPDR = Byte; //Sendet ein Byte
while(!(SPSR & (1<<SPIF))) //Wartet bis Byte gesendet wurde while(!(SPSR & (1<<SPIF))) //Wartet bis Byte gesendet wurde
{ {
} }
#else //Routine für Software SPI #else //Routine für Software SPI
for (unsigned char a=8; a>0; a--) //das Byte wird Bitweise nacheinander Gesendet MSB First for (unsigned char a=8; a>0; a--) //das Byte wird Bitweise nacheinander Gesendet MSB First
{ {
if (bit_is_set(Byte,(a-1))>0) //Ist Bit a in Byte gesetzt if (bit_is_set(Byte,(a-1))>0) //Ist Bit a in Byte gesetzt
@ -198,7 +198,7 @@ unsigned char mmc_write_sector (unsigned long addr,unsigned char *Buffer)
/*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben, /*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
addr wird von Blocks zu Bytes umgerechnet danach werden addr wird von Blocks zu Bytes umgerechnet danach werden
diese in das Commando eingefügt*/ diese in das Commando eingefügt*/
addr = addr << 9; //addr = addr * 512 addr = addr << 9; //addr = addr * 512
@ -284,7 +284,7 @@ unsigned char mmc_read_sector (unsigned long addr,unsigned char *Buffer)
/*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben, /*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
addr wird von Blocks zu Bytes umgerechnet danach werden addr wird von Blocks zu Bytes umgerechnet danach werden
diese in das Commando eingefügt*/ diese in das Commando eingefügt*/
addr = addr << 9; //addr = addr * 512 addr = addr << 9; //addr = addr * 512

@ -21,7 +21,7 @@ Copyright (C) 2004 Ulrich Radig
#define SPI_DO 2 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist #define SPI_DO 2 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
#define SPI_Clock 1 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk) #define SPI_Clock 1 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
#define MMC_Chip_Select 4 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist #define MMC_Chip_Select 4 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
#define SPI_SS 0 //Nicht Benutz muß aber definiert werden #define SPI_SS 0 //Nicht Benutz muss aber definiert werden
#endif #endif
#if defined (__AVR_ATmega32__) #if defined (__AVR_ATmega32__)
@ -29,7 +29,7 @@ Copyright (C) 2004 Ulrich Radig
#define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist #define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
#define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk) #define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
#define MMC_Chip_Select 3 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist #define MMC_Chip_Select 3 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
#define SPI_SS 4 //Nicht Benutz muß aber definiert werden #define SPI_SS 4 //Nicht Benutz muss aber definiert werden
#endif #endif
#if defined (__AVR_ATmega644__) #if defined (__AVR_ATmega644__)
@ -37,7 +37,7 @@ Copyright (C) 2004 Ulrich Radig
#define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist #define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
#define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk) #define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
#define MMC_Chip_Select 1 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist #define MMC_Chip_Select 1 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
#define SPI_SS 4 //Nicht Benutz muß aber definiert werden #define SPI_SS 4 //Nicht Benutz muss aber definiert werden
#endif #endif
#if defined (__AVR_ATtiny26__) #if defined (__AVR_ATtiny26__)
@ -45,7 +45,7 @@ Copyright (C) 2004 Ulrich Radig
#define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist #define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
#define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk) #define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
#define MMC_Chip_Select 1 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist #define MMC_Chip_Select 1 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
#define SPI_SS 4 //Nicht benutzt, muß aber definiert werden #define SPI_SS 4 //Nicht benutzt, muss aber definiert werden
#endif #endif

@ -1,9 +1,9 @@
signed short decode(unsigned char t) int16_t decode(uint8_t t)
{ {
int exp = 0x8 - (0x7 & (t >> 4)); int16_t exp = 0x8 - (0x7 & (t >> 4));
int base = (0x1 << (exp+ 5)) - 34; uint16_t base = (0x1 << (exp+ 5)) - 34;
int step = 0x1 << exp; int16_t step = 0x1 << exp;
signed short ret = base - step * (0xf & t); int16_t ret = base - step * (0xf & t);
ret = -ret - 1 + (2 * ret + 1) * (t >> 7); ret = -ret - 1 + (2 * ret + 1) * (t >> 7);
return ret; return ret;
} }
Loading…
Cancel
Save