# -------------------------- # DMA register fields # -------------------------- CHANNEL_COUNT = 4 CHANNEL_M = ((1 << CHANNEL_COUNT) - 1) # CONTROL CONTROL_CLEAR_LOCAL_IRQ_S = 0 CONTROL_CLEAR_LOCAL_IRQ_M = ( CHANNEL_M << CONTROL_CLEAR_LOCAL_IRQ_S) def CONTROL_CLEAR_LOCAL_IRQ(i): return ((1 << (CONTROL_CLEAR_LOCAL_IRQ_S + (i))) & CONTROL_CLEAR_LOCAL_IRQ_M) CONTROL_CLEAR_GLOBAL_IRQ_S = (CHANNEL_COUNT + 0) CONTROL_CLEAR_GLOBAL_IRQ_M = (1 << CONTROL_CLEAR_GLOBAL_IRQ_S) CONTROL_CLEAR_ERROR_IRQ_S = (CHANNEL_COUNT + 1) CONTROL_CLEAR_ERROR_IRQ_M = (1 << CONTROL_CLEAR_ERROR_IRQ_S) CONTROL_GLOBAL_IRQ_ENA_S = (CHANNEL_COUNT + 2) CONTROL_GLOBAL_IRQ_ENA_M = (1 << CONTROL_GLOBAL_IRQ_ENA_S) CONTROL_ERROR_IRQ_ENA_S = (CHANNEL_COUNT + 3) CONTROL_ERROR_IRQ_ENA_M = (1 << CONTROL_ERROR_IRQ_ENA_S) CONTROL_CURRENT_VALUE_S = (CHANNEL_COUNT + 4) CONTROL_CURRENT_VALUE_M = (1 << CONTROL_CURRENT_VALUE_S) CFG_CH_ENABLE_S = 0 CFG_CH_ENABLE_M = (1 << CFG_CH_ENABLE_S) CFG_CH_DISABLE_M = (0 << CFG_CH_ENABLE_S) CFG_CH_PRIOR_S = 1 CFG_CH_PRIOR_M = (0x3 << CFG_CH_PRIOR_S) CFG_CH_READ_MODE_S = 3 CFG_CH_READ_MODE_memory_M = (1 << CFG_CH_READ_MODE_S) CFG_CH_READ_MODE_periphery_M = (0 << CFG_CH_READ_MODE_S) CFG_CH_WRITE_MODE_S = 4 CFG_CH_WRITE_MODE_memory_M = (1 << CFG_CH_WRITE_MODE_S) CFG_CH_WRITE_MODE_periphery_M = (0 << CFG_CH_WRITE_MODE_S) CFG_CH_READ_INCREMENT_S = 5 CFG_CH_READ_INCREMENT_M = (1 << CFG_CH_READ_INCREMENT_S) CFG_CH_READ_no_INCREMENT_M = (0 << CFG_CH_READ_INCREMENT_S) CFG_CH_READ_INCREMENT_S = 5 CFG_CH_READ_INCREMENT_M = (1 << CFG_CH_READ_INCREMENT_S) CFG_CH_READ_no_INCREMENT_M = (0 << CFG_CH_READ_INCREMENT_S) CFG_CH_WRITE_INCREMENT_S = 6 CFG_CH_WRITE_INCREMENT_M = (1 << CFG_CH_WRITE_INCREMENT_S) CFG_CH_WRITE_no_INCREMENT_M = (0 << CFG_CH_WRITE_INCREMENT_S) CFG_CH_READ_SIZE_S = 7 CFG_CH_READ_SIZE_byte_M = (0B00 << CFG_CH_READ_SIZE_S) # байт CFG_CH_READ_SIZE_2byte_M = (0B01 << CFG_CH_READ_SIZE_S) # полуслово CFG_CH_READ_SIZE_4byte_M = (0B10 << CFG_CH_READ_SIZE_S) # слово CFG_CH_READ_SIZE_rez_M = (0B11 << CFG_CH_READ_SIZE_S) # резерв CFG_CH_WRITE_SIZE_S = 9 CFG_CH_WRITE_SIZE_byte_M = (0B00 << CFG_CH_WRITE_SIZE_S) # байт CFG_CH_WRITE_SIZE_2byte_M = (0B01 << CFG_CH_WRITE_SIZE_S) # полуслово CFG_CH_WRITE_SIZE_4byte_M = (0B10 << CFG_CH_WRITE_SIZE_S) # слово CFG_CH_WRITE_SIZE_rez_M = (0B11 << CFG_CH_WRITE_SIZE_S) # резерв # Кол-во байт пакетной передачи: 2^Read_burst_size CFG_CH_READ_BURST_SIZE_S = 11 # Кол-во байт пакетной передачи: 2^Write_burst_size CFG_CH_WRITE_BURST_SIZE_S = 14 CFG_CH_READ_REQ_S = 17 # выбор канала чтения CFG_CH_READ_REQ_M = (0xF << CFG_CH_READ_REQ_S) def CFG_CH_READ_REQ(v): return (((v) << CFG_CH_READ_REQ_S) & CFG_CH_READ_REQ_M) CFG_CH_WRITE_REQ_S = 21 # выбор канала записи CFG_CH_WRITE_REQ_M = (0xF << CFG_CH_WRITE_REQ_S) def CFG_CH_WRITE_REQ(v): return (((v) << CFG_CH_WRITE_REQ_S) & CFG_CH_WRITE_REQ_M) CFG_CH_ACK_READ_S = 25 CFG_CH_ACK_READ_M = (1 << CFG_CH_ACK_READ_S) CFG_CH_ACK_WRITE_S = 26 CFG_CH_ACK_WRITE_M = (1 << CFG_CH_ACK_WRITE_S) STATUS_READY_S = 0