DMA channel x configuration register (DMA_CCRx) (x = 1..7, where x = channel number)
Регистр конфигурации канала x DMA (x - номер канала = 1..7)
Смещение (Address offset): 0x08 + 0x14 * (x-1)
Reset value: 0x0000'0000
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
Reserved | MEM2MEM | PL[1:0] | MSIZE[1:0] | PSIZE[1:0] | |||
--- | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
MINC | PINC | CIRC | DIR | TEIE | HTIE | TCIE | EN |
rw | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 : режим передачи данных память-память отключен.
1 : режим передачи данных память-память включен.
00 : Low - низкий
01 : Medium - средний
10 : High - высокий
11 : Very high - очень высокий
00 : 8 бит
01 : 16 бит
10 : 32 бита
11 : не используется
00 : 8 бит
01 : 16 бит
10 : 32 бита
11 : не используется
0 : режим отключён.
1 : адрес выборки данных для передачи автоматически увеличивается. Шаг увеличения адреса учитывает размер данных (MSIZE[1:0] - memory size).При восьмибитных данных выбирается каждый байт. При 16-битных данных выбирается полуслово (шаг два байта), при 32-битных данных выбирается слово (шаг четыре байта).
0 : режим отключён.
1 : адрес выборки данных для передачи автоматически увеличивается. Шаг увеличения адреса учитывает размер данных (PSIZE[1:0] - peripheral size).При восьмибитных данных выбирается каждый байт. При 16-битных данных выбирается полуслово (шаг два байта), при 32-битных данных выбирается слово (шаг четыре байта).
0 : режим отключён.
1 : включен циклический режим: как только счетчик количества данных для пересылки (DMA_CNDTRx) обнулится, произойдёт его автоматическая перезагрузка в заранее запрограммированное значение. Текущие адреса памяти и периферии (если работают в режиме увеличения адреса) так же сбросятся в значения, установленные соответствующими регистрами (DMA_CMARx, DMA_CPARx)
0 : Read from peripheral - чтение из периферии: чтение по адресу DMA_CPARx и запись по адресу DMA_CMARx (P->M, P2M)
1 : Read from memory - чтение из памяти: чтение по адресу DMA_CMARx и запись по адресу DMA_CPARx (M->P, M2P)
0 : прерывание запрещено.
1 : прерывание разрешено.
0 : прерывание запрещено.
1 : прерывание разрешено.
0 : прерывание запрещено.
1 : прерывание разрешено.
0 : канал DMA отключен.
1 : канал DMA включен.
/******************* Bit definition for DMA_CCR1 register *******************/
#define DMA_CCR1_EN ((uint16_t)0x0001) /* Channel enable*/
#define DMA_CCR1_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */
#define DMA_CCR1_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */
#define DMA_CCR1_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */
#define DMA_CCR1_DIR ((uint16_t)0x0010) /* Data transfer direction */
#define DMA_CCR1_CIRC ((uint16_t)0x0020) /* Circular mode */
#define DMA_CCR1_PINC ((uint16_t)0x0040) /* Peripheral increment mode */
#define DMA_CCR1_MINC ((uint16_t)0x0080) /* Memory increment mode */
#define DMA_CCR1_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */
#define DMA_CCR1_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */
#define DMA_CCR1_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */
#define DMA_CCR1_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */
#define DMA_CCR1_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */
#define DMA_CCR1_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */
#define DMA_CCR1_PL ((uint16_t)0x3000) /* PL[1:0] bits(Channel Priority level) */
#define DMA_CCR1_PL_0 ((uint16_t)0x1000) /* Bit 0 */
#define DMA_CCR1_PL_1 ((uint16_t)0x2000) /* Bit 1 */
#define DMA_CCR1_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */
Для регистров остальных каналов (CCR2...CCR7 для DMA1, CCR2...CCR5 для DMA2) изменить цифру в имени соответствующего определения бита (..._CCRx_...)