fagci

Ili9341 Gram R/w Через Spi+Dma

3 сообщения в этой теме

fagci    0

Мучаю всё сабж, уже работает копирование содержимого GRAM буфера.

Но осталась трабла: после приёма данных с дисплея не могу производить запись.

Обошёл эту проблему переинициализацией пина CS, нарисовал, затем пытаюсь заново прочитать - читаются только 0xFFFFы. Переход в режим записи осуществляется в методе установки колонки и строки, должно быть всё ок.

Основная проблема - заставить дисплей переходить с режима чтения на режим записи.

Опытным путём выяснилось, что запись становится невозможна сразу после передачи команды на чтение из памяти.

Исходники тут:

https://github.com/fagcinsk/stm-ILI9341-spi/tree/master/ILI9341_lib

graph.c - LCD_readPixels - метод чтения пикселей с экрана;

dma.c - методы для чтения из памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость fagci   
Гость fagci

В этой ветке https://github.com/f...bug/ILI9341_lib переделал на транзакцию чтения как в даташите, теперь чтение идёт следующим образом:

=== READ ===

CS+ DC- CS-

RAMRD

T_IRQ

RECV dummy

T_IRQ

R_IRQ

RECV dR dG dB

CS+

Но и это не помогло, добавил так же

while (!(SPI1->SR & SPI_SR_TXE)); // Wait for bus free

while (SPI1->SR & SPI_SR_BSY);

always_read(SPI1->DR); // Clear RX flags

always_read(SPI1->SR);

чтобы удостовериться, что всё передано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: User_1
      Доброго времени суток!
      Вкратце: нужно после того, как я записал байт данных в SPI1->DR, отменить передачу этого байта и вместо него отправить 0х00
      Подробно: Смысл вот в чём: некий контроллер, с которым я пытаюсь наладить общение по SPI, запрашивает произвольный участок массива байт и считывает их сплошным потоком. Ну примерно как считывается микросхема EEPROM: задаёшь начальный адрес, а потом просто шлёшь сплошные 0xFF, а она сама инкрементирует адрес и прямо непрерывным потоком байт выдаёт содержимое памяти. Только тут в роли этой микросхемы мой stm32f030 и мне нужно следующий байт отправлять в SPI1->DR сразу после отправки предыдущего. Но когда поток заканчивается (а он каждый раз разной длины и длина эта заранее неизвестна), один байт остаётся не переданным и отправится первым при следующем запросе. А мне нужно, чтобы первым байтом всегда отправлялся 0х00
      Пином (ну то есть битом) NSS управляю программно, его выставление в единичку и снова в ноль, очевидно, не помогает вообще никак. Пока решил проблему так: деинициализирую модуль SPI и выключаю его тактирование, затем включаю тактирование и снова инициализирую. Работает, скорости хватает. Но должно же быть менее костыльное решение?)
      Может кто сталкивался с такой проблемой?
      Курение даташита, reference manual и результатов поиска в гугле, не особо помогло.
    • Автор: Sattva
      Тема: Реверс-инжиниринг: необходимо декодировать протокол связи контроллера пром. насоса и дисплея
      Общая цель: сделать управление кондиционером, вести мониторинг его работы.
      Время на работу: около 12 часов (2 дня).
      Задание для исполнителя:
      1. Выполнить обратное декодирование протокола связи контроллера промышленного
      кондиционера и его дисплея с сенсорными кнопками.
      2. Запаять ATMega 328P или ATMega 2560. Вероятно, придется резать дорожки,
      допаять резисторы в разрыв.
      3. Совместно с заказчиком написать короткий код ввода/вывода данных для Arduino (C++).
      Могут понадобиться функции передачи данных на второй контроллер ATMega 2560 по UART.
      4. Совместно с заказчиком составить простое описание.
      5. Работа дисплея, состояние контроллера кондиционера и мониторинг на Arduino
      должны быть синхронны.
      Программировать микроконтроллер и отправлять данные на вебсервер по
      Ethernet (W5500) умею. Паять умею. Работать с микроконтроллером на уровне
      регистров процессора не умею, потому и ставлю задание.

      Протокол: неизвестен
      Шина: неизвестна
      Чип дисплея: Holtek HT1621B
      Контроллер "пульта управления": Holtek BS84B08A-3
      Фото прилагается.
      Вероятно, применяется шина SPI или I2C, что должно облегчить задачу.

      Имеется пример подобного дисплея 2009 года с выполненной
      работой. У предыдущего исполнителя ушло около 2 часов на разбор
      команд и еще столько же на написание кода, *когда поняли, как
      разбирать команды*.

      Фото с реализацией задания прилагается, но на дисплее другого типа.



      Метод выполненной работы в прошлый раз:
      1. Для получения данных с Holtek-HT46F49E по 8-ми битной шине данных использован Arduino Pro Mini 328P.
      2. Подключение: 5 дорожек перерезано и допаяно 5 резисторов по 1 кОм. Так же использовано еще 3 линии (reset и данные).
      3. Для удаленного управления использована Arduino Mega 2560 + Ethernet Shield W5100.
      4. Общение между 328P и 2560 идет по UART.
       
      Наилучший вариант, если кто-то откликнется из Киева, чтобы можно было вместе
      встретиться и поработать. Но если в Киеве никого нет, то куплю недорогой логический
      анализатор уровней и будем общаться удаленно. Готов к любому варианту.
    • Автор: Max Kondor
      Доброго времени суток. Изучаю STM32, пользуюсь библиотекой SPL. При изучении SPI возникла проблема. Вся иницилизация проходит успешно, ну когда я пытаюсь прочитать даные с акселерометра, регистр Where_am_i, мне либо ничего не приходит, либо приходит 0xFF. Настраивал все по многим туториалам, результат один и тот же. У людей получается, а у меня нет.
    • Автор: Skyluck
      Здраствуйте, пожалуста подскажите за SPI.  Как там дрыгать ногой софтварно? У меня на выходе NSS у меня 1.4 вольта когда SPI выкл а должно быть 3.3 вроди.
    • Автор: karomag
      Помогите, разобраться. Пытаюсь считать данные с модуля на max6675. 
      #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" float temp; u16 MSBLSB; volatile uint32_t ticks_delay = 0; void SysTick_Handler(void) { ticks_delay++; } void delay(uint32_t milliseconds) { uint32_t start = ticks_delay; while((ticks_delay - start) < milliseconds); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); NVIC_EnableIRQ(SPI1_IRQn); SysTick_Config(SystemCoreClock/1000); while(1) { temp = (MSBLSB >> 3); temp = temp * 0.25; } } void SPI1_IRQHandler (){ if (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==SET) { GPIOA->BSRR = GPIO_BSRR_BR4; MSBLSB = SPI_I2S_ReceiveData(SPI1); delay(2000); GPIOA->BSRR = GPIO_BSRR_BS4; } } Ничего хорошего пока не получилось. Код собирал по кусочкам со всего интернета(.
      1. Правильно ли я настроил SPI?
      2. Как преобразовать полученные данные из регистра DR в температуру? С битовыми операциями, пока  туго...
      3. Может кто нибудь даст пример?
      Прошу сильно не пинать.
  • Сообщения

    • Здравствуйте!
      Заказал DSS генератор на AVR. 
      После сборки и подачи 5В на экране загорелась только верхняя строка. 
      Монтаж весь проверил, пассивные элементы прозвонил. 
      О чем может говорить данное состояние? Об отсутствии прошивки?   
    • В видео выше - имеется. Да и тем, кому за .... не знать автора сего шедевра - моветон. 
    • В каких книжках такое читаете? Слушатель вообще не причём. Никто не меняет порядок фильтра при изменении расположения слушателя или микрофона. Основные измерения производяться на оси излучения. Измерения под угом от оси излучения определяют ДН а не порядок фильтра. Мощность и тыловые излучатели/рассеиватели на порядок фильтра тоже не влияет. При любой мощности завал фильтра будет неизменным, как был -18дб так и останеться. А тыловики влияют на ширину ДН
    • Василичь! Не надо распространять своё мировосприятие на окружающих. Судя по тону твоих постов и привычке поливать всех помоями, это тебя что то бесит. Я объяснил свою позицию и привёл, в подтверждение ДОКУМЕНТЫ. Что совершенно не мешает тебе прикидываться непонимающим и нереально тупить. Взгляни на скрин ГОСТа, который ты изукрасил своими надписями - где, в каком месте я ВЕЩАЮ, что речь идёт об измерении МАКСИМАЛЬНОЙ мощности? Я просил тебя дать цитату. Где она? Долго будешь "факты" из пальца высасывать? А то, орать, как торговка на базаре, ты умеешь. А объяснить как скрутками шумы на 40 дБ уменьшить - так тебя нет.  Заодно поясни, чего ты прицепился к цифре 0,005%? Эта цифра для ТРАНЗИСТОРНЫХ усилителей. Значения для ламповых даны В СКОБКАХ. Да, там написано  - по ТУ, Но, сам подумай- для 2-й группы сложности КНИ 1%. Для первой - 0,5% А, для нулевой (по ТУ), естественно, 10%? Мысль в голову не приходила, что уровень искажений, допускаемых ГОСТом, с ростом группы сложности УМЕНЬШАЕТСЯ. И, если для 1-й было 0,5%, то для нулевой, по твоему, должно быть 10? Я правильно понял твои комментарии? Знаешь, у Ильфа и Петрова, в 12-ти стульях, есть замечательная фраза Без малого 100 лет назад сказано. А актуальности, похоже, и сейчас не потеряло. Поэтому, с чего мне бесится? Абсолютно бессмысленное занятие. И, ещё раз повторю, лично для тебя. Меня никогда не интересовала мощность МАКСИМАЛЬНАЯ. Мне не надо греть утюги. И продавать "фиктивные" Ватты мне не надо. А нужен мне звук КАЧЕСТВЕННЫЙ. Поэтому, вместе с ГОСТом, я считаю, что 1% - это предел искажений, за который выходить бессмысленно. И не надо пугать меня килобаксами и приводить в пример усилители на 300В, со свалок Америки. Я, на отечественной ГУ-50, в псевдотриоде, получаю 9 ВАтт с искажениями НИЖЕ 1-го%  Вообще, к стати, без ООС. А, если ввести? Ну, хоть 6 дБ?
    • Куплю трансформатор 080TL42T916L или что-то подобное. Встречается в блоках питания на телевизорах, мониторов и т.д.. Кому не лень, посмотрите в донорах. Украина, новая почта, укр почта, самовывоз.  Спасибо П.с используется с шимкой TNY277
    • один единственный..
    • по технологии быстрой намотки - это как? Жгутом, что ли?