EDMA_FMK (CNT, FRMCNT, NULL) | // Frame count EDMA_FMK (CNT, ELECNT, BUFFSIZE), // Element count (Uint32)&gBufferRcvPing, // Dest address EDMA_FMKS(IDX, FRMIDX, DEFAULT) | // Frame index value EDMA_FMKS(IDX, ELEIDX, DEFAULT), // Element index value EDMA_FMK (RLD, ELERLD, NULL) | // Reload element EDMA_FMK (RLD, LINK, NULL) // Reload link }; /* McBSP codec data channel configuration */ static MCBSP_Config mcbspCfg1 = { MCBSP_FMKS(SPCR, FREE, NO) | MCBSP_FMKS(SPCR, SOFT, NO) | MCBSP_FMKS(SPCR, FRST, YES) | MCBSP_FMKS(SPCR, GRST, YES) | MCBSP_FMKS(SPCR, XINTM, XRDY) | MCBSP_FMKS(SPCR, XSYNCERR, NO) | MCBSP_FMKS(SPCR, XRST, YES) | MCBSP_FMKS(SPCR, DLB, OFF) | MCBSP_FMKS(SPCR, RJUST, RZF) | MCBSP_FMKS(SPCR, CLKSTP, DISABLE) | MCBSP_FMKS(SPCR, DXENA, OFF) | MCBSP_FMKS(SPCR, RINTM, RRDY) | MCBSP_FMKS(SPCR, RSYNCERR, NO) | MCBSP_FMKS(SPCR, RRST, YES), MCBSP_FMKS(RCR, RPHASE, SINGLE) |
#pragma DATA_SECTION(Buffer_in_pong, ".datenpuffer"); short Buffer_in_pong[BUFFER_LEN]; #pragma DATA_SECTION(Buffer_in_peng, ".datenpuffer"); short Buffer_in_peng[BUFFER_LEN]; #pragma DATA_SECTION(Buffer_out_ping, ".datenpuffer"); short Buffer_out_ping[BUFFER_LEN]; #pragma DATA_SECTION(Buffer_out_pong, ".datenpuffer"); short Buffer_out_pong[BUFFER_LEN]; #pragma DATA_SECTION(Buffer_out_peng, ".datenpuffer"); short Buffer_out_peng[BUFFER_LEN]; //Configuration for McBSP1 (data-interface) MCBSP_Config datainterface_config = { /* McBSP Control Register */ MCBSP_FMKS(SPCR, FREE, NO) | // Freilauf MCBSP_FMKS(SPCR, SOFT, NO) | //EIGEN!!!: beim Debuggen stoppt auch die Übertragung bei einem Stop MCBSP_FMKS(SPCR, FRST, YES) | // Framesync ist ein MCBSP_FMKS(SPCR, GRST, YES) | // Reset aus, damit läuft der Samplerate- Generator MCBSP_FMKS(SPCR, XINTM, XRDY) | //EIGEN!!!: XINT is generated on every serial element by tracking the XRDY bits in SPCR (Muss Interrupt nicht an EDMA weitergegeben werden?) MCBSP_FMKS(SPCR, XSYNCERR, NO) | // empfängerseitig keine Überwachung der Synchronisation MCBSP_FMKS(SPCR, XRST, YES) | // Sender läuft (kein Reset- Status) MCBSP_FMKS(SPCR, DLB, OFF) | // Loopback (Kurschluss) nicht aktiv MCBSP_FMKS(SPCR, RJUST, RZF) | // rechtsbündige Ausrichtung der Daten im Puffer MCBSP_FMKS(SPCR, CLKSTP, DISABLE) | // Clock startet ohne Verzögerung auf fallenden Flanke (siehe auch PCR-Register) MCBSP_FMKS(SPCR, DXENA, OFF) | // DX- Enabler wird nicht verwendet MCBSP_FMKS(SPCR, RINTM, RRDY) | // Sender Interrupt wird durch "RRDY-Bit" ausgelöst MCBSP_FMKS(SPCR, RSYNCERR, NO) | // senderseitig keine Überwachung der Synchronisation MCBSP_FMKS(SPCR, RRST, YES), // Empfänger läuft (kein Reset- Status) /* Empfangs-Control Register */
#define BUFFER_LEN 50000 /* Ping-Pong buffers. Place them in the compiler section .datenpuffer */ /* How do you place the compiler section in the memory? */ #pragma DATA_SECTION(Buffer_in_ping, ".datenpuffer"); short Buffer_in_ping[BUFFER_LEN]; #pragma DATA_SECTION(Buffer_in_pong, ".datenpuffer"); short Buffer_in_pong[BUFFER_LEN]; #pragma DATA_SECTION(Buffer_out_ping, ".datenpuffer"); short Buffer_out_ping[BUFFER_LEN]; #pragma DATA_SECTION(Buffer_out_pong, ".datenpuffer"); short Buffer_out_pong[BUFFER_LEN]; //Configuration for McBSP1 (data-interface) MCBSP_Config datainterface_config = { /* McBSP Control Register */ MCBSP_FMKS(SPCR, FREE, NO) | // Freilauf MCBSP_FMKS(SPCR, SOFT, YES) | // YES: Soft mode is enabled. During emulation halt, serial port clock stops after completion of current transmission. MCBSP_FMKS(SPCR, FRST, YES) | // Framesync ist ein MCBSP_FMKS(SPCR, GRST, YES) | // Reset aus, damit läuft der Samplerate- Generator MCBSP_FMKS(SPCR, XINTM, XRDY) | // XINT is driven by XRDY (end-of-word) and end-of-frame in A-bis mode. MCBSP_FMKS(SPCR, XSYNCERR, NO) | // empfängerseitig keine Überwachung der Synchronisation MCBSP_FMKS(SPCR, XRST, YES) | // Sender läuft (kein Reset- Status) MCBSP_FMKS(SPCR, DLB, OFF) | // Loopback (Kurschluss) nicht aktiv MCBSP_FMKS(SPCR, RJUST, RZF) | // rechtsbündige Ausrichtung der Daten im Puffer MCBSP_FMKS(SPCR, CLKSTP, DISABLE) | // Clock startet ohne Verzögerung auf fallenden Flanke (siehe auch PCR-Register) MCBSP_FMKS(SPCR, DXENA, OFF) | // DX- Enabler wird nicht verwendet MCBSP_FMKS(SPCR, RINTM, RRDY) | // Sender Interrupt wird durch "RRDY-Bit" ausgelöst MCBSP_FMKS(SPCR, RSYNCERR, NO) | // senderseitig keine Überwachung der Synchronisation MCBSP_FMKS(SPCR, RRST, YES), // Empfänger läuft (kein Reset- Status) /* Empfangs-Control Register */ MCBSP_FMKS(RCR, RPHASE, SINGLE) | // Nur eine Phase pro Frame
\ 0x0001, /* Set-Up Reg 8 Sample rate control */ \ /* X 0 reserved */ \ /* CLKOUT 0 clock output divider: 2 (MCLK/2) */ \ /* CLKIN 0 clock input divider: 2 (MCLK/2) */ \ /* SR,BOSR 00000 sampling rate: ADC 48 kHz, DAC 48 kHz in USB mode*/ \ /* USB/N 1 clock mode select (USB/normal): USB */ \ \ 0x0001 /* Set-Up Reg 9 Digital interface activation */ \ /* XX..X 00000000 reserved */ \ /* ACT 1 not reseted */ \ }; //Konfig Struktur McBSP0 static MCBSP_Config mcbspforAIC23Cfg = { /* McBSP Control Register */ MCBSP_FMKS(SPCR, FREE, NO) | // Deaktivierter Freilauf MCBSP_FMKS(SPCR, SOFT, NO) | // Clock stoppt beim debuggen (sofort) MCBSP_FMKS(SPCR, FRST, YES) | // /*********/ MCBSP_FMKS(SPCR, GRST, YES) | // Reset aus, damit läuft der Samplerate- Generator MCBSP_FMKS(SPCR, XINTM, XRDY) | // Sender Interrupt wird durch "XRDY-Bit" ausgelöst MCBSP_FMKS(SPCR, XSYNCERR, NO) | // keine Überwachung der Synchronisation MCBSP_FMKS(SPCR, XRST, YES) | // /*********/ MCBSP_FMKS(SPCR, DLB, OFF) | // Loopback nicht aktiv MCBSP_FMKS(SPCR, RJUST, RZF) | // Right justify and zero fill MCBSP_FMKS(SPCR, CLKSTP, NODELAY) | // Clock startet ohne Verzögerung auf fallenden Flanke (siehe auch PCR-Register) MCBSP_FMKS(SPCR, DXENA, OFF) | // DX- Enabler wird nicht verwendet MCBSP_FMKS(SPCR, RINTM, RRDY) | // Sender Interrupt wird durch "RRDY-Bit" ausgelöst MCBSP_FMKS(SPCR, RSYNCERR, NO) | // keine Überwachung der Synchronisation MCBSP_FMKS(SPCR, RRST, YES), // Empfänger läuft (kein Reset- Status) /* Empfangs-Control Register */ MCBSP_FMKS(RCR, RPHASE, DEFAULT) | // Nur eine Phase pro Frame
// 1 RESERVED // 2 In SPI mode, clock starts with delay. Triggering edge depends on CLKXP. // 3 In SPI mode, clock starts without delay. Triggering edge depends on CLKXP. // 10-8 RESERVED // 7 DXENA DX Enable. If set, DX is enabled. // 6 RESERVED // 5-4 RINTM Receive Interupt (RINT) Enable. // 0 RINT driven by RRDY, end of word and end of frame // 1 RINT generated by end of block and end of frame // 2 RINT generated by new frame sync // 3 RINT generated by RSYNCERR // 3 RSYNCERR Receive Sync Error. If set then error has been detected. // 2 RFULL Receive Shift Register Full. If set then RSR is full. STATUS // 1 RRDY Receiver Ready. If set then receiver ready for new data in DRR to be read. STATUS // 0 RRST Receiver Reset. If not set then receiver disabled. MCBSP_FMKS(SPCR, FREE, NO) | //Do not run clock when halted MCBSP_FMKS(SPCR, SOFT, NO) | //Clocks stop instantly MCBSP_FMKS(SPCR, FRST, YES) | //Generate Frame Sync MCBSP_FMKS(SPCR, GRST, YES) | //Generate Sample Rate MCBSP_FMKS(SPCR, XINTM, XRDY) | //XINT driven by XRDY MCBSP_FMKS(SPCR, XSYNCERR, NO) | //Error checking used MCBSP_FMKS(SPCR, XRST, YES) | //Enable Transmitter MCBSP_FMKS(SPCR, DLB, OFF) | //No digital loop back MCBSP_FMKS(SPCR, RJUST, RZF) | //Right justify, 0 fill MCBSP_FMKS(SPCR, CLKSTP, DISABLE) | //Clock stop disabled MCBSP_FMKS(SPCR, DXENA, OFF) | //DX disabled MCBSP_FMKS(SPCR, RINTM, RRDY) | //RINT driven by RRDY MCBSP_FMKS(SPCR, RSYNCERR, NO) | //Error checking used MCBSP_FMKS(SPCR, RRST, YES), //Enable Receiver //RCR - Receive Control Register