Метою лабораторної роботи є робота з UART портом і світлодіодами, що розміщені на налагоджувальній платі TMDSEVM6678L EVM та навчитися підключати необхідні бібліотеки до проекту.
TMDXEVM6678L - високоефективна, автономна платформа розробки, яка дозволяє користувачам оцінювати і розробляти програми для цифрових сигнальних процесорів (ЦСП) TMS320C6678 Texas Instruments. Плата (EVM) є еталонною платформою для розробки апаратних засобів на базі ЦСП TMS320C6678.
Доступні схеми, приклади коду і вказівки до їх застосування полегшують процес розробки апаратних засобів і скорочують час виходу продукту на ринок.
Функціональна блок-схема TMDXEVM6678L показана на рис:
Виконання лабораторної роботи
Необхідно створити проект в CCS для виводу текстової інформації через UART порт і блимання світлодіодами на платі EVM. Програма запускається із спільно використовуваної пам'яті (shared memory) на EVM і не використовує зовнішню пам'ять DDR.
Примітка: Зверніть увагу, що для виконання приведеної далі програми потрібна бібліотека платформи (The Platform Library). Бібліотека платформи являє собою програмний шар, написаний поверх CSL. Він забезпечує інтерфейс API для всіх платформ. Бібліотека покликана допомогти користувачеві швидко писати програмне забезпечення для платформ, приховуючи деталі плати від користувача, та йде в комплекті Processor-SDK RTOS.
Створення проекту та завантаження програми
Перед підключенням плати встановіть режим завантаження перемикачами на платі EVM «No Boot» (ЛР2).
Інструкції по створенню проекту:
1. Запустіть CCS.
2. Створіть проект File->New->CCS Project і в поле імені проекту введіть led_play.
3. Введіть наступні налаштування:
4. У вікні проекту Project templates виберіть пустий проект (Empty Project). Нитисніть Finish.
5. Створіть вихідний файл File->New->Source File, введіть ім'я файлу led_play.c.
В редакторі Eclipse повинен відкритися порожній файл led_play.c. Вставте наступний вихідний код в редактор.
//***********************************************************************
#include <cerrno>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ti\platform\platform.h"
#include "ti\platform\resource_mgr.h"
/* OSAL functions for Platform Library */
uint8_t *Osal_platformMalloc (uint32_t num_bytes, uint32_t alignment)
{
return malloc(num_bytes);
}
void Osal_platformFree (uint8_t *dataPtr, uint32_t num_bytes)
{
/* Free up the memory */
if (dataPtr)
{
free(dataPtr);
}
}
void Osal_platformSpiCsEnter(void)
{
/* Get the hardware semaphore.
*
* Acquire Multi core CPPI synchronization lock
*/
while ((CSL_semAcquireDirect (PLATFORM_SPI_HW_SEM)) == 0);
return;
}
void Osal_platformSpiCsExit (void)
{
/* Release the hardware semaphore
*
* Release multi-core lock.
*/
CSL_semReleaseSemaphore (PLATFORM_SPI_HW_SEM);
return;
}
void main(void) {
platform_init_flags init_flags;
platform_init_config init_config;
platform_info p_info;
uint32_t led_no = 0;
char message[] = "\r\nHello World.....\r\n";
uint32_t length = strlen((char *)message);
uint32_t i;
/* Initialize platform with default values */
memset(&init_flags, 0x01, sizeof(platform_init_flags));
memset(&init_config, 0, sizeof(platform_init_config));
if (platform_init(&init_flags, &init_config) != Platform_EOK) {
return;
}
platform_uart_init();
platform_uart_set_baudrate(115200);
platform_get_info(&p_info);
/* Write to the UART */
for (i = 0; i < length; i++) {
if (platform_uart_write(message[i]) != Platform_EOK) {
return;
}
}
/* Play forever */
while(1) {
platform_led(led_no, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);
platform_delay(300000);// usecs Delay value in micro-seconds
platform_led(led_no, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
led_no = (++led_no) % p_info.led[PLATFORM_USER_LED_CLASS].count;
}
}
//********************************************************************
6. Також створіть командний сценарій компонувальника (ЛР1).
Виберіть File->New->File, введіть ім'я файлу led_play.cmd і натисніть Finish.
Відкриється led_play.cmd файл в редакторі, вставте наступні команди лінкеру
*************************************************************************
-c
-heap 0x41000
-stack 0xa000
/* Memory Map */
MEMORY
{
L1PSRAM (RWX) : org = 0x0E00000, len = 0x7FFF
L1DSRAM (RWX) : org = 0x0F00000, len = 0x7FFF
L2SRAM (RWX) : org = 0x0800000, len = 0x080000
MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000
DDR3 (RWX) : org = 0x80000000,len = 0x10000000
}
SECTIONS
{
.csl_vect > MSMCSRAM
.text > MSMCSRAM
GROUP (NEAR_DP)
{
.neardata
.rodata
.bss
} load > MSMCSRAM
.stack > MSMCSRAM
.cinit > MSMCSRAM
.cio > MSMCSRAM
.const > MSMCSRAM
.data > MSMCSRAM
.switch > MSMCSRAM
.sysmem > MSMCSRAM
.far > MSMCSRAM
.testMem > MSMCSRAM
.fardata > MSMCSRAM
platform_lib > MSMCSRAM
}
**************************************************************************
7. Перед тим, як побудувати проект, нам потрібно буде прописати шляхи до файлів бібліотеки платформи (Platform Library).
8. Виберіть Project->Properties, має відкритися вікно властивостей проекту led_play. Виберіть Include Options і додайте наступний шлях в «Add dir to #include search path...»
"C:\ti\pdk_Cхххх_1_0_0_xx\packages". Де хххх - версія бібліотеки.
9. Виберіть File Search Path з секції C6000 Linker. Додайте в секцію Include library файл ti.platform.evm6678l.ae66.
Зверніть увагу! Щоб його знайти потрібно у вікні вибрати формат *.*
10. Додайтете шлях в секцію Add <dir> to library
"C:\ti\pdk_Cххххх_1_0_0_xx\packages\ti\platform\evmcххххl\platform_lib\lib\debug"
11. В секції CCS properties -> Build -> C6000 compiler -> Advanced options -> Predefined Symbols -> Pre-define NAME
додайте ім’я SOC_C6678
12. Побудуйте проект та загрузіть програму в процесор. Для запуску виберіть ядро core 0 (C66XX_0).
13. Спостерігайте мерехтіння світлодіодів Debug LEDs та вивід рядка "Hello World....." в термінал через UART порт.
Примітка. На платі TMDXEVM6678L встановлено 7 системних світлодіодів. Їх призначення та розташування показано на рис.
Завдання
1. Проаналізуйте код програми.
2. Напишіть програму, яка буде запалювати світлодіоди зліва-направо, справа-наліво.
3. Напишіть програму, яка буде запалювати світлодіоди циклічно справа-наліво (або зліва-направо).
4. Напишіть програму, яка реалізує двійковий рахунок від 0 до 15.
5. Напишіть програму, яка буде запалювати світлодіоди 0101 -> 1010.
6. Напишіть програму, яка буде запалювати світлодіоди 1100 -> 0011.
Домашнє завдання
Заданий сигнал, відліки якого записані в цілочисельний масив signal. Написати програму, яка буде виводити на світлодіодні індикатори рівень сигналу через кожні 20 мс. Оскільки світлодіодів 4, то рівнів 5 (малий рівень сигналу – світлодіоди не горять). Після завершення оброблення останнього відліку почати оброблювати перший відлік. Після заповнення вивести зображення сигналу інструментами Code Composer Studio.
#define N 101
short signal[N] = {0, 14937, 23820, 23523, 15270, 3851, -4912, -7109, -2533, 5552, 12463, 14783, 12188, 7429, 4525, 6231, 12234, 19129, 22255, 18368, 7702, -5800, -16287, -18932, -12473, 0, 12473, 18932, 16287, 5800, -7702, -18368, -22255, -19129, -12234, -6231, -4525, -7429, -12188, -14783, -12463, -5552, 2533, 7109, 4912, -3851, -15270, -23523, -23820, -14937, 0, 14937, 23820, 23523, 15270, 3851, -4912, -7109, -2533, 5552, 12463, 14783, 12188, 7429, 4525, 6231, 12234, 19129, 22255, 18368, 7702, -5800, -16287, -18932, -12473, 0, 12473, 18932, 16287, 5800, -7702, -18368, -22255, -19129, -12234, -6231, -4525, -7429, -12188, -14783, -12463, -5552, 2533, 7109, 4912, -3851, -15270, -23523, -23820, -14937, 0, };