Forums » Программное обеспечение »
SPI0 и UART3
Added by mouse over 11 years ago
Пытаюсь завести SPI0 на отладочном комплекте LDM. В качестве Slave — экранчик с драйвером ILI9320 .
Возникло несколько вопросов:- Вопреки документации, после сброса регистр SPI0CFG имеет значение 0x3092084, т.е. TWEN=1, SSEN=1. По спекам должно быть 0x30020xx.
- При значениях PM=1 и DIV16=1 не будет ли деления на 0 в формуле Fsys / (16 * (4 - 2*FACT)*(PM - 1))? При DIV16=0 формула отличается прилично.
- Настройка фазы синхросигнала и состояния SCK. На TMS320 у меня SCK был, если верить логическому анализатору, LO. При комбинации CPHA=1 и SCK=0, данные от мастера доходят, а чтение из ведомого происходит не по спаду, а по фронту. Стоит только выставить SCK=1, как всё становится на свои места.
- Первая инициализация UART (uart_init) сразу после заливки занимает неприлично много времени (около минуты). Дальнейшие включения и перезапуски — мухой. Проверял путём включения VD3-VD4 до и после uart_init.
- Существует или планиурется ли управление питанием периферии? Включение/отключение неиспользуемых блоков с целью экономии питания?
- Правильно ли я понимаю, что текущий линкер не умеет вырезать из объектных файлов неиспользуемые функции? И для достижения желаемого результата необходимо функции распределять по отдельным исходным файлам?
Очень хочется распиновки периферийных разъёмов для LDM. Пока выручает только тестер. Лучше всего — принципиальная схема LDM как для HW.
А так же:- Возможность пошаговой отладки в железе. mc-dbg пока этого не умеет.
- Возможность загрузки программы прямо в память MCp. Например, я залил статические данные и редко изменямый код (данные, константы, библиотечные функции) в EEPROM, а потом хочу поотлаживать какую-то функцию-две-три и не тратить ресурс EEPROM перепрошивкой, а главное — не тратить уйму времени на заливку по сравнению с микроизменениями в отлаживаемом коде.
- Как вариант, хотелось бы видеть у модели эмуляцию UART'a, чтобы можно было, скажем, подцепиться телнетом на какой-то порт при запущенной модели, и работать с псевдо-UART'ом так, как если бы это был настоящий UART в терминальной программе.
- Препроцессору не нравятся строки исходников, длиннее 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 11 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 11 years ago
Можно записать значение новое для регистра SPIxCFG, например "0" и по uart послать состояние регистра. Когда я писал хидер, руководствовался таблицей с регистрами, а оказалось, что значение программно не поменять, оно выставлено аппаратно. TW-режим включается 15-м битом регистра управления.
А можно конкретнее в каком описании процессора это сказано, что данный SoC имеет только два SPI?
RE: SPI0 и UART3 - Added by mouse over 11 years ago
RE: SPI0 и UART3 - Added by krufter_multiclet over 11 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 11 years ago
Про первые ссылки, да, посыпаю голову пеплом :)
В сравнении же MCp P1 и P2 указано про QFP-208 и два SPI.
Есть ли сравнительная табличка по 208/144/128, какие именно периферийные устройства присутствуют (как альтернативные входы для групп GPIOx), а какие отсутствуют? Глазами делать дифф на GPIOx тяжело :)
RE: SPI0 и UART3 - Added by krufter_multiclet over 11 years ago
Спасибо за внимательно прочтение документации, благодаря этому она с каждым днём становится лучше. В сравнении поправим количество SPI на 3. В новой версии процессора SPI пока 3, если выводов не хватит, то есть вероятность что их будет 2 или корпус надо делать на большее количество выводов.
RE: SPI0 и UART3 - Added by mouse over 11 years ago
krufter_multiclet wrote:
В новой версии процессора SPI пока 3, если выводов не хватит, то есть вероятность что их будет 2
Даже к двум SPI с тремя SSx уже весьма приличное число устройство можно подключить. Главное, чтобы ADC зажил своей внутренней жизнью и не занимал SPI :)
RE: SPI0 и UART3 - Added by krufter_multiclet over 11 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 11 years ago
По результатам своей возни с SPI, написал небольшую заметку на Хабре:
- « Previous
- 1
- 2
- Next »