Back to posts Edit this post
Copy content

13 Oct 08:45

#include "platform.h" #include "xil_printf.h" #include "displayport.h" #include "vtc.h" #include "tpg.h" #include "xparameters.h" #include "./../../../hw/sdt/drivers/myip_v1_0/src/myip.h" #include <stdint.h> #include "xil_types.h" #include "xil_io.h" // Funkcja pomocnicza zwracająca maksimum z trzech wartości u8 max(u8 a, u8 b, u8 c) { u8 m = a; if (b > m) m = b; if (c > m) m = c; return m; } // Funkcja pomocnicza zwracająca minimum z trzech wartości u8 min(u8 a, u8 b, u8 c) { u8 m = a; if (b < m) m = b; if (c < m) m = c; return m; } // Funkcja konwertująca RGB na Hue (0 - 360 stopni) u16 rgb_to_hue(u8 r, u8 g, u8 b) { u8 c_max = max(r, g, b); u8 c_min = min(r, g, b); u8 delta = c_max - c_min; int16_t hue = 0; // Jeśli max i min są równe, kolor jest achromatyczny (szary/biały/czarny) -> Hue = 0 if (delta == 0) { return 0; } // Obliczanie Hue w zależności od tego, która składowa jest największa if (c_max == r) { hue = ((int32_t)(g - b) * 60) / delta; } else if (c_max == g) { hue = (((int32_t)(b - r) * 60) / delta) + 120; } else if (c_max == b) { hue = (((int32_t)(r - g) * 60) / delta) + 240; } // Zapewnienie, że wynik jest w zakresie 0 - 359 stopni if (hue < 0) { hue += 360; } return (u16)hue; } int main() { init_platform(); xil_printf("\n\n\n\n\n"); // Definicja koloru wejściowego RGB u8 R = 0x00; u8 G = 0xBF; u8 B = 0x8F; // Konwersja na Hue (wartość od 0 do 360) u16 hue_val = rgb_to_hue(R, G, B); xil_printf("Wyliczony Hue: %d stopni\r\n", hue_val); // Tworzenie ramki danych do rejestru // Jeśli Twój adres w IP oczekuje wartości Hue zamiast XRGB, // możesz podstawić: u32 xrgb = hue_val; u32 xrgb = 0x00<<24 | R<<16 | G<<8 | B; //00RGB MYIP_mWriteReg(XPAR_MYIP_0_BASEADDR, MYIP_S00_AXI_SLV_REG0_OFFSET, xrgb); xil_printf("Starting...\r\n"); displayport_init(); displayport_setup_interrupts(); vtc_init(); tpg_init(); xil_printf("Entire video pipeline activated\r\n"); cleanup_platform(); return 0; }

No files