ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
318688 Топик полностью
Cepгeй Бopщ (29.03.2012 13:33 - 13:45, просмотров: 125) ответил FDA на А описание функции I2C.write можете скинуть? В принципе, я всё сделал - текст, точки, линии, окружности и т.п. у меня выводятся, но вот хочется немного соптимизировать. Небольшой затык у меня появился здесь:
Да, и не будет работать.  Там же одно из двух - либо контрольный байт с взведенным c0 и потом один байт, следом новый контрольный байт и т.д. Либо контрольный байт со сброшенным c0 и все остальное до стопа будет интерпретировано как команда или данные. Т.е. проще посылать команды/данные, разделяя их стопом. Думаю, что в вашем случае надо было бы делать так (но сам я такое не пробовал):StartI2C(); PutI2C(LCD_ADDR); PutI2C(0b10000000); PutI2C(SET_X | addr); PutI2C(0b10000000); PutI2C(SET_Y | page); PutI2C(0b01000000); PutI2C(b); StopI2C(); Да, наверное так будет быстрее. Меня скорость не сильно беспокоила, поэтому я делал по вашему первому варианту - получилось короче. Рисовал в ОЗУ и после рисования обновлял прямоугольную область экрана. I2C.write() работала через DMA на MSP430, в ее исходниках мало что видно. А делала она вот такое: bool i2c_t<address, module, channel>::write(uint8_t ctrl, void const *pBuffer, uint16_t size) { uint8_t const * pSrc = (uint8_t const *)pBuffer; StartI2C(); PutI2C(LCD_ADDR); PutI2C(ctrl); for(uint_fast16_t i = 0; i < size; ++i) PutI2C(*pSrc++); StopI2C(); }