Sajuukkahr
Солнце 19 февраля 2017 г., 21:31
Всем здравствуйте,
Я строю проект на основе STM32F1, работающего на 72 МГц и ILI9486, подключенный к SPI1, часовой разделитель - 1 .
Сейчас он работает довольно хорошо, моя единственная забота - медленное время розыгрыша.
Я рисую изображения через 2 петли и нарисование, библиотека https: // github.com/stevstrong/adafruit_ ... Ри/Мастер на основе Adafruit GFX.
Времена:
Timespendreadingflash = 191 миллисы
Timespendrendering = 1915 миллисы
Это для рендеринга:
1x 320x240
1x 320x45
1x 320x26
1x 320x21
1x 38x21
в общей сложности 107038 пикселей
Есть ли способ ускорить это ? пользовательский интерфейс, основанный на этом решении, действительно вялый.
Что я попробовал:
Распространить результат STM32 до 128 МГц: некоторые улучшения скорости, но ничего особенного.
Я строю проект на основе STM32F1, работающего на 72 МГц и ILI9486, подключенный к SPI1, часовой разделитель - 1 .
Сейчас он работает довольно хорошо, моя единственная забота - медленное время розыгрыша.
Я рисую изображения через 2 петли и нарисование, библиотека https: // github.com/stevstrong/adafruit_ ... Ри/Мастер на основе Adafruit GFX.
Времена:
Timespendreadingflash = 191 миллисы
Timespendrendering = 1915 миллисы
Это для рендеринга:
1x 320x240
1x 320x45
1x 320x26
1x 320x21
1x 38x21
в общей сложности 107038 пикселей
Есть ли способ ускорить это ? пользовательский интерфейс, основанный на этом решении, действительно вялый.
Что я попробовал:
Распространить результат STM32 до 128 МГц: некоторые улучшения скорости, но ничего особенного.
Sajuukkahr
Солнце 19 февраля 2017 г., 21:47
Timespendreadingflash = 186
Timespendrendering = 2015
TimespendSettingWindow = 1652
TimespendSettingColor = 256
Кажется, что большую часть времени тратится.
По внешнему виду кажется, что SetAdDrwindow устанавливает окно памяти 1 пикселя в то время. Увеличение окна до большего количества пикселей должно теоретически уменьшить время розыгрыша.
Timespendrendering = 2015
TimespendSettingWindow = 1652
TimespendSettingColor = 256
Кажется, что большую часть времени тратится.
По внешнему виду кажется, что SetAdDrwindow устанавливает окно памяти 1 пикселя в то время. Увеличение окна до большего количества пикселей должно теоретически уменьшить время розыгрыша.
Стивестронг
Солнце 19 февраля 2017 г. 22:16
Это так, 9 usecs wndow настройка адреса для написания 1 пиксель 1USEC.
Попробуйте написать несколько пикселей в том же блоке.
Вы можете сначала подготовиться в памяти, чтобы быть записанным на отображение.
Попробуйте написать несколько пикселей в том же блоке.
Вы можете сначала подготовиться в памяти, чтобы быть записанным на отображение.
Sajuukkahr
Солнце 19 февраля 2017 г. 22:19
Приветствую, кажется, мне нужно написать пользовательский GFX на ваш.
Sajuukkahr
Солнце 19 февраля 2017 г. 11:44
Стивестронг написал:Это так, 9 usecs wndow настройка адреса для написания 1 пиксель 1USEC.
Попробуйте написать несколько пикселей в том же блоке.
Вы можете сначала подготовиться в памяти, чтобы быть записанным на отображение.
Попробуйте написать несколько пикселей в том же блоке.
Вы можете сначала подготовиться в памяти, чтобы быть записанным на отображение.
Sajuukkahr
Пн 20 февраля 2017 г. 2:03
Я посмотрел на Spiclass :: write (const void *data, uint32 длина), но это просто Spiclass :: write (uint16 data) с помощью цикла while
Sajuukkahr
Пн 20 февраля 2017 г. 2:24
SPI.setDatasize (data_size_16bit); сокращает время розыгрыша для полноэкранного
ScreendRaw = 89
ScreendRaw = 89
Sajuukkahr
Пн 20 февраля 2017 г., 2:52
Пользовательская функция writebuffer
val = !val; /* "set" bits are lower than "reset" bits */
dev->regs->BSRR = (1U << pin) << (16 * val);
Стивестронг
Пн 20 февраля 2017 г. 8:35 утра
Саджуккахр написал:
Разве это не то, что spiclass :: write (const void *data, uint32 длина) должен делать ?
Sajuukkahr
Пн 20 февраля 2017 г. 8:56 утра
Стивестронг написал:Саджуккахр написал:
Разве это не то, что spiclass :: write (const void *data, uint32 длина) должен делать ?
Стивестронг
Пн 20 февраля 2017 г. 9:15 утра
Саджуккахр написал: Сначала я пытался использовать его, но, честно говоря, не мог.
Sajuukkahr
Пн 20 февраля 2017 г., 17:46
int data;
#define Trigger PB3
void setup() {
pinMode(Trigger, OUTPUT);
digitalWrite(Trigger, LOW);
Serial.begin(115200);
Wire.begin();
}
void loop() {
digitalWrite(Trigger, HIGH); // ols trigger
Wire.i2c_start();
Wire.i2c_shift_out(0x50); // device address
Wire.i2c_get_ack();
Wire.i2c_shift_out(0x5a); // writing data to this address
Wire.i2c_get_ack();
Wire.i2c_shift_out(0xa5); // write data
Wire.i2c_get_ack();
Wire.i2c_stop();
delay(5);
Wire.i2c_start();
Wire.i2c_shift_out(0x50); // device address
Wire.i2c_get_ack();
Wire.i2c_shift_out(0x5a); // writing data to this address
Wire.i2c_get_ack();
data = Wire.i2c_shift_in(); // write data
Wire.i2c_get_ack();
Wire.i2c_stop();
digitalWrite(Trigger, LOW); //
delay(5);
}
Стивестронг
Пн 20 февраля 2017 г. 18:39
Почему бы тебе не использовать
void WireEepromWriteByte(uint16_t theMemoryAddress, uint8_t u8Byte)
{
Wire.beginTransmission(EEPROM_ADDRESS);
Wire.write( (theMemoryAddress >> 8) & 0xFF );
Wire.write( (theMemoryAddress >> 0) & 0xFF );
Wire.write(u8Byte);
Wire.endTransmission();
delay(5);
}
uint8_t WireEepromRead(uint16_t theMemoryAddress)
{
uint8_t u8retVal = 0;
Wire.beginTransmission(EEPROM_ADDRESS);
Wire.write( (theMemoryAddress >> 8) & 0xFF );
Wire.write( (theMemoryAddress >> 0) & 0xFF );
Wire.endTransmission();
delay(5);
Wire.requestFrom(EEPROM_ADDRESS, 1);
u8retVal = Wire.read();
return u8retVal ;
}
Sajuukkahr
Вт 21 февраля 2017 г. 12:49
Попробовал это на первом месте.
Я просто хотел «дополнительные меры», чтобы убедиться, что я что -то не испортил.
Это может быть SPI.C в ядре как SPI.C, кажется, в порядке, будет попытаться отладить, когда у меня будет свободное время.
Спасибо за помощь.
Быстрый вопрос, оффтопический: я сталкиваюсь с разрывом экрана (обновление экрана попадает, когда я рисую кадр)...любая идея, как избежать этого ?
Я просто хотел «дополнительные меры», чтобы убедиться, что я что -то не испортил.
Это может быть SPI.C в ядре как SPI.C, кажется, в порядке, будет попытаться отладить, когда у меня будет свободное время.
Спасибо за помощь.
Быстрый вопрос, оффтопический: я сталкиваюсь с разрывом экрана (обновление экрана попадает, когда я рисую кадр)...любая идея, как избежать этого ?
Стивестронг
Вт 21 февраля 2017 г. 8:40
Что касается функций SPI, я ответил в вашем другом посте.
Общие модули отображения не предлагают никаких сигналов обновления экрана, поэтому я не думаю, что вы можете сделать это, не разборка модуля и зацепить сигналы из штифтов для чипа драйвера.
Общие модули отображения не предлагают никаких сигналов обновления экрана, поэтому я не думаю, что вы можете сделать это, не разборка модуля и зацепить сигналы из штифтов для чипа драйвера.