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

3130292827262524
Reserved
------------------------
00000000
2322212019181716
Reserved
------------------------
00000000


15141312111098
Reserved MEM2MEM PL[1:0] MSIZE[1:0] PSIZE[1:0]
---rwrwrwrwrwrwrw
00000000
76543210
MINC PINC CIRC DIR TEIE HTIE TCIE EN
rwrwrwrwrwrwrwrw
00000000


Bits 31:15
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса
Bit 14
MEM2MEM
Memory to memory mode

 0 : режим передачи данных память-память отключен.

 1 : режим передачи данных память-память включен.

Bits 13:12
PL[1:0]
Channel priority level
Приоритет канала при запросе на передачу данных

 00 : Low - низкий

 01 : Medium - средний

 10 : High - высокий

 11 : Very high - очень высокий

Bits 11:10
MSIZE[1:0]
Memory size
Размер данных со стороны памяти:

 00 : 8 бит

 01 : 16 бит

 10 : 32 бита

 11 : не используется

Bits 9:8
PSIZE[1:0]
Peripheral size
Размер данных со стороны периферии:

 00 : 8 бит

 01 : 16 бит

 10 : 32 бита

 11 : не используется

Bit 7
MINC
Memory increment mode
Режим автоматического увеличения адреса со стороны памяти

 0 : режим отключён.

 1 : адрес выборки данных для передачи автоматически увеличивается. Шаг увеличения адреса учитывает размер данных (MSIZE[1:0] - memory size).При восьмибитных данных выбирается каждый байт. При 16-битных данных выбирается полуслово (шаг два байта), при 32-битных данных выбирается слово (шаг четыре байта).

Bit 6
PINC
Peripheral increment mode
Режим автоматического увеличения адреса со стороны периферии

 0 : режим отключён.

 1 : адрес выборки данных для передачи автоматически увеличивается. Шаг увеличения адреса учитывает размер данных (PSIZE[1:0] - peripheral size).При восьмибитных данных выбирается каждый байт. При 16-битных данных выбирается полуслово (шаг два байта), при 32-битных данных выбирается слово (шаг четыре байта).

Bit 5
CIRC
Circular mode
Циклический режим

 0 : режим отключён.

 1 : включен циклический режим: как только счетчик количества данных для пересылки (DMA_CNDTRx) обнулится, произойдёт его автоматическая перезагрузка в заранее запрограммированное значение. Текущие адреса памяти и периферии (если работают в режиме увеличения адреса) так же сбросятся в значения, установленные соответствующими регистрами (DMA_CMARx, DMA_CPARx)

Bit 4
DIR
Data transfer direction
Направление передачи данных

 0 : Read from peripheral - чтение из периферии: чтение по адресу DMA_CPARx и запись по адресу DMA_CMARx (P->M, P2M)

 1 : Read from memory - чтение из памяти: чтение по адресу DMA_CMARx и запись по адресу DMA_CPARx (M->P, M2P)

Bit 3
TEIE
Transfer error interrupt enable
Разрешение прерывания при ошибке передачи данных в канале DMA

 0 : прерывание запрещено.

 1 : прерывание разрешено.

Bit 2
HTIE
Half transfer interrupt enable
Разрешение прерывания при передачи половины из общего количества данных, назначенных к передаче в канале DMA

 0 : прерывание запрещено.

 1 : прерывание разрешено.

Bit 1
TCIE
Transfer complete interrupt enable
Разрешение прерывания при окончании передачи данных в канале DMA

 0 : прерывание запрещено.

 1 : прерывание разрешено.

Bit 0
EN
Channel enable
Включение канала DMA

 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_...)