Above example code also supports DMA using conditional compilation. Search "#if USB_DMA #endif" pair on the example code. The example code will help you to understand the description on the datasheet. The usbcfg.h defines the keys. usbcfg.h #define USB_DMA 0 #define USB_DMA_EP 0x00000040 Modify it directly OR apply uVision Config wizard to usbcfg.h to enable DMA on the isoc EPs There are several scheme for the synchronization of isoc EP. Above example applies synchronized EP, popular for PCM audio. In this scheme, the number of the data on a packet represents the sampling rate. For example, when the sampling rate is 8kHz, each packet has 8 pairs of data for each channel. To represent fractional sampling rate, say 44.1kHz, packets with 44 or 45 pairs are used. Usually, 44 pairs are transferred, but 45 pairs are sent every 10 transfers. 44 * 9/10 + 45 * 1/10 = 44.1 This requirement makes the DMA descriptor complicated. Tsuneo
How would you set write this 44 * 9/10 + 45 * 1/10 = 44.1 in the /* Audio Definitions */
/* Audio Definitions */ #define DATA_FREQ 32000 /* Audio Data Frequency */ #define P_S 32 /* Packet Size */ #if USB_DMA #define P_C 4 /* Packet Count */ #else #define P_C 1 /* Packet Count */ #endif #define B_S (8*P_C*P_S) /* Buffer Size */
View all questions in Keil forum