LLSI設計時大概是考量到系統整體效能,資料是以32-bit的寬度寫入LLSI FIFO的。因此最直接的方式就是將frame buffer宣告成32-bit的陣列,這個方式拿來點四色”ARGBW” LED時倒是沒什麼問題。但是當我試著用LLSI點亮三色ARGB七段顯示器的時候就有發現,1個顏色8-bit,1顆ARGB LED 3個顏色總共24-bit,資料的排列順序會就變成下面這樣 … (第一行的註解是指第幾顆LED) // 2nd 1st 3rd 2nd 4th 3rd 6th 5th uint32_t g_au32frameBuffer[6] = {0xRRBBGGRR, 0xGGRRBBGG, 0xBBGGRRBB, 0xRRBBGGRR ...} 光用看的是不是就很頭大? 再想到之後要去個別調整每一顆ARGB LED的色彩、亮度,頭就更大了。這也讓我開始思考, 有沒有辦法將陣列宣告成8-bit,然後以32-bit的格式來讀取8-bit陣列,寫入LLSI的FIFO。 完整程式碼一樣可以看留言區或是GitHub https://github.com/danchouzhou/LLSIClock/blob/main/firmware/LLSI_RGB/main.c 從32-bit陣列轉變成8-bit陣列 陣列如果變成這樣讓g_au8frameBuffer[0]~[2],儲存第1顆ARGB LED的R, G, B;g_au8frameBuffer[3]~[5],儲存第2顆ARGB LED的R, G, B,以此類推,是不是直觀許多呢? volatile uint8_t g_au8frameBuffer[24] = { // R G B 0x80, 0x00, 0x00, // Red 0x80, 0x20, 0x00, // Orange 0x40, 0x40, 0x00, // Yellow 0x00, 0x80, 0x00, // Green 0x00, 0x00, 0xFF, // Blue 0x00, 0x40, 0x80, // Indigo 0x80, 0x00, 0xFF...