Ср окт 27, 2021 22:10:15
volatile uint16_t videobuff[4];
LDMA_TransferCfg_t dispXferCfg = LDMA_TRANSFER_CFG_PERIPHERAL(ldmaPeripheralSignal_TIMER0_UFOF);
LDMA_Descriptor_t
disp_descriptor = LDMA_DESCRIPTOR_SINGLE_M2P_BYTE(videobuff, &(USART0->TXDOUBLE), sizeof(videobuff)/sizeof(videobuff[0]) );
void InitTransfer(void) {
// USART0 сконфигурирован...
TIMER0->CFG = TIMER_CFG_MODE_UP | TIMER_CFG_PRESC_DIV2 |
TIMER_CFG_SYNC_DISABLE | TIMER_CFG_DISSYNCOUT_EN ;
TIMER_DEVICE->EN = TIMER_EN_EN;
timer_freq = CMU_ClockFreqGet(cmuCLOCK_TIMER0);
divider = (usart_freq/(2 * 4* 125)) - 1; // 500us
TIMER0->TOP = divider;
// Enable LDMA clock
CMU_ClockEnable(cmuClock_LDMA, true);
LDMA_Init_t init = LDMA_INIT_DEFAULT;
// Initialize LDMA
LDMA_Init(&init);
// Enable LDMA Interrupt
NVIC_ClearPendingIRQ(LDMA_IRQn);
NVIC_SetPriority(LDMA_IRQn, 3);
NVIC_EnableIRQ(LDMA_IRQn);
disp_descriptor.xfer.size = ldmaCtrlSizeHalf;
disp_descriptor.xfer.blockSize = 1;
LDMA_StartTransfer(DYNAMIC_DISPLAY_LDMA_CH, &dispXferCfg, &disp_descriptor);
TIMER_DEVICE->CMD = TIMER_CMD_START;
}
Пт окт 29, 2021 09:52:37
disp_descriptor.xfer.size = ldmaCtrlSizeHalf;
LDMA_Descriptor_t
disp_descriptor = LDMA_DESCRIPTOR_LINKREL_M2P_BYTE(videobuff, // откуда передавать данные
&(USART_DEVICE->TXDOUBLE), // куда передавать данные
sizeof(videobuff)/sizeof(videobuff[0]), // сколько передавать данных
0); // относительный указатель на следующий дескриптор