Guten Tag
ich habe folgendes Projekt:
Ich möchte ein Mikrofon mit einer I2S Schnittstelle an einen AT32UC3A
anbinden. Das Mikrofon ist Slave und kann nur senden.
Jetzt versuche ich schon seit längerem, die SSC bei dem AT32 zu
aktivieren.
Zum testen habe ich erst einmal die I2S als Master eingestellt und
sendet (1 Byte). Dieses habe ich mit einem Oszi auf dem Clock-Ausgang
erst einmal gemessen und funktioniert.
Hier meine Init-Funktion:
1 | //init ssc Sound
|
2 | void init_ssc(void){
|
3 |
|
4 | //map gpio pins
|
5 | static const gpio_map_t SSC_GPIO_MAPPING =
|
6 | {
|
7 | {AVR32_SSC_TX_CLOCK_0_PIN, AVR32_SSC_TX_CLOCK_0_FUNCTION }, // TX-Clock.
|
8 | {AVR32_SSC_TX_DATA_0_PIN, AVR32_SSC_TX_DATA_0_FUNCTION}, // TX-Data.
|
9 | {AVR32_SSC_TX_FRAME_SYNC_0_PIN, AVR32_SSC_TX_FRAME_SYNC_0_FUNCTION}, // TX-Frame-Sync.
|
10 | {AVR32_SSC_RX_CLOCK_0_PIN, AVR32_SSC_RX_CLOCK_0_FUNCTION }, // RX-Clock.
|
11 | {AVR32_SSC_RX_DATA_0_PIN, AVR32_SSC_RX_DATA_0_FUNCTION}, // RX-Data.
|
12 | {AVR32_SSC_RX_FRAME_SYNC_0_PIN, AVR32_SSC_RX_FRAME_SYNC_0_FUNCTION} // RX-Frame-Sync.
|
13 |
|
14 | };
|
15 |
|
16 | // Assign I/Os to SSC
|
17 | gpio_enable_module(SSC_GPIO_MAPPING, sizeof(SSC_GPIO_MAPPING) / sizeof(SSC_GPIO_MAPPING[0]));
|
18 |
|
19 | //enable the clock for the spi controller
|
20 | sysclk_enable_pba_module(SYSCLK_SSC);
|
21 |
|
22 |
|
23 |
|
24 | ssc_i2s_init(SSC_Adr, //Pointer SSC
|
25 | 11025, //sample_frequency The sample frequency given in Hz
|
26 | 8, //data_bit_res Number of significant data bits in an I2S channel frame
|
27 | 8, //frame_bit_res Total number of bits in an I2S channel frame
|
28 | SSC_I2S_MODE_STEREO_OUT, //mode I2S-mode
|
29 | 12000000); //pba_hz The clock speed of the PBA bus in Hz
|
30 |
|
31 |
|
32 | }
|
In der MAIN-Schleife habe ich folgendes eingearbeitet:
1 | //testen I2S SSC Schnittstelle
|
2 | ssc_i2s_transfer(SSC_Adr,0x01);
|
3 |
|
4 | ssc_status = ssc_i2s_get_status(SSC_Adr);
|
Der ssc_status liefert ein TXEN zurück, also Senden aktiviert.
So, senden als Master funktioniert und jetzt will ich eigentlich nur
lesen.
hier die umgeschriebene Quelle:
1 | ssc_i2s_init(SSC_Adr, //Pointer SSC
|
2 | 22000, //sample_frequency The sample frequency given in Hz
|
3 | 8, //data_bit_res Number of significant data bits in an I2S channel frame
|
4 | 8, //frame_bit_res Total number of bits in an I2S channel frame
|
5 | SSC_I2S_MODE_STEREO_IN, //mode I2S-mode
|
6 | 12000000); //pba_hz The clock speed of the PBA bus in Hz
|
Ich habe den Mode auf STEREO_IN gesetzt und der Clock wird ausgegeben.
Aber wie komme ich an das gelesene Byte/Word dran. Es gibt keine
vorgegebene Funktion in der AtmelStudio Bibliothek.
Wer kann helfen?
mfg edmu