הבית > חֲדָשׁוֹת > תוכן

דוגמה תזמון

Apr 26, 2019

2.2.4 תזמון דוגמה: 480x272 ב 60Hz

עבור תצוגה מעדכן ב 60Hz, יש 48000000/60 = 800000 שעונים מהירים לכל מסגרת.

הגדרת מחלק PCLK REG_PCLK ל 5 נותן תדר PCLK של 9.6 MHz ו

800000/5 = 160000PCLKs לכל מסגרת.

עבור תצוגה של 480 x 272, התקופה האופקית האופיינית היא 525 שעונים, והזמן האנכי הוא

286 קווים. קצת חיפוש מראה כי 548 x 292 גודל נותן תקופה של 160016 שעונים,

קרוב מאוד ליעד. אז עם REG_HCYCLE = 548 ו REG_VCYCLE = 292 את התצוגה

תדר הוא כמעט 60Hz בדיוק. ניתן להגדיר את הגדרות הרישום האחרות ישירות מתוך

גיליון נתונים של לוח הצג.


2.2.5 אתחול רצף

סעיף זה מתאר את רצף האתחול בתרחיש אחר.

 אתחול רצף במהלך אתחול:

.1 השתמש בשעון MCU SPI לא יותר מ - 11MHz

2. שלח פקודת מארח "CLKEXT" ל FT800

3. שלח פקודת מארח "Active" כדי לאפשר את השעון ל- FT800.

4. הגדר את תזמוני תזמון הווידאו, למעט REG_PCLK

5. כתוב את רשימת התצוגה הראשונה

6. כתוב REG_DLSWAP, FT800 רשימת החלפות לתצוגה מיד

.7 הפעל בקרת תאורה אחורית לתצוגה

8. כתוב REG_PCLK, פלט וידאו מתחיל עם רשימת התצוגה הראשונה

.9 השתמש בשעון MCU SPI לא יותר מ 30MHz


MCU_SPI_CLK_Freq (<11mhz); השתמש="" בשעון="" spi="" של="" mcu="" פחות="" מ="" -11="">

host_command (CLKEXT); / שלח פקודה אל "CLKEXT" ל FT800

host_command (Active); // שלח הפקודה host "Active" ל- FT800

/ * הגדרת תצוגת רשומות - הדגמה עבור רזולוציה WQVGA * /

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);

/ * לכתוב רשימת התצוגה הראשונה * /

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); // רשימת התצוגה להחליף

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

wr8 (REG_GPIO, 0x080 | Ft_Gpu_Hal_Rd8 (phost, REG_GPIO)); // הפעל bit bit

wr8 (REG_PCLK, 5); // לאחר תצוגה זו נראית על גבי המסך

MCU_SPI_CLK_Freq (<30mhz); השתמש="" בשעון="" spi="" של="" mcu="" עד="">

קטע קוד 1 רצף האתחול



 אתחול רצף ממקור מתח באמצעות סיכה PD_N:

1. כונן את סיכה PD_N גבוה

2. המתן עד 20ms לפחות

3. בצע "רצף אתחול במהלך אתחול UP" מ שלבים 1 עד 9

 אתחול רצף ממצב שינה:

1. שלח פקודת מארח "פעיל" כדי לאפשר את השעון ל- FT800

2. המתן עד 20ms לפחות

3. בצע "רצף אתחול במהלך אתחול למעלה" מ שלבים 5 עד 8

 אתחול רצף ממצב המתנה:

בצע את כל השלבים הנזכרים בסעיף "אתחול רצף ממצב שינה"

למעט המתנה של לפחות 20ms בשלב 2.

הערה: עיין בגיליון הנתונים FT800 לקבלת מידע אודות מצבי צריכת חשמל. עקוב אחר סעיף 2.3 עבור

ניהול אודיו במהלך כוח למטה ולאפס פעולות.


2.3 סינתיסייזר קול

קוד לדוגמה לנגן C8 על קסילופון:

wr8 (REG_VOL_SOUND, 0xFF); / / להגדיר את עוצמת הקול למקסימום

wr16 (REG_SOUND, (0x6C < 8)="" |=""> / C8 MIDI הערה על קסילופון

wr8 (REG_PLAY, 1); / / להשמיע את הצליל

קוד קטע 2 סינתיסייזר קול לשחק C8 על קסילופון


קוד לדוגמה כדי לבדוק את הסטטוס של הפעלת קול:

Sound_status = rd8 (REG_PLAY): // 1-play קורה, 0-Play הסתיים

קטע קוד 3 סינתיסייזר קול לבדוק את המצב של משחק קול



קוד לדוגמה כדי להפסיק את הפעלת הקול:

wr16 (REG_SOUND, 0x0); / / הגדר שתיקה כצליל שיש להשמיע

wr8 (REG_PLAY, 1); // נגן קול

Sound_status = rd8 (REG_PLAY): // 1-play קורה, 0-Play הסתיים

קטע 4 סינתיסייזר קול להפסיק לנגן צליל


כדי להימנע מצליל פופ שמע על מנת לאפס או לשנות את מצב צריכת החשמל, הפעילו צליל "אילם"

ולחכות להשלמה (השלמת השמעת קול היא כאשר REG_PLAY מכיל ערך

של 0). פעולה זו מגדירה את ערך הפלט לרמה 0. על אתחול מחדש, מנוע השמע מנגן את

"להשתיק" קול כדי להניע את הפלט לרמת חצי הדרך.

הערה: עיין בגיליון הנתונים FT800 לקבלת מידע נוסף על סינתיסייזר קול ושמע

השמעה.


2.4 השמעת אודיו

FT800 תומך שלושה סוגים של פורמט אודיו: 4 Bit IMA ADPCM, 8 סיביות חתום PCM, 8 bit uLaw. עבור פורמט IMA ADPCM, שים לב לסדר הבתים: בתוך בית אחד, לדוגמה הראשונה

(4 סיביות) יאתר מקטע 0 עד 3, ואילו המדגם השני (4 סיביות) יאתר

bit 4 ל 7 bit.

לקבלת נתוני שמע ב- FT800 RAM לנגן, FT800 דורש את כתובת ההתחלה ב

REG_PLAYBACK_START להיות מיושר 64 סיביות (8 בתים). בנוסף, אורך השמע

הנתונים שצוינו על ידי REG_PLAYBACK_LENGTH חייבים להיות מיושרים ל- 64 סיביות (8 בתים).

כדי ללמוד כיצד להשמיע את נתוני השמע, בדוק את קוד הדוגמה שלהלן:

wr8 (REG_VOL_PB, 0xFF); / / הגדרת עוצמת השמעת שמע

wr32 (REG_PLAYBACK_START, 0); / / להגדיר את כתובת האודיו ההתחלה

wr32 (REG_PLAYBACK_LENGTH, 100 * 1024); / / הגדרת אורך חיץ אודיו

wr16 (REG_PLAYBACK_FREQ, 44100); / / הגדרת תדר הדגימה אודיו

wr8 (REG_PLAYBACK_FORMAT, ULAW_SAMPLES); / / להגדיר פורמט אודיו

wr8 (REG_PLAYBACK_LOOP, 0); // להגדיר פעם או השמעה רציפה

wr8 (REG_PLAYBACK_PLAY, 1); / / הפעל את השמעת השמע

קטע קוד 5 השמעת אודיו



AudioPlay_Status = rd8 (REG_PLAYBACK_PLAY); / 1 השמעת אודיו קורה,

השמעת 0-Audio הסתיימה

קטע קוד 6 בדוק את מצב השמעת השמע

wr32 (REG_PLAYBACK_LENGTH, 0); / / להגדיר את אורך ההשמעה ל 0

wr8 (REG_PLAYBACK_PLAY, 1); / הפעלת הפעלת שמע

קטע הקוד 7 עצור את הפעלת השמע


2.5 גרסאות גרפיקה

סעיף זה מתאר תכונות גרפיקה ולוקח כמה דוגמאות.

2.5.1 תחילת העבודה

דוגמה קצרה זו יוצרת מסך עם הטקסט "FTDI" עליו, עם נקודה אדומה.

image

הקוד כדי לצייר את המסך הוא:

wr32 (RAM_DL + 0, CLEAR (1, 1, 1)); // מסך נקי

wr32 (RAM_DL + 4, BEGIN (BITMAPS)); / / להתחיל לצייר מפות סיביות

wr32 (RAM_DL + 8, VERTEX2II (220, 110, 31, 'F')); // ascii F בגופן 31

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)); / / לשנות צבע אדום

wr32 (RAM_DL + 32, POINT_SIZE (320)); / / set גודל נקודה ל 20 פיקסלים ב

רדיוס

wr32 (RAM_DL + 36, BEGIN (נקודות)); / / להתחיל נקודות ציור

wr32 (RAM_DL + 40, VERTEX2II (192, 133, 0, 0)); // נקודה אדומה

wr32 (RAM_DL + 44, END ());

wr32 (RAM_DL + 48, DISPLAY ()); // להציג את התמונה

קטע הקוד 8 תחילת העבודה


לאחר פקודות הציור הנ"ל נטענים לתוך רשימת התצוגה RAM, להירשם

יש להגדיר את REG_DLSWAP כ- 0x02 כדי להפוך את רשימת התצוגה החדשה לזמינה

על רענון מסגרת הבאה.

הערה:

 רשימת התצוגה תמיד מתחילה בכתובת RAM_DL

 כתובת תמיד עולה על 4 (בתים) כמו כל פקודה היא רוחב 32 סיביות.

 מומלץ להשתמש בפקודה CLEAR לפני כל ציור אחר

פעולה, על מנת לשים מנוע גרפיקה FT800 במצב ידוע.

 סוף רשימת התצוגה מסומן תמיד עם הפקודה DISPLAY

2.5.2 מטוס קואורדינטות

האיור שלהלן ממחיש את משטח הקואורדינטות הגרפיות ואת האזור הנראה לעין.

הקואורדינטות X ו- Y הנכונות נע בין 1024 ל -1023 בפיקסלים, כלומר, מ

-16384 עד 16383 בדייקנות 1/16 פיקסלים.


image

2.5.3 תבנית רישום

הדפוס הכללי לציור הוא:

 התחילו עם אחד הטיפוסים הפרימיטיביים

 קלט קודקוד אחד או יותר, המציינים את מיקום הפרימיטיבי

המסך

 סוף לסמן את קצה הפרימיטיבי

(הערה: בדוגמאות רבות הפקודה END אינה מופיעה במפורש)

סוגי פרימיטיבי כי תמיכה מנוע גרפיקה הם:

 BITMAPS - מערכי פיקסל מלבניים, בתבניות צבע שונות

 נקודות - נקודות נגד החלקה, רדיוס הנקודה הוא 1-256 פיקסלים

 קווים - קווים אנטי אליאסד, עם רוחב מ 0 עד 4095 1 / 16th של יחידות פיקסל.

(רוחב הוא ממרכז הקו לגבול)

 LINE_STRIP - קווים נגד החייזרים, מחוברים בין ראש לזנב

 RECTS - מלבנים עגולים, פינות פינות, ניתן לכוונן את הפינות

באמצעות LINE_WIDTH.

 EDGE_STRIP_A / B / L / R - רצועות קצה

דוגמאות


צייר נקודות ברדיוס משתנה מ -5 פיקסלים ל -13 פיקסלים בצבעים שונים:

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

dl (POINT_SIZE (5 * 16));

dl (BEGIN (נקודות));

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 נותנת את המיקום של מרכז המעגל.

צייר קווים בגדלים שונים מ -2 פיקסלים ל -6 פיקסלים בצבעים שונים (רוחב קו

גודל הוא ממרכז הקו עד הגבול):

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 נמצאות בזוגות כדי להגדיר את נקודת ההתחלה והסיום של הקו.



צייר מלבן עם גודל של 5x25, 10x38 ו 15x50 מידות (גודל רוחב קו משמש

עבור עקמומיות פינה, LINE_WIDTH פיקסלים מתווספים לשני הכיוונים בנוסף

מידות מלבניות):

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 הן בזוגות כדי להגדיר את פינות השמאלית העליונה והתחתונה של

המלבן.

image

image

image

image

2.5.4 כתיבת רשימות תצוגה

כתיבת ערכי רשימת תצוגות עם wr32 () היא זמן רב ונושאת שגיאות, ולכן במקום a

ניתן להשתמש בפונקציה:

image

image

image

הפקודה COLOR_RGB משנה את צבע הציור הנוכחי, שמצייר את מפת הסיביות.

הפקודה COLOR_A משנה את אלפא הציור הנוכחי, משנה את השקיפות

של הציור: אלפא של 0 פירושו שקוף לחלוטין ואלפא של 255 הוא מלא

אטום. כאן ערך של 150 נותן אפקט שקוף חלקית.

image

2.5.7 VERTEX2II ו - VERTEX2F

הפקודה VERTEX2II בשימוש לעיל מאפשרת רק קואורדינטות מסך חיוביות. אם

מפת סיביות היא חלקית מחוץ למסך, למשל במהלך גלילה המסך, ואז יש צורך

ציין קואורדינטות מסך שליליות. הפקודה VERTEX2F מאפשרת שלילית

קואורדינטות. זה גם מאפשר קואורדינטות השבר, כי זה מציין את המסך (x, y) ב

יחידות של 1/16 של פיקסל.

לדוגמה, ציור מפת סיביות זהה במיקום המסך (-10, -10) באמצעות VERTEX2F:

image

image

image

2.5.9 ביצועים

מנוע גרפיקה אין מסגרת חיץ: הוא משתמש compositing דינמי לבנות כל אחד

קו תצוגה במהלך סריקה החוצה. בגלל זה, יש כמות מוגבלת של זמן זמין

לצייר כל שורה. הפעם תלוי בפרמטרים לסרוק החוצה (REG_PCLK ו

REG_HCYCLE) אבל הוא לעולם לא פחות מ 2048 מחזורים השעון הפנימי.

מספר מגבלות ביצועים:

 אורך רשימת התצוגה חייב להיות קטן מ - 2048 הוראות, כיוון ש

מנוע גרפיקה מביא רשימת פקודות אחת לכל שעון - -.

 ביצועי הפיקסלים של הפלטפורמה הגרפית הם 4 פיקסלים לשעה, עבור כל אחד

שורה עם 2048 לפקודות להציג את סך פיקסלים הביצועים נמשך חייב להיות

פחות מ 8192.

 עבור כמה תבניות מפת סיביות, קצב הציור הוא 1 פיקסל לשעון. אלו הם

TEXT8X8, TEXTVGA ו PALETTED.

 עבור פיקסלים מסוננים bilinear, קצב הציור מצטמצם ל ¼ פיקסל לשעון.

רוב פורמטים של bitmap לצייר ב 1 פיקסל לשעון, ואת הפורמטים לעיל

(TEXT8X8, TEXTVGA ו PALETTED) לצייר ב 1 פיקסל כל 4 שעונים.

image