Project

General

Profile

SPI0 и UART3

Added by mouse over 10 years ago

Пытаюсь завести SPI0 на отладочном комплекте LDM. В качестве Slave — экранчик с драйвером ILI9320 .

Возникло несколько вопросов:
  1. Вопреки документации, после сброса регистр SPI0CFG имеет значение 0x3092084, т.е. TWEN=1, SSEN=1. По спекам должно быть 0x30020xx.
  2. При значениях PM=1 и DIV16=1 не будет ли деления на 0 в формуле Fsys / (16 * (4 - 2*FACT)*(PM - 1))? При DIV16=0 формула отличается прилично.
  3. Настройка фазы синхросигнала и состояния SCK. На TMS320 у меня SCK был, если верить логическому анализатору, LO. При комбинации CPHA=1 и SCK=0, данные от мастера доходят, а чтение из ведомого происходит не по спаду, а по фронту. Стоит только выставить SCK=1, как всё становится на свои места.
  4. Первая инициализация UART (uart_init) сразу после заливки занимает неприлично много времени (около минуты). Дальнейшие включения и перезапуски — мухой. Проверял путём включения VD3-VD4 до и после uart_init.
  5. Существует или планиурется ли управление питанием периферии? Включение/отключение неиспользуемых блоков с целью экономии питания?
  6. Правильно ли я понимаю, что текущий линкер не умеет вырезать из объектных файлов неиспользуемые функции? И для достижения желаемого результата необходимо функции распределять по отдельным исходным файлам?

Очень хочется распиновки периферийных разъёмов для LDM. Пока выручает только тестер. Лучше всего — принципиальная схема LDM как для HW.

А так же:
  1. Возможность пошаговой отладки в железе. mc-dbg пока этого не умеет.
  2. Возможность загрузки программы прямо в память MCp. Например, я залил статические данные и редко изменямый код (данные, константы, библиотечные функции) в EEPROM, а потом хочу поотлаживать какую-то функцию-две-три и не тратить ресурс EEPROM перепрошивкой, а главное — не тратить уйму времени на заливку по сравнению с микроизменениями в отлаживаемом коде.
  3. Как вариант, хотелось бы видеть у модели эмуляцию UART'a, чтобы можно было, скажем, подцепиться телнетом на какой-то порт при запущенной модели, и работать с псевдо-UART'ом так, как если бы это был настоящий UART в терминальной программе.
  4. Препроцессору не нравятся строки исходников, длиннее 65535 байт:
    img-mc.c:30: fatal error: Too long source line
    0x80ff, 0x80ff, 0x80ff, 0x80ff,[…] 0xe0a4, 0xe2 errors in preprocessor.

PS. Экранчик заработал :)


Replies (35)

RE: SPI0 и UART3 - Added by mouse over 10 years ago

Т.е. все телодвижения с SPIxCFG в хидере "spi.h" впустую? Чем же тогда включается/отключается TW-режим?

#define SPI_SSEN(SPI, EN) SPI->CFG |= ((EN & 0x01) << 16)
#define SPI_TWEN(SPI, EN) SPI->CFG |= ((EN & 0x01) << 19)
В документации в описании регистра SPIxCR тоже есть ссылка на SPIxCFG:
порядок начала передачи при работа по трех-проводной линии. Только при включеном режиме в SPIxCFG (0 – ведущий передает первый, 1 – ведомый передает первый)
(опечатка "при работА")

Кстати, в описании на MCp сказано, что данный SoC имеет только два SPI, а на самом деле их три:

2 интерфейса SPI с селектором «ведомых» устройств (в режиме «ведущий»)

RE: SPI0 и UART3 - Added by krufter_multiclet over 10 years ago

Можно записать значение новое для регистра SPIxCFG, например "0" и по uart послать состояние регистра. Когда я писал хидер, руководствовался таблицей с регистрами, а оказалось, что значение программно не поменять, оно выставлено аппаратно. TW-режим включается 15-м битом регистра управления.

А можно конкретнее в каком описании процессора это сказано, что данный SoC имеет только два SPI?

RE: SPI0 и UART3 - Added by mouse over 10 years ago

Да-да, я это первым делом и проверил :)
Файл DS-MCp0411100101-Q208_Evolution.pdf, страница 7. И на всех страницах c описанием MCp (на картинке с блоками)
В файле Manual-MCp_0411100101.pdf написано три.

RE: SPI0 и UART3 - Added by mouse over 10 years ago

И самое главное, про два SPI написано тут

RE: SPI0 и UART3 - Added by krufter_multiclet over 10 years ago

Вы дали ссылку на страницу в другом корпусе одного и того же кристалла. Сейчас кристалл выполнен в корпусе QFP-208, но если кому-то потребуется корпус LQ-128, то мы можем предоставить процессор и в таком корпусе, но в нём будут разведены только 2 SPI. Однако в LQ-128 весь процессор имеет размеры 14 на 14 мм, вместо текущих 28 на 28 мм, хотя сам кристалл имеет размер 10 на 10 мм. В таблице сравнения параметров надо поправить на 3 SPI.

RE: SPI0 и UART3 - Added by mouse over 10 years ago

Про первые ссылки, да, посыпаю голову пеплом :)
В сравнении же MCp P1 и P2 указано про QFP-208 и два SPI.
Есть ли сравнительная табличка по 208/144/128, какие именно периферийные устройства присутствуют (как альтернативные входы для групп GPIOx), а какие отсутствуют? Глазами делать дифф на GPIOx тяжело :)

RE: SPI0 и UART3 - Added by krufter_multiclet over 10 years ago

Спасибо за внимательно прочтение документации, благодаря этому она с каждым днём становится лучше. В сравнении поправим количество SPI на 3. В новой версии процессора SPI пока 3, если выводов не хватит, то есть вероятность что их будет 2 или корпус надо делать на большее количество выводов.

RE: SPI0 и UART3 - Added by mouse over 10 years ago

krufter_multiclet wrote:

В новой версии процессора SPI пока 3, если выводов не хватит, то есть вероятность что их будет 2

Даже к двум SPI с тремя SSx уже весьма приличное число устройство можно подключить. Главное, чтобы ADC зажил своей внутренней жизнью и не занимал SPI :)

RE: SPI0 и UART3 - Added by krufter_multiclet over 10 years ago

Проблема с CPHA и чтением по фронту и спаду действительно есть, рабочие комбинации при соединение двух SPI получил как и у вас CPHA = 1, PM = 1 или PM = 0xF. Странно, что у меня карточка microSD работала при CPHA = 0, PM = 0, DIV16 = 0, хотя там были посылки по 16 бит. Как выявим все рабочие и нерабочие комбинации и установим причину сообщим.

RE: SPI0 и UART3 - Added by mouse over 10 years ago

По результатам своей возни с SPI, написал небольшую заметку на Хабре:

http://habrahabr.ru/post/191184/

(26-35/35)