Обзор отладочной платы DK-TM4C129X от TI

Компоненты
Сегодня днем я стал одним из первых обладателей отладочной платы на базе предсерийного микроконтроллера TM4C129.

И Считаю просто необходимым написать вообще первый обзор этой платы.

Внимание! Плата собрана на базе экспериментального процессора XM4C129 — от серийной модели TM4C129 он отличается отсутствием каких-либо гарантий, что все будет нормально работать )) ля-ля)

Комплектация:
В коробке нашлись:
  • Непосредственно сама плата в недурной упаковке из пупырчатой пленки и антистатическом пакете;
  • 2 кабеля USB-A-male — microUSB
  • 1 кабель USB-A-Female — microUSB
  • шлейф Ethernet
  • Флеш-накопитель на 8Гбайт. Спасибо что отказались от CD диска! Флешка содержит все среды программирования (но весьма старые версии — CSS даже 4-й!) и некоторую техническую документацию (датащита, к слову — нет).

Состав платы: (Все дружно смотрим на вкладыш)

Из основного:
  • Микроконтроллер XM4C129XNCZAD. Кстати, задание на дом — скачайте для него датащит… там NDA по пути не забудьте (у меня есть, но дать его не могу) Корпус, надо сказать, на него противный — BGA212. Но это не страшно, так как есть варианты и в перевариваемом TQFP128;
  • ICDI интерфейс для внутрисхемной отладки;
  • Слот для microSD карты;
  • Пол-гига SPI флешки;
  • QVGA LCD дисплей с резистивным тачскрином;
  • Ethernet PHY! — полноценная поддержка Ethernet — просто подключай разъем и вперед!
  • Усилитель с динамиком и кнопки...

В плате уже зашито некоторое ПО, которое соединяется по Ethernet и смотрит погоду в городах. Можно набрать на клавиатуре свой город и посмотреть погоду в нем.
Сенсор, к слову, весьма отзывчивый и буквы набираются без проблем.

Зима, снегопад, лютая стужа, новый год… ять…


Работа в CodeComposer Studio.
Перед тем как начать работу по программированию, необходимо загрузить новую версию TI-RTOS 1.20, после чего в CCS появятся примеры работы с данной отладочной платой. Давайте что-нибудь запустим:


Работа с примерами TI-RTOS проста до безобразия:

Четыре тыка и… мы понимаем что у нас лежит сервер лицензий все работает.
Подключается плата через интерфейс Stellaris In-Cursiut Debug Interface. (напомню что Stellaris — это старое название линейки TIVA-C)

CCS без проблем работает и с J-Link, хотя для последнего нужно добавить пару дров (Пользуюсь TE-ARM-Link-ом и все без проблем)
Для «чистатеста» решил запустить UART Echo

Запускаем Debug кнопочкой Run:

И Все заработало:


Функция echoFxn() выполняется, все замечательно.
Void echoFxn(UArg arg0, UArg arg1)
{
    Char input;
    UART_Handle uart;
    UART_Params uartParams;
    const Char echoPrompt[] = "\fEchoing characters:\r\n";

    /* Create a UART with data processing off. */
    UART_Params_init(&uartParams);
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_RETURN_FULL;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudRate = 9600;
    uart = UART_open(Board_UART0, &uartParams);

    if (uart == NULL) {
        System_abort("Error opening the UART");
    }

    UART_write(uart, echoPrompt, sizeof(echoPrompt));

    /* Loop forever echoing */
    while (TRUE) {
        UART_read(uart, &input, 1);
        UART_write(uart, &input, 1);
    }
}

Но ЧУ! в функции main эта задача даже не упоминается!

/*
 *  ======== main ========
 */
Int main(Void)
{
    /* Call board init functions */
    Board_initGeneral();
    Board_initGPIO();
    Board_initUART();

    System_flush();

    /* Start BIOS */
    BIOS_start();

    return (0);
}

Единственное что привлекает внимание — функция BIOS_start();
За отработку таска echoFxn() отвечает ОСРВ — SYS/BIOS.
Делаем двойной клик по файлу uartecho.cfg — нам открывается TI-RTOS System Overview. Для того, чтобы оно приобрело такой графический вид, выбираем Advanced:

это графическая утилита настройки cfg-файла. Естественно что она доступна только для пользователей CCS.
Открываем BIOS — System Overview

галочками показаны активированные элементы системы.
Нас интересует диспетчер — tasks:

здесь мы видим общие настройки тасков вроде размера стека и числа приоритетов задач.
Нам нужны сами задачи — Instanses

Где мы и находим наш таск UART. Давайте создадим еще один таск!

Сохраняем конфигурацию и в файле uartecho.cfg появились строки:
/* ================ Task configuration ================ */
var task0Params = new Task.Params();
task0Params.instance.name = "echo";
task0Params.stackSize = 0x300;
Program.global.echo = Task.create("&echoFxn", task0Params);

/* ================ Logging configuration ================ */
var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
LoggingSetup.loadLoggerSize = 256;
LoggingSetup.mainLoggerSize = 512;
LoggingSetup.sysbiosLoggerSize = 1024;

/* ================ Driver configuration ================ */
var TIRTOS = xdc.useModule('ti.tirtos.TIRTOS');
var GPIO = xdc.useModule('ti.drivers.GPIO');
var UART = xdc.useModule('ti.drivers.UART');

/*   наш таск */
var task1Params = new Task.Params();
task1Params.instance.name = "ButtonDown";
task1Params.stackSize = 768;
Program.global.ButtonDown = Task.create("&ButtonDownPressed", task1Params);


Допустим, мы хотим зажигать светодиод по кнопке. Понятно, что у платы есть специально определенные кнопки и светодиоды. Их список имеется в файле Board.h:


#define Board_LED_ON                DK_TM4C129X_LED_ON
#define Board_LED_OFF               DK_TM4C129X_LED_OFF
#define Board_LED0                  DK_TM4C129X_LED_G
#define Board_LED1                  DK_TM4C129X_LED_B
#define Board_LED2                  DK_TM4C129X_LED_R
#define Board_BUTTON0               DK_TM4C129X_BUTTON_SELECT
#define Board_BUTTON1               DK_TM4C129X_BUTTON_UP
#define Board_BUTTON2               DK_TM4C129X_BUTTON_DOWN


Создаем функцию для таска. Учтите, что таск самостоятельно отвечает за то чтобы быть зацикленным!

Не забудем про схему подключения кнопок на плате:

Так как кнопки по схеме замыкаются на землю, пишем соответствующее условие

Void ButtonDownPressed(UArg arg0, UArg arg1)
{

	while(TRUE){
		if (!GPIO_read(Board_BUTTON0)){
			GPIO_write(Board_LED1,Board_LED_ON);
		}
		else{
			GPIO_write(Board_LED1,Board_LED_OFF);
		}
	}
}

Вам не видно, а у меня работает :)

Кстати, не знаю, баг это или фича, но супер-яркий светодиод загорожен язычком от защитной пленочки(да, дисплей до сих пор не очищен от первой прошивки):


Вот мы и пробежали галопом по Европам по отладочной плате и SYS/BIOS.
Честно говоря SYS/BIOS хоть и мощный, но маленько запутанный — я только только начал в нем разбираться.
А впереди еще TivaWare, внутри которой есть куча драйверов непосредственно железа.

10 комментариев

avatar
Каким образом ты заполучил эту чудесную плату?
avatar
купил в терре.
Мог бы заказать напрямую у TI, но нужны были счета, накладные и прочая гадость.
Комментарий отредактирован 2013-12-30 23:40:51 пользователем radiolok
avatar
XM4C129XNCZAD
Неужто, контроллер так подходит под задачу, что стоило на него завязываться еще до того, как он появился в продаже и неизвестна его доступность?

ICDI интерфейс для внутрисхемной отладки
Блин, задолбало то, что каждый свой отладочный протокол лепит. Отладка, фактически состоит из двух комманд — записать и прочитать. Неужто, так сложно всем сделать одни отладочный интерфейс и им пользоваться.

Функция echoFxn()
«Повбывав» бы за такие названия.
avatar
Контроллер — скорее на будущее — Хотя наличие отсутствия дешевых контроллеров с Ethernet хотя бы MAC угнетает — в одном случае дешевле было соединить CC430 и W5100 :(

ICDI это так чисто отладчик называется кстати. На выходе у него вполне себе обычный JTAG. на плате даже разъем соответствующе подписан.
т.е. USB -> ICDI -> JTAG.
Комментарий отредактирован 2013-12-30 23:42:44 пользователем radiolok
avatar
«Повбывав» бы за такие названия.
Увы, так как редко какой электронщик пришел из программирования, то никакого стиля кода и не наблюдается чаще всего. Транслит пополам с англоязычными названиями, кэмэл-кейс вкупе с сишным именованием, всё что хочешь… Про содержание комментариев в коду я совсем молчу. Всё, что угодно, но только не пояснение назначения кода. Сам таким был пару лет назад.
Комментарий отредактирован 2013-12-31 15:50:54 пользователем RogerSchatz
avatar
Если что uartFxn() это из официальных примеров от TI, я тут не причем :)
В примерах такого достаточно. Хотя основное API вполне себе удобочитаемое
avatar
Что касаемо цены, то я ее ожидаю нечто средним между TM4C123 в 9 долларов и F28M35 в 23 доллара.
avatar
или я не туда смотрю или у тексасов на нее цена 200 баксов? www.ti.com/tool/dk-tm4c129x#buy
avatar
Я чисто про микроконтроллер.
А плата да — 200 баксов
avatar
На четвертой фотке — Звезда Смерти!..
сорри, не выдержал :))
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.