tmp: creating specific modules for 8 channels & 16 channels

This commit is contained in:
2025-08-17 08:57:05 +00:00
parent 57ace1383b
commit c9ca399e20
23 changed files with 253 additions and 88 deletions
@@ -47,6 +47,12 @@ MEM_MAP vc_mem;
TXDATA_T *txdata;
TXDATA_T tx_buffer[TX_BUFF_LEN(CHAN_MAXLEDS)];
#if LED_NCHANS <= 8
TXDATA_T tx_send_buffer[TX_BUFF_SIZE(CHAN_MAXLEDS)];
#else
TXDATA_T *tx_send_buffer = tx_buffer;
#endif /* LED_NCHANS <= 8 */
void swap_bytes();
void leddriver_setup() {
@@ -113,7 +119,7 @@ void leddriver_refresh() {
usleep(10);
}
memcpy(txdata, tx_buffer, TX_BUFF_SIZE(CHAN_MAXLEDS));
memcpy(txdata, tx_send_buffer, TX_BUFF_SIZE(CHAN_MAXLEDS));
enable_dma(DMA_CHAN_A);
start_smi(&vc_mem);
usleep(10);
@@ -122,11 +128,13 @@ void leddriver_refresh() {
// Swap adjacent bytes in transmit data
void swap_bytes() {
uint16_t *wp = (uint16_t *)tx_buffer;
uint16_t *wp_dest = (uint16_t *)tx_send_buffer;
int len = TX_BUFF_SIZE(CHAN_MAXLEDS);
len = (len + 1) / 2;
while (len-- > 0) {
*wp = __builtin_bswap16(*wp);
*wp_dest = __builtin_bswap16(*wp);
wp_dest++;
wp++;
}
}