FASTRUN void ILI948x_t4_mm::FlexIO_Config_MultiBeat() {
uint32_t i;
uint8_t MulBeatWR_BeatQty = SHIFTNUM * sizeof(uint32_t) / sizeof(uint32_t); //Number of beats = number of shifters * beats per shifter
/* Disable and reset FlexIO */
p->CTRL &= ~FLEXIO_CTRL_FLEXEN;
p->CTRL |= FLEXIO_CTRL_SWRST;
p->CTRL &= ~FLEXIO_CTRL_SWRST;
gpioWrite();
for (i = 0; i <= SHIFTNUM - 1; i++) {
p->SHIFTCFG[i] =
FLEXIO_SHIFTCFG_INSRC * (1U) /* Shifter input from next shifter's output */
| FLEXIO_SHIFTCFG_SSTOP(0U) /* Shifter stop bit disabled */
| FLEXIO_SHIFTCFG_SSTART(0U) /* Shifter start bit disabled and loading data on enabled */
| FLEXIO_SHIFTCFG_PWIDTH(23U); /* 32 bit shift, with 24 output pins (upper 8 bits are discarded) */
}
p->SHIFTCTL[0] =
FLEXIO_SHIFTCTL_TIMSEL(0) /* Shifter's assigned timer index */
| FLEXIO_SHIFTCTL_TIMPOL * (0U) /* Shift on posedge of shift clock */
| FLEXIO_SHIFTCTL_PINCFG(3U) /* Shifter's pin configured as output */
| FLEXIO_SHIFTCTL_PINSEL(4) /* Shifter's pin start index */
| FLEXIO_SHIFTCTL_PINPOL * (0U) /* Shifter's pin active high */
| FLEXIO_SHIFTCTL_SMOD(2U); /* shifter mode transmit */
for (i = 1; i <= SHIFTNUM - 1; i++) {
p->SHIFTCTL[i] =
FLEXIO_SHIFTCTL_TIMSEL(0) /* Shifter's assigned timer index */
| FLEXIO_SHIFTCTL_TIMPOL * (0U) /* Shift on posedge of shift clock */
| FLEXIO_SHIFTCTL_PINCFG(0U) /* Shifter's pin configured as output disabled */
| FLEXIO_SHIFTCTL_PINSEL(4) /* Shifter's pin start index */
| FLEXIO_SHIFTCTL_PINPOL * (0U) /* Shifter's pin active high */
| FLEXIO_SHIFTCTL_SMOD(2U); /* shifter mode transmit */
}
/* Configure the timer for shift clock */
p->TIMCMP[0] =
((MulBeatWR_BeatQty * 2U - 1) << 8) /* TIMCMP[15:8] = number of beats x 2 – 1 */
| (_buad_div / 2U - 1U); /* TIMCMP[7:0] = shift clock divide ratio / 2 - 1 */
p->TIMCFG[0] = FLEXIO_TIMCFG_TIMOUT(0U) /* Timer output logic one when enabled and not affected by reset */
| FLEXIO_TIMCFG_TIMDEC(0U) /* Timer decrement on FlexIO clock, shift clock equals timer output */
| FLEXIO_TIMCFG_TIMRST(0U) /* Timer never reset */
| FLEXIO_TIMCFG_TIMDIS(2U) /* Timer disabled on timer compare */
| FLEXIO_TIMCFG_TIMENA(2U) /* Timer enabled on trigger high */
| FLEXIO_TIMCFG_TSTOP(0U) /* Timer stop bit disabled */
| FLEXIO_TIMCFG_TSTART * (0U); /* Timer start bit disabled */
p->TIMCTL[0] =
FLEXIO_TIMCTL_TRGSEL(((SHIFTNUM - 1) << 2) | 1U) /* Timer trigger selected as highest shifter's status flag */
| FLEXIO_TIMCTL_TRGPOL * (1U) /* Timer trigger polarity as active low */
| FLEXIO_TIMCTL_TRGSRC * (1U) /* Timer trigger source as internal */
| FLEXIO_TIMCTL_PINCFG(3U) /* Timer' pin configured as output */
| FLEXIO_TIMCTL_PINSEL(0) /* Timer' pin index: WR pin */
| FLEXIO_TIMCTL_PINPOL * (1U) /* Timer' pin active low */
| FLEXIO_TIMCTL_TIMOD(1U); /* Timer mode 8-bit baud counter */
/*
Serial.printf("CCM_CDCDR: %x\n", CCM_CDCDR);
Serial.printf("VERID:%x PARAM:%x CTRL:%x PIN: %x\n", IMXRT_FLEXIO2_S.VERID, IMXRT_FLEXIO2_S.PARAM, IMXRT_FLEXIO2_S.CTRL, IMXRT_FLEXIO2_S.PIN);
Serial.printf("SHIFTSTAT:%x SHIFTERR=%x TIMSTAT=%x\n", IMXRT_FLEXIO2_S.SHIFTSTAT, IMXRT_FLEXIO2_S.SHIFTERR, IMXRT_FLEXIO2_S.TIMSTAT);
Serial.printf("SHIFTSIEN:%x SHIFTEIEN=%x TIMIEN=%x\n", IMXRT_FLEXIO2_S.SHIFTSIEN, IMXRT_FLEXIO2_S.SHIFTEIEN, IMXRT_FLEXIO2_S.TIMIEN);
Serial.printf("SHIFTSDEN:%x SHIFTSTATE=%x\n", IMXRT_FLEXIO2_S.SHIFTSDEN, IMXRT_FLEXIO2_S.SHIFTSTATE);
for(int i=0; i<SHIFTNUM; i++){
Serial.printf("SHIFTCTL[%d]:%x \n", i, IMXRT_FLEXIO2_S.SHIFTCTL[i]);
}
for(int i=0; i<SHIFTNUM; i++){
Serial.printf("SHIFTCFG[%d]:%x \n", i, IMXRT_FLEXIO2_S.SHIFTCFG[i]);
}
Serial.printf("TIMCTL:%x %x %x %x\n", IMXRT_FLEXIO2_S.TIMCTL[0], IMXRT_FLEXIO2_S.TIMCTL[1], IMXRT_FLEXIO2_S.TIMCTL[2], IMXRT_FLEXIO2_S.TIMCTL[3]);
Serial.printf("TIMCFG:%x %x %x %x\n", IMXRT_FLEXIO2_S.TIMCFG[0], IMXRT_FLEXIO2_S.TIMCFG[1], IMXRT_FLEXIO2_S.TIMCFG[2], IMXRT_FLEXIO2_S.TIMCFG[3]);
Serial.printf("TIMCMP:%x %x %x %x\n", IMXRT_FLEXIO2_S.TIMCMP[0], IMXRT_FLEXIO2_S.TIMCMP[1], IMXRT_FLEXIO2_S.TIMCMP[2], IMXRT_FLEXIO2_S.TIMCMP[3]);
*/
/* Enable FlexIO */
p->CTRL |= FLEXIO_CTRL_FLEXEN;
p->SHIFTSDEN |= 1U << (SHIFTER_DMA_REQUEST); // enable DMA trigger when shifter status flag is set on shifter SHIFTER_DMA_REQUEST
}