tmp: creating specific modules for 8 channels & 16 channels
This commit is contained in:
BIN
Binary file not shown.
Binary file not shown.
@@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
#include "include/log.h"
|
||||
#include "src/leddriver/rpi_leddriver.h"
|
||||
// #include "src/leddriver/rpi_leddriver.h"
|
||||
#include "src/common.h"
|
||||
#include "src/dma/rpi_dma.h"
|
||||
#include "src/dma/rpi_videocore.h"
|
||||
#include "src/smi/rpi_smi.h"
|
||||
#include "src/gpio/rpi_gpio.h"
|
||||
|
||||
|
||||
#define CHAN_MAXLEDS 60 // Maximum number of LEDs per channel
|
||||
#define LED_NCHANS 8 // Number of LED channels (8 or 16)
|
||||
|
||||
#define TX_TEST 0 // If non-zero, use dummy Tx data
|
||||
#define LED_NBITS 24 // Number of data bits per LED
|
||||
@@ -11,8 +15,9 @@
|
||||
#define LED_POSTBITS 4 // Number of zero bits after LED data
|
||||
#define BIT_NPULSES 3 // Number of O/P pulses per LED bit
|
||||
|
||||
// Length of data for 1 row (1 LED on each channel)
|
||||
// // Length of data for 1 row (1 LED on each channel)
|
||||
#define LED_DLEN (LED_NBITS * BIT_NPULSES)
|
||||
#define LED_NCHANS 8 // Number of channels, 8 or 16
|
||||
|
||||
// Transmit data type, 8 or 16 bits
|
||||
#if LED_NCHANS > 8
|
||||
@@ -21,14 +26,19 @@ typedef uint16_t TXDATA_T;
|
||||
typedef uint8_t TXDATA_T;
|
||||
#endif
|
||||
|
||||
// Ofset into Tx data buffer, given LED number in chan
|
||||
|
||||
// // Ofset into Tx data buffer, given LED number in chan
|
||||
#define LED_TX_OSET(n) (LED_PREBITS + (LED_DLEN * (n)))
|
||||
|
||||
// Size of data buffers & NV memory, given number of LEDs per chan
|
||||
// // Size of data buffers & NV memory, given number of LEDs per chan
|
||||
#define TX_BUFF_LEN(n) (LED_TX_OSET(n) + LED_POSTBITS)
|
||||
#define TX_BUFF_SIZE(n) (TX_BUFF_LEN(n) * sizeof(TXDATA_T))
|
||||
|
||||
#define PAGE_SIZE 0x1000
|
||||
#define VC_MEM_SIZE (PAGE_SIZE + TX_BUFF_SIZE(CHAN_MAXLEDS))
|
||||
|
||||
extern TXDATA_T tx_buffer[TX_BUFF_LEN(CHAN_MAXLEDS)];
|
||||
|
||||
// extern TXDATA_T tx_buffer[TX_BUFF_LEN(CHAN_MAXLEDS)];
|
||||
extern TXDATA_T tx_send_buffer[TX_BUFF_LEN(CHAN_MAXLEDS)];
|
||||
extern TXDATA_T *txdata;
|
||||
extern MEM_MAP vc_mem;
|
||||
|
||||
Reference in New Issue
Block a user