Bosh sahifa > Yangiliklar > Kontent

Vaqt misoli

Apr 26, 2019

2.2.4 Vaqt namunasi: 60Hzda 480x272

60 gigagertsli ekranni yangilash uchun kvadrat uchun 48000000/60 = 800000 tez soatlar mavjud.

PCLK bo'luvchi REG_PCLK-ni 5 ga sozlash PCLK chastotasini 9,6 MGts va

Ramka uchun 800000/5 = 160000PCLK.

480 x 272 displeyda odatda gorizontal davr 525 soatni tashkil etadi va vertikal davr hisoblanadi

286 liniya. Bir oz izlanishlar shuni ko'rsatadiki, 548 x 292 o'lchamli 160016 soatlar,

maqsadga juda yaqin. Shunday qilib REG_HCYCLE = 548 va REG_VCYCLE = 292 displey bilan

chastota deyarli to'liq 60 Gts. Boshqa ro'yxatga olish parametrlarini to'g'ridan-to'g'ri sozlash mumkin

ko'rsatkich panelidagi ma'lumotlar sahifasi.


2.2.5 Dastlabki tartibda

Ushbu bo'lim turli stsenariydagi boshlash tartibini ta'riflaydi.

 Yuklab olish paytida ishga tushirish tartibini:

MCU SPI soatidan 11MHz dan oshmasligi kerak

2. "CLKEXT" komandasini FT800-ga yuboring

3. FT800-ga soatni yoqish uchun "ACTIVE" buyruqlar domeni komandasini yuboring.

REG_PCLK tashqari video vaqtni ro'yxatga olishlarni sozlash

5. Birinchi ekran ro'yxatini yozing

6. REG_DLSWAP yozing, FT800 displey ro'yxatini darhol o'zgartiradi

7. Displeyni aks ettirish uchun orqa nuri nazoratini yoqing

8. REG_PCLK yozing, video chiqishi birinchi ekran ro'yxatidan boshlanadi

9. MCU SPI soatidan 30MHz dan oshmasligi kerak


MCU_SPI_CLK_Freq (<11mhz); mcu="" spi="" soatidan="" 11mhzdan="" kamroq="">

host_command (CLKEXT); // buyruqni "CLKEXT" ga FT800-ga yuboring

host_command (ACTIVE); // FT800 serveriga "ACTIVE" buyrug'i yuboring

/ * Displey registrlarini sozlash - WQVGA o'lchamlari uchun namoyish * /

wr16 (REG_HCYCLE, 548);

wr16 (REG_HOFFSET, 43);

wr16 (REG_HSYNC0, 0);

wr16 (REG_HSYNC1, 41);

wr16 (REG_VCYCLE, 292);

wr16 (REG_VOFFSET, 12);

wr16 (REG_VSYNC0, 0);

wr16 (REG_VSYNC1, 10);

wr8 (REG_SWIZZLE, 0);

wr8 (REG_PCLK_POL, 1);

wr8 (REG_CSPREAD, 1);

wr16 (REG_HSIZE, 480);

wr16 (REG_VSIZE, 272);

/ * birinchi ekran ro'yxatini yozish * /

wr32 (RAM_DL + 0, CLEAR_COLOR_RGB (0,0,0));

wr32 (RAM_DL + 4, CLEAR (1,1,1));

wr32 (RAM_DL + 8, DISPLAY ());

wr8 (REG_DLSWAP, DLSWAP_FRAME); // displey ro'yxatini almashtirish

wr8 (REG_GPIO_DIR, 0x80 | Ft_Gpu_Hal_Rd8 (phost, REG_GPIO_DIR));

wr8 (REG_GPIO, 0x080 | Ft_Gpu_Hal_Rd8 (phost, REG_GPIO)); // displey bitini yoqish

wr8 (REG_PCLK, 5); // ushbu displey LCDda paydo bo'lganidan keyin

MCU_SPI_CLK_Freq (<30mhz); mcu="" spi="" soatidan="">

Kod snippet 1 Boshlash tartibini



 PD_N pinidan foydalanib Power Down dan boshlash tartibini:

1. PD_N pinini yuqori darajada harakatlantiring

2. kamida 20ms kuting

3. 1 dan 9 gacha bo'lgan bosqichlarda "Boot UP paytida boshlash tartibini" bajaring

 Kutish rejimidan dastlabki tartiblash:

1. FT800-ga soatni yoqish uchun "ACTIVE" buyruqni jo'natish

2. kamida 20ms kuting

3. 5 dan 8 gacha bo'lgan "Boot Up During Initialization Sequence" -ni bajaring

Kutish holatida ishga tushirish tartibi:

"Kutish rejimidan ishga tushirish tartibini" ko'rsatilgan barcha bosqichlarni bajaring

2-qadamda kamida 20msni kutishdan tashqari.

Eslatma: Quvvat usullari haqida ma'lumot olish uchun FT800 ma'lumotlar sahifasiga murojaat qiling. Bo'lim 2.3 ga qarang

ovozni o'chirish va qayta tiklash jarayonida ovozni boshqarish.


2.3 Ovoz Synthesizer

Ksilofonda C8 ni ijro etish uchun namuna kodi:

wr8 (REG_VOL_SOUND, 0xFF); // tovushni maksimal darajaga sozlang

wr16 (REG_SOUND, (0x6C < 8)="" |=""> // Ksilofonda C8 MIDI yozuvi

wr8 (REG_PLAY, 1); // ovozni ijro eting

Kod snippet 2 ovoz sintezatori ksilofonda C8 ni o'ynaydi


Ovozli o'yin holatini tekshirish uchun namuna kodi:

Sound_status = rd8 (REG_PLAY); // 1-o'yin davom etmoqda, 0-o'yin tugadi

Kod snippet 3 ovoz sintezatori tovush chiqarish holatini tekshiradi



Ovozni to'xtatish uchun namuna kodi:

wr16 (REG_SOUND, 0x0); // sukunatni ovozli deb o'zgartirish

wr8 (REG_PLAY, 1);

Sound_status = rd8 (REG_PLAY); // 1-o'yin davom etmoqda, 0-o'yin tugadi

Kod snippet 4 ovozli sintezator ovozni chalishni to'xtatadi


Qayta tiklash yoki kuch holatidagi o'zgarishlarda ovozli tovushni chiqarib yuborishning oldini olish uchun "ovozsiz" ovozni ishga tushiring,

va uning tugashini kuting (REG_PLAY qiymati bo'lsa, ovozli o'yinni bajarish

0 dan). Bu chiqish qiymati 0 darajasiga o'rnatadi. Qayta ishga tushirilganda, ovoz qidiruvi qayta ishlaydi

Chiqarishni yarim bosqich darajasiga etkazish uchun "ovoz chiqarib" ovozi.

Eslatma: Ovoz synthesizer va ovoz haqida qo'shimcha ma'lumot olish uchun FT800 ma'lumotlar sahifasiga murojaat qiling

ijro etish.


2.4 Ovozni qayta tinglash

FT800 uch xil ovoz formatini qo'llab-quvvatlaydi: 4 bit IMA ADPCM, 8 bit imzolangan PCM, 8 bitli. IMA ADPCM formati uchun, baytga buyurtma bering: bir baytda, birinchi namunada

(4 bit) bitdan 0 dan bitgacha 3, ikkinchi namuna (4 bit) esa topiladi

4 bitdan bitgacha 7 bit.

FT800 RAM-da ishlaydigan audio ma'lumot uchun FT800 start manzilini talab qiladi

REG_PLAYBACK_START 64 bit (8 bayt) hizalanadi. Bundan tashqari, audio uzunligi

REG_PLAYBACK_LENGTH tomonidan belgilangan ma'lumotlar 64 bit (8 bayt) hizalanmalı bo'lishi kerak.

Audio ma'lumotlarning qanday oynanacağını o'rganish uchun quyidagi kodni tekshiring:

wr8 (REG_VOL_PB, 0xFF); // audio tinglash ovozini sozlash

wr32 (REG_PLAYBACK_START, 0); // audio bufer boshlanish manzilini sozlash

wr32 (REG_PLAYBACK_LENGTH, 100 * 1024); // audio bufer uzunligini sozlash

wr16 (REG_PLAYBACK_FREQ, 44100); // ovozli namuna olish chastotasini sozlash

wr8 (REG_PLAYBACK_FORMAT, ULAW_SAMPLES); // audio formatini sozlash

wr8 (REG_PLAYBACK_LOOP, 0); // bir marta yoki doimiy ravishda ijro etilishini sozlash

wr8 (REG_PLAYBACK_PLAY, 1); // tovushni qayta boshlash

Kod parchasi 5 Ovozni qayta tinglash



AudioPlay_Status = rd8 (REG_PLAYBACK_PLAY); // 1-audio ijro etish davom etmoqda,

0-tovushli ijro tugallandi

Kod snippet 6 Ovozni qayta tinglash holatini tekshiring

wr32 (REG_PLAYBACK_LENGTH, 0); // ijro etish uzunligini 0 ga sozlang

wr8 (REG_PLAYBACK_PLAY, 1); // audio tinglashni boshlash

Kod parchasi 7 Ovozni qayta tinglashni to'xtatish


2.5 Grafik usuli

Ushbu bo'lim grafik xususiyatlarini ta'riflaydi va bir nechta misolni oladi.

2.5.1 Ishga kirishish

Ushbu qisqa misolda qizil nuqta bilan "FTDI" yozuvi bilan ekran yaratiladi.

image

Ekranni chizish uchun kod:

wr32 (RAM_DL + 0, CLEAR (1, 1, 1)); // aniq ekran

wr32 (RAM_DL + 4, BEGIN (BITMAPS)); // bitmaplarni chizishni boshlash

wr32 (RAM_DL + 8, VERTEX2II (220, 110, 31, 'F')); // harflar fonida 31 ascii F

wr32 (RAM_DL + 12, VERTEX2II (244, 110, 31, 'T')); // ascii t

wr32 (RAM_DL + 16, VERTEX2II (270, 110, 31, D)); // ascii D

wr32 (RAM_DL + 20, VERTEX2II (299, 110, 31, 'I')); // ascii I

wr32 (RAM_DL + 24, END ());

wr32 (RAM_DL + 28, COLOR_RGB (160, 22, 22)); rangni qizilga almashtirish

wr32 (RAM_DL + 32, POINT_SIZE (320)); // nuqta o'lchamini 20 pikselgacha sozlang

radius

wr32 (RAM_DL + 36, BEGIN (POINTS)); // chizilgan nuqtalarini boshlang

wr32 (RAM_DL + 40, VERTEX2II (192, 133, 0, 0)); // qizil nuqta

wr32 (RAM_DL + 44, END ());

wr32 (RAM_DL + 48, DISPLAY ()); // tasvirni ko'rsatish

Kod snippet 8 Ishga kirishish


Yuqoridagi chizilgan buyruqlar RAM ro'yxatiga kiritilgandan so'ng, ro'yxatdan o'ting

Yangi ro'yxatni faollashtirish uchun REG_DLSWAP 0x02 ga o'rnatilishi kerak

Keyingi freymlarni yangilang.

Eslatma:

 Ko'rsatkich ro'yxati har doim RAM_DL manzilida boshlanadi

 Har bir buyrug'i 32 bit kenglikda bo'lgani uchun, manzil har doim 4 (bayt) bilan ortadi.

 CLEAR buyrug'ini boshqa chizmadan oldin foydalanish tavsiya etiladi

FT800 grafik dvigatelini ma'lum bir holatga qo'yish uchun ishlatiladi.

Ko'rsatkichlar ro'yxati oxirida har doim DISPLAY buyrug'i bilan belgilanadi

2.5.2 Koordinatalar rejasi

Quyidagi rasmda grafik koordinata tekisligi va uning ko'rinadigan maydoni ko'rsatilgan.

Joriy X va Y koordinatalari pikselli aniqlikdagi -1024 dan 1023 gacha, ya'ni

1/16 soniyagacha 16383 dan 16/4 pikselgacha aniqlikda.


image

2.5.3 Tasvir naqshlari

Chizma uchun umumiy naqsh:

 BEGIN ibtidoiy turlari bilan

 Ibtidoiy joylashuvni belgilaydigan bir yoki bir nechta verticesni kiriting

ekrani

 ibtidoiy oxirini belgilash uchun END tugmasi

(Izoh: ko'pgina misollarda END buyrug'i aniq ko'rsatilgan emas)

Grafik qidiruvi qo'llab-quvvatlaydigan ibtidoiy turlari:

 BITMAPS - turli rangli formatlarda - to'rtburchaklar pikselli massivlar

 POINTS - takrorlanmaydigan nuqtalar, nuqta radiusi 1-256 piksel

 LINES - bo'yinbo'yi yo'nalishdagi chiziqlar, kengligi 0 dan 4095 gacha bo'lgan piksel birliklari 1/16.

(kengligi chegara markazidan tortib)

 LINE_STRIP - taglikka cho'zilgan chiziqlarga qarshi chiziqlar

 RECTS - burchakli burchakli burchakli to'rtburchaklar, burchaklarning egriliklarini sozlash mumkin

LINE_WIDTH dan foydalanib.

 EDGE_STRIP_A / B / L / R - chekka chiziqlar

Misollar


Turli radiusdagi ballarni 5 xil rangdan 13 pikselga qadar turli xil ranglarda torting:

dl (COLOR_RGB (128, 0, 0));

dl (POINT_SIZE (5 * 16));

dl (BEGIN (POINTS));

dl (VERTEX2F (30 * 16,17 * 16));

dl (COLOR_RGB (0, 128, 0));

dl (POINT_SIZE (8 * 16));

dl (VERTEX2F (90 * 16, 17 * 16));

dl (COLOR_RGB (0, 0, 128));

dl (POINT_SIZE (10 * 16));

dl (VERTEX2F (30 * 16, 51 * 16));

dl (COLOR_RGB (128, 128, 0));

dl (POINT_SIZE (13 * 16));

dl (VERTEX2F (90 * 16, 51 * 16));

image

VERTEX2F buyrug'i doira markazining joylashuvini beradi.

Turli xil rangdagi (chiziq kengligi.) 2 pikseldan 6 pikselga qadar turli o'lchamdagi chiziqlar chizish

chiziqning o'rtasidan chegara qadar):

dl (COLOR_RGB (128, 0, 0));

dl (LINE_WIDTH (2 * 16));

dl (BEGIN (LINES));

dl (VERTEX2F (30 * 16,38 * 16));

dl (VERTEX2F (30 * 16,63 * 16));

dl (COLOR_RGB (0, 128, 0));

dl (LINE_WIDTH (4 * 16));

dl (VERTEX2F (60 * 16,25 * 16));

dl (VERTEX2F (60 * 16,63 * 16));

dl (COLOR_RGB (128, 128, 0));

dl (LINE_WIDTH (6 * 16));

dl (VERTEX2F (90 * 16, 13 * 16));

dl (VERTEX2F (90 * 16, 63 * 16));

VERTEX2F buyruqlar chiziqning boshlash va tugatish nuqtalarini aniqlash uchun juft bo'lib mavjud.



5x25, 10x38 va 15x50 o'lchamlari bilan to'rtburchak chizish (chiziq kengligi kattaligi qo'llaniladi

burchak egrisi uchun LINE_WIDTH piksel qo'shimcha ravishda ikkala tomonga ham qo'shiladi

to'rtburchak o'lchamlari):

image

dl (COLOR_RGB (128, 0, 0));

dl (LINE_WIDTH (1 * 16));

dl (BEGIN (RECTS));

dl (VERTEX2F (28 * 16,38 * 16));

dl (VERTEX2F (33 * 16,63 * 16));

dl (COLOR_RGB (0, 128, 0));

dl (LINE_WIDTH (5 * 16));

dl (VERTEX2F (50 * 16,25 * 16));

dl (VERTEX2F (60 * 16,63 * 16));

dl (COLOR_RGB (128, 128, 0));

dl (LINE_WIDTH (10 * 16));

dl (VERTEX2F (83 * 16, 13 * 16));

dl (VERTEX2F (98 * 16, 63 * 16));

VERTEX2F buyruqlar juftlarni ikkita yuqori va pastki o'ng burchaklarini belgilaydi

to'rtburchak.

image

image

image

image

2.5.4 Ko'rsatkichlar ro'yxatini yozish

Wr32 () bilan ekran ro'yxatini yozishni yozish vaqt talab qiluvchi va xatolarga chidamli, shuning uchun a

funktsiyasi ishlatilishi mumkin:

image

image

image

COLOR_RGB buyrug'i bitmap ranglarini o'zgartiradigan joriy chizilgan rangini o'zgartiradi.

COLOR_A buyrug'i shaffoflikni o'zgartirib, joriy chizilgan alfani o'zgartiradi

chizma chizig'i: 0 ning alfasi to'liq shaffof va 255 gacha alfa degan ma'noni anglatadi

shaffof emas. Bu erda 150 qiymat shaffof ta'sir ko'rsatadi.

image

2.5.7 VERTEX2II va VERTEX2F

Yuqoridagi VERTEX2II buyrug'i faqat ijobiy ekran koordinatalarini beradi. Agar

bitmap qisman o'chirilgan ekranda, masalan, ekrandagi trekka o'tish vaqtida, keyin kerak bo'ladi

salbiy ekran koordinatalarini belgilang. VERTEX2F buyrug'i salbiy ta'sir ko'rsatadi

koordinatalari. Bundan tashqari, fraktsiya koordinatalarini beradi, chunki u displey (x, y) ni belgilaydi

1/16 qismli piksel birliklari.

Misol uchun, VERTEX2F yordamida bir xil bitmapni ekran holatida (-10, -10) chizish:

image

image

image

2.5.9 ishlash

Grafik dvigatelida hech qanday ramka buferi mavjud emas: har birini yaratish uchun dinamik kompozitsiondan foydalaniladi

ko'rish chizig'ini ko'rish paytida. Shuning uchun, cheklangan miqdordagi vaqt mavjud

har bir chiziqni chizish. Bu vaqt skanerlash parametrlariga (REG_PCLK va

REG_HCYCLE), lekin hech qachon kamida 2048 ichki soat aylanishiga ega.

Ba'zi ishlash chegaralari:

 Ko'rsatkichlar ro'yxati uzunligi 2048 dan kam bo'lishi kerak

grafik vosita displey ro'yxatini har bir soat uchun bitta buyruq oladi.

 Grafik qidiruvi ishining pikselli piksellari har bir soat uchun 4 piksel

2048 displeyli buyruqlar bilan chizilgan jami piksellarning ishlashi kerak

8192 dan kam.

 Ba'zi bitmap shakllari uchun chizilgan tezligi soatiga 1 piksel. Bular

TEXT8X8, TEXTVGA va PALETTED.

 Bilinear filtrlangan piksellar uchun chizilgan tezligi soatiga ¼ pixelga kamayadi.

Ko'pgina bitmap formatlari soat boshiga 1 piksel va yuqoridagi formatlarni chizishadi

(TEXT8X8, TEXTVGA va PALETTED) har 4 soatda 1 pikselda chizilgan.

image