Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 02.08.2016, 20:31   #451
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Стиль программирования это конечно важно, только вот у разных преподавателей он разный. А мой вариант правильный, просто для вас непривычный. В общем то записать данную функцию можно несколькими способами, что и показывает обсуждение. И если все они рабочие, что в них неправильного. Вот вы поняли что она делает, и еще 99,9999 % участников форума, да и начинающих программировать поймут. А вот стиль вашей записи может многих ввести в ступор.

Последний раз редактировалось diger67; 02.08.2016 в 20:37.
diger67 вне форума   Ответить с цитированием
Старый 02.08.2016, 21:40   #452
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,885
Вес репутации: 5553/170
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от diger67 Посмотреть сообщение
А вот стиль вашей записи может многих ввести в ступор.
вообще-то в ступор вводит ваш вариант.
неужели не видно, что там не стиль какой-то, а в принципе разные вещи написаны?
у вас двигается переменная и перемножается с одной константой. в (правильном) варианте DimaS переменная просто перемножается на заранее, на этапе компиляции, сгенеренные константы.
что вроде разницы в размере нет, так это повезло, скорее всего компилятор соптимизировал. но такое везение не всегда было и будет, если переменная тот же volatile или компилятор не такой продвинутый, он честно все там и двинет. в каждой инструкции.

но у вас сейчас, похоже, критерий - работает/не работает, поэтому пусть...
Greg вне форума   Ответить с цитированием
Старый 02.08.2016, 23:50   #453
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Беспредметный спор. В моем случае ваше упражнение не работает. Чтобы снять все вопросы, вот что такое DB в моем случае.
Цитата:
#define DB0(a) GPIO_WriteBit(GPIOA, GPIO_Pin_9, (BitAction)a)
#define DB1(a) GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)a)
#define DB2(a) GPIO_WriteBit(GPIOA, GPIO_Pin_10, (BitAction)a)
#define DB3(a) GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)a)
#define DB4(a) GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)a)
#define DB5(a) GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)a)
#define DB6(a) GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)a)
#define DB7(a) GPIO_WriteBit(GPIOA, GPIO_Pin_8, (BitAction)a)
Наверное надо выкладывать всю простыню, тогда может меньше бреда услышишь, не в смысле функций, они правомерны, а посути вопроса.

Последний раз редактировалось diger67; 03.08.2016 в 00:02.
diger67 вне форума   Ответить с цитированием
Старый 03.08.2016, 12:49   #454
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Greg Посмотреть сообщение
две первые - не равноценные
посмотри дизасм, во что выливается последняя конструкция.
насколько помню - ад по размеру, он прям реально начнет двигать в цикле...

а с первой записью - у пиков все было чрезвычачайно компактно, срабатывала битовая инструкция.
Я, наверное, совсем отупел. Объясните мне, пожалуйста, что может быть проще (визуально), быстрее по исполнению и меньше по объёму, чем
if(byte & 0x02)
или
if(byte & (1 << 1))
в случае замены константы на более очевидную позицию? В этом варианте, в отличие от варианта автора, вообще нет никаких сдвигов, выполняемых в рантайме. Есть только побитовое И переменной и константы. MCC18 в таком случае должен пользовать btfsc/btfss, да и ХС8 тоже... Вариант, предложенный уважаемым DimaS, по сути тот же самый, только упакован в тернарный оператор (так короче код и эффективнее исполнение, по идее).

Или нет? (С)
Romantic вне форума   Ответить с цитированием
Старый 03.08.2016, 13:06   #455
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Все предложенные варианты справедливы с точки зрения теории, но вы не принимаете во внимание тот факт, что в конкретном случае биты не идут один за другим в одной ячейке памяти (в одном порту). Они разбросаны по разным портам и не выстроены по ранжиру. Все ваши примеры подставлял вместо своего решения. Ни один из вариантов не дал положительного результата. Или компилится и ни чего не работает, или требует дополнительного описания дефайнов, а после компиляции код становиться больше.

Последний раз редактировалось diger67; 03.08.2016 в 13:16.
diger67 вне форума   Ответить с цитированием
Старый 03.08.2016, 13:39   #456
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от diger67 Посмотреть сообщение
Вбиты не идут один за другим в одной ячейке памяти (в одном порту). Они разбросаны по разным портам и не выстроены по ранжиру.
А это-то тут причём? Максимум, на что это может повлиять - асм-инструкция при загрузке адреса регистра порта, если не ошибаюсь (при работе с пинами одного порта загрузка выполняется один раз для группы битов).

Цитата:
Сообщение от diger67 Посмотреть сообщение
Все ваши примеры подставлял вместо своего решения. Ни один из вариантов не дал положительного результата. Или компилится и ни чего не работает, или требует дополнительного описания дефайнов, а после компиляции код становиться больше..
А вот это удивительно...

Если перед Вами вдруг обнаружится задача сделать функцию записи байта в порт наиболее быстрой и компактной, то можно пожертвовать удобством и заменить функцию GPIO_WriteBit на тот самый код, который она делает в теле. При этом Вам в явном виде придётся прописывать регистры портов и маски изменяемых битов (можно их задефайнить, если планируете перенос дисплея на другие линии).
Код:
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_BIT_ACTION(BitVal));

  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin ;
  }
}
В Вашем случае функция будет выглядеть примерно так:
Код:
void TFT_Write_data(uint8_t data)
{
    GPIOA->BSRR = (data & (1<<0)) ? GPIO_BSRR_BS9  : GPIO_BSRR_BR9;
    GPIOC->BSRR = (data & (1<<1)) ? GPIO_BSRR_BS7  : GPIO_BSRR_BR7;
    GPIOA->BSRR = (data & (1<<2)) ? GPIO_BSRR_BS10 : GPIO_BSRR_BR10;
    GPIOB->BSRR = (data & (1<<3)) ? GPIO_BSRR_BS3  : GPIO_BSRR_BR3;
    GPIOB->BSRR = (data & (1<<4)) ? GPIO_BSRR_BS5  : GPIO_BSRR_BR5;
    GPIOB->BSRR = (data & (1<<5)) ? GPIO_BSRR_BS4  : GPIO_BSRR_BR4;
    GPIOB->BSRR = (data & (1<<6)) ? GPIO_BSRR_BS10 : GPIO_BSRR_BR10;
    GPIOA->BSRR = (data & (1<<7)) ? GPIO_BSRR_BS8  : GPIO_BSRR_BR8;

    WR_STROBE
}
Вот что в моём случае (для STM32F100C4, с закомментированным для краткости WR_STROBE) даёт IAR C/C++ Compiler for ARM 6.10.2.52244
Код:
     26          void TFT_Write_data(uint8_t data)
     27          {
     28              GPIOA->BSRR = (data & (1<<0)) ? GPIO_BSRR_BS9  : GPIO_BSRR_BR9;
   \                     TFT_Write_data:
   \   00000000   C107               LSLS     R1,R0,#+31
   \   00000002   4CBF               ITE      MI 
   \   00000004   4FF40072           MOVMI    R2,#+512
   \   00000008   4FF00072           MOVPL    R2,#+33554432
   \   0000000C   ........           LDR.W    R1,??DataTable8  ;; 0x40010810
   \   00000010   0A60               STR      R2,[R1, #+0]
     29              GPIOC->BSRR = (data & (1<<1)) ? GPIO_BSRR_BS7  : GPIO_BSRR_BR7;
   \   00000012   8207               LSLS     R2,R0,#+30
   \   00000014   4CBF               ITE      MI 
   \   00000016   8022               MOVMI    R2,#+128
   \   00000018   4FF40002           MOVPL    R2,#+8388608
   \   0000001C   ........           LDR.W    R3,??DataTable8_1  ;; 0x40011010
   \   00000020   1A60               STR      R2,[R3, #+0]
     30              GPIOA->BSRR = (data & (1<<2)) ? GPIO_BSRR_BS10 : GPIO_BSRR_BR10;
   \   00000022   4207               LSLS     R2,R0,#+29
   \   00000024   4CBF               ITE      MI 
   \   00000026   4FF48062           MOVMI    R2,#+1024
   \   0000002A   4FF08062           MOVPL    R2,#+67108864
   \   0000002E   0A60               STR      R2,[R1, #+0]
     31              GPIOB->BSRR = (data & (1<<3)) ? GPIO_BSRR_BS3  : GPIO_BSRR_BR3;
   \   00000030   0207               LSLS     R2,R0,#+28
   \   00000032   4CBF               ITE      MI 
   \   00000034   0822               MOVMI    R2,#+8
   \   00000036   4FF40022           MOVPL    R2,#+524288
   \   0000003A   ........           LDR.W    R3,??DataTable8_2  ;; 0x40010c10
   \   0000003E   1A60               STR      R2,[R3, #+0]
     32              GPIOB->BSRR = (data & (1<<4)) ? GPIO_BSRR_BS5  : GPIO_BSRR_BR5;
   \   00000040   C206               LSLS     R2,R0,#+27
   \   00000042   4CBF               ITE      MI 
   \   00000044   2022               MOVMI    R2,#+32
   \   00000046   4FF40012           MOVPL    R2,#+2097152
   \   0000004A   1A60               STR      R2,[R3, #+0]
     33              GPIOB->BSRR = (data & (1<<5)) ? GPIO_BSRR_BS4  : GPIO_BSRR_BR4;
   \   0000004C   8206               LSLS     R2,R0,#+26
   \   0000004E   4CBF               ITE      MI 
   \   00000050   1022               MOVMI    R2,#+16
   \   00000052   4FF48012           MOVPL    R2,#+1048576
   \   00000056   1A60               STR      R2,[R3, #+0]
     34              GPIOB->BSRR = (data & (1<<6)) ? GPIO_BSRR_BS10 : GPIO_BSRR_BR10;
   \   00000058   4206               LSLS     R2,R0,#+25
   \   0000005A   4CBF               ITE      MI 
   \   0000005C   4FF48062           MOVMI    R2,#+1024
   \   00000060   4FF08062           MOVPL    R2,#+67108864
   \   00000064   1A60               STR      R2,[R3, #+0]
     35              GPIOA->BSRR = (data & (1<<7)) ? GPIO_BSRR_BS8  : GPIO_BSRR_BR8;
   \   00000066   0006               LSLS     R0,R0,#+24
   \   00000068   4CBF               ITE      MI 
   \   0000006A   4FF48070           MOVMI    R0,#+256
   \   0000006E   4FF08070           MOVPL    R0,#+16777216
   \   00000072   0860               STR      R0,[R1, #+0]
     36          
     37              // WR_STROBE
     38          }
Если все линии GPIOA и GPIOB расположить группами, пожертвовав наглядностью, можно уменьшить код ещё на несколько асм-инструкций.

Если можно ещё как-то оптимизировать код по скорости и объёму - пусть знающие подскажут.
Romantic вне форума   Ответить с цитированием
Старый 03.08.2016, 13:58   #457
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 47
Сообщений: 3,760
Вес репутации: 6211/145
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Выделить один порт под дисплей и не парить мозг...
dosikus вне форума   Ответить с цитированием
Старый 03.08.2016, 19:10   #458
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
Post Re: STM32 для чайников

Цитата:
Сообщение от dosikus Посмотреть сообщение
Выделить один порт под дисплей и не парить мозг...
Согласен, самый простой и прямой путь. Но фишка в том что я использую шилд который брал еще для ардуино. Подключается он к Nucleo и что бы не городить провода использовалась штатная распиновка шилда. Вот как то так.... В дальнейшем будут браться голые TFT панели, разводиться плата устройства, а поменять расположение порта уверен труда не составит. Да и периферия будет использоваться по максимуму. Так что даже используя ремап может не получиться 8 бит подряд на одном порту.

Последний раз редактировалось diger67; 03.08.2016 в 19:16.
diger67 вне форума   Ответить с цитированием
Старый 03.08.2016, 19:28   #459
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Romantic, такая редакция функции мало того что понятна, так еще и увеличивает скорость вывода информации в память TFT от 1.5 до 2 раз. Точно не измерял, но видно визуально. Такого не ожидал, была проблема с выводом в порт. Огромное спасибо....
diger67 вне форума   Ответить с цитированием
Старый 05.08.2016, 14:59   #460
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от diger67 Посмотреть сообщение
Romantic, такая редакция функции мало того что понятна, так еще и увеличивает скорость вывода информации в память TFT от 1.5 до 2 раз. Точно не измерял, но видно визуально. Такого не ожидал, была проблема с выводом в порт. Огромное спасибо....
Рад помочь.

В своё время, в начале изучения мелкочиповских камней, один "спец" подсадил меня на библиотеки, аргументируя это тем, что их писали специалисты, они вдоль и поперёк отлажены и эффективны, их применение сокращает время написания программы. Долго пришлось потом выдавливать их из себя по капле. Теперь я большой сторонник использования регистров напрямую, без применения оболочек, дающих мнимое удобство и требующих в разы больше накладных расходов по сравнению с прямым действием.
Romantic вне форума   Ответить с цитированием
Старый 05.08.2016, 16:48   #461
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 33
Сообщений: 1,378
Вес репутации: 2432/80
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Romantic Посмотреть сообщение
Долго пришлось потом выдавливать их из себя по капле. Теперь я большой сторонник использования регистров напрямую, без применения оболочек, дающих мнимое удобство и требующих в разы больше накладных расходов по сравнению с прямым действием.
Это все лечится пониманием как работает компилятор с оптимизацией. Если брать SPL и IAR, то при оптимизации по скорости вся работа с периферией (не беру инициализацию) сводится к прямой работе с регистрами. Библиотеки - это ваши наработки, в том числе, вы же не переписываете каждый раз все с нуля?
Рак вне форума   Ответить с цитированием
Старый 05.08.2016, 17:01   #462
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Рак Посмотреть сообщение
Это все лечится пониманием как работает компилятор с оптимизацией. Если брать SPL и IAR, то при оптимизации по скорости вся работа с периферией (не беру инициализацию) сводится к прямой работе с регистрами. Библиотеки - это ваши наработки, в том числе, вы же не переписываете каждый раз все с нуля?
Я имел в виду кубообразные помёты бангалорских борзописцев с настройкой одной ноги через чудовищного вида структуру...
Romantic вне форума   Ответить с цитированием
Старый 05.08.2016, 17:24   #463
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 33
Сообщений: 1,378
Вес репутации: 2432/80
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Romantic Посмотреть сообщение
Я имел в виду кубообразные помёты бангалорских борзописцев с настройкой одной ноги через чудовищного вида структуру...
Обыно инит портов делается один раз при старте, согласен, что можно оптимальней, но это же один раз. Я не спец в HAL, еще не до конца понял его философию, но инициализация FreeRTOSa, USB CDC и тактового генератора галочками мне понравилась.
Рак вне форума   Ответить с цитированием
Старый 05.08.2016, 17:34   #464
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Рак Посмотреть сообщение
Обыно инит портов делается один раз при старте, согласен, что можно оптимальней, но это же один раз.
Это не повод рвать зубы через анус, дружище И потом, мне кажется, что единообразие методов является хорошим подходом при кодировании. В противном случае, есть риск развести такой зоосад, что потом в нём будет трудно провернуть лопатой. Особенно спустя некоторое время.

Да и потом, всякие инициализации требуют не так много времени на правку/написание. А попытка передоверить её стороннему ресурсу может быть чревата - модули могут меняться от камня к камню, от ревизии к ревизии, и если не читать RM/DS, то можно потратить много времени на поиск непонятных сбоев.
Romantic вне форума   Ответить с цитированием
Старый 05.08.2016, 19:13   #465
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,885
Вес репутации: 5553/170
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Romantic Посмотреть сообщение
Я, наверное, совсем отупел. Объясните мне, пожалуйста, что может быть проще (визуально), быстрее по исполнению и меньше по объёму, чем
if(byte & 0x02)
или
if(byte & (1 << 1))
в случае замены константы на более очевидную позицию? В этом варианте, в отличие от варианта автора, вообще нет никаких сдвигов, выполняемых в рантайме. Есть только побитовое И переменной и константы. MCC18 в таком случае должен пользовать btfsc/btfss, да и ХС8 тоже... Вариант, предложенный уважаемым DimaS, по сути тот же самый, только упакован в тернарный оператор (так короче код и эффективнее исполнение, по идее).

Или нет? (С)
нет, критике подвергался вариант от дигера, да вроде ему и был ответ.
отродясь такого не встречал...

Код:
if(((data >> 1) & 0x01) == 1) {DB1(1);} else {DB1(0);}
if(((data >> 2) & 0x01) == 1) {DB2(1);} else {DB2(0);}
  if(((data >> 3) & 0x01) == 1) {DB3(1);} else {DB3(0);}
  if(((data >> 4) & 0x01) == 1) {DB4(1);} else {DB4(0);}
  if(((data >> 5) & 0x01) == 1) {DB5(1);} else {DB5(0);}
  if(((data >> 6) & 0x01) == 1) {DB6(1);} else {DB6(0);}
if(((data >> 7) & 0x01) == 1) {DB7(1);} else {DB7(0);}
Greg вне форума   Ответить с цитированием
Старый 05.08.2016, 20:32   #466
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Раз уж пошла такая пьянка, шутка, то вопрос. Правильно ли я прописал функцию для чтения из TFT. Понятно что биты виртуального порта предварительно переведены в режим floating.
Цитата:

#define setReadDirInline() { \
GPIOA->CRH = ((GPIOA->CRH &= 0xFFFFF000) | 0x00000444); \
GPIOC->CRL = ((GPIOC->CRL &= 0x0FFFFFFF) | 0x40000000); \
GPIOB->CRL = ((GPIOB->CRL &= 0xFF000FFF) | 0x00444000); \
GPIOB->CRH = ((GPIOB->CRH &= 0xFFFFF0FF) | 0x00000400); \
}

#define read8inline(result) { \
RD(ON); \
delay_ms(1); \
result = (((GPIOA->IDR & GPIO_Pin_9) ? (1<<0) : (0<<0)) | ((GPIOA->IDR & GPIO_Pin_10) ? (1<<2) : (0<<2)) | ((GPIOA->IDR & GPIO_Pin_8) ? (1<<7) : (0<<7))\
| ((GPIOC->IDR & GPIO_Pin_7) ? (1<<1) : (0<<1))\
| ((GPIOB->IDR & GPIO_Pin_3) ? (1<<3) : (0<<3)) | ((GPIOB->IDR & GPIO_Pin_5) ? (1<<4) : (0<<4)) | ((GPIOA->IDR & GPIO_Pin_4) ? (1<<5) : (0<<5)) | ((GPIOA->IDR & GPIO_Pin_10) ? (1<<6) : (0<<6)));\
RD(OFF);}
Вопрос возник потому что при попытке считать идентификатор TFT выдает ерунду. Правда он китайский и вполне вероятно подделка, поэтому в регистре где он должен храниться ничего не записано.

Последний раз редактировалось diger67; 05.08.2016 в 20:38.
diger67 вне форума   Ответить с цитированием
Старый 05.08.2016, 20:42   #467
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от diger67 Посмотреть сообщение
Правильно ли я прописал функцию для чтения из TFT. Понятно что биты виртуального порта предварительно переведены в режим floating.
В принципе, так работать будет. Только непонятно, зачем при такой-то задержке в 1 мс (кстати, не многовато?) описывать действия через макроопределение? Может, тут как раз стоит выделить их в функцию - и на скорость не повлияет (можно уменьшить задержку на длительность функции, если очень захочется), и флешь сэкономите (особенно если много где производится чтение).

Ну, и отформатировать бы по-человечески

Цитата:
Вопрос возник потому что при попытке считать идентификатор TFT выдает ерунду. Правда он китайский и вполне вероятно подделка, поэтому в регистре где он должен храниться ничего не записано.
Вы не указали, что за контроллер в Вашем дисплее. Если какой-нибудь SSD-совместимый, то Вы, быть может, забываете про dummy read.
Romantic вне форума   Ответить с цитированием
Старый 05.08.2016, 20:48   #468
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Romantic Посмотреть сообщение
В принципе, так работать будет. Только непонятно, зачем при такой-то задержке в 1 мс (кстати, не многовато?) описывать действия через макроопределение? Может, тут как раз стоит выделить их в функцию - и на скорость не повлияет (можно уменьшить задержку на длительность функции, если очень захочется), и флешь сэкономите (особенно если много где производится чтение).

Ну, и отформатировать бы по-человечески
Задержка минимальная, которую можно организовать используя системный тайминг. Попытка сделать задержку uS с помощью
Цитата:
SysTick_Config(SystemCoreClock/1000); //1mS
дала странный результат, начинает работать и уходит в хардовую ошибку. Надо uS формировать по другому. Продавец указал чип TFT R61581, но инициализируется он прекрасно и как ili9488. Есть ньанс, вывод RD не выведен, просмотрев даташит приблизительно вычислил на шлейфе и припаял проводок к свободному контакту разъема.

Последний раз редактировалось diger67; 05.08.2016 в 20:56.
diger67 вне форума   Ответить с цитированием
Старый 05.08.2016, 20:51   #469
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от diger67 Посмотреть сообщение
Надо uS формировать по другому.
Если Вы планируете обращаться к видеопамяти дисплея для перевычисления изображения, такая задержка всё подвесит. Способ организации задержки следует выбирать не из доступных под рукой, а из требуемого результата, видимо
Romantic вне форума   Ответить с цитированием
Старый 05.08.2016, 20:55   #470
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Romantic Посмотреть сообщение
Если Вы планируете обращаться к видеопамяти дисплея для перевычисления изображения, такая задержка всё подвесит. Способ организации задержки следует выбирать не из доступных под рукой, а из требуемого результата, видимо

И ещё раз продублирую из прошлого сообщения:
Вы не указали, что за контроллер в Вашем дисплее. Если какой-нибудь SSD-совместимый, то Вы, быть может, забываете про dummy read.
Это понятно, сейчас надо было оптимизировать и заставить корректно работать то что уже написано. Повторюсь, чип R61581, так продавец утверждает.
diger67 вне форума   Ответить с цитированием
Старый 05.08.2016, 21:02   #471
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 34
Сообщений: 2,094
Вес репутации: 3340/98
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от diger67 Посмотреть сообщение
Это понятно, сейчас надо было оптимизировать и заставить корректно работать то что уже написано. Повторюсь, чип R61581, так продавец утверждает.
Из того, что я увидел в ДШ на R61581 (см. Read Cycle Sequence, стр. 43, рис.7 и 8), там и Dummy data есть (т.е. первый байт в мусор, можно просто прощёлкать один такт, вообще не читая), и порядок доступа к шине такой:
- Вы опускаете RDX, и контроллер дисплея начинает на ней шаманить;
- Вы поднимаете RDX (после некоей задержки, см. временные спецификации), и начинаете читать данные тут же, не отходя от кассы;
- по прошествии некоторого времени (см. спецификации) контроллер дисплея отпускает шину данных, чтобы Вы могли на ней что-нибудь выставить (видимо), и не получилось состязания на шине.
Romantic вне форума   Ответить с цитированием
Старый 05.08.2016, 21:10   #472
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Вот так читается все 4 регистра, можно просто пару раз сделать RD_STROBE и забрать последнии два. это конечно уменьшит код.
Цитата:
uint32_t readReg(uint8_t r) {
uint32_t id;
uint8_t x;

// try reading register #4
SS(ON);
RS(COM);
TFT_command(r);
setReadDirInline(); // Set up LCD data port(s) for READ operations
RS(DAT);
delay_ms(1);
read8inline(x);
//x = TFT_Read_data();
id = x; // Do not merge or otherwise simplify
id <<= 8; // these lines. It's an unfortunate
read8inline(x);
//x = TFT_Read_data();
id |= x; // shenanigans that are going on.
id <<= 8; // these lines. It's an unfortunate
read8inline(x);
//x = TFT_Read_data();
id |= x; // shenanigans that are going on.
id <<= 8; // these lines. It's an unfortunate
read8inline(x);
//x = TFT_Read_data();
id |= x; // shenanigans that are going on.
SS(OFF);
setWriteDirInline(); // Restore LCD data port(s) to WRITE configuration

return id;
}
diger67 вне форума   Ответить с цитированием
Старый 06.08.2016, 13:56   #473
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Доковырял функции ReadID, TFT_Read_data. Проблемма была в сигнале SS(выбор чипа), проверил с TFT на котором выведен сигнал RD все читается, на тестовом видимо неправильно вычислил на шлейфе или его просто там нет.
diger67 вне форума   Ответить с цитированием
Старый 06.08.2016, 14:51   #474
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 51
Сообщений: 202
Вес репутации: 211/18
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32 для чайников

Народ, кому верить RM где описывается 1 регистр BSRR по адресу 0х18 или stm32f4xx.h где описываю BSRRL и BSRRH. Я немного в ступоре....
diger67 вне форума   Ответить с цитированием
Старый 06.08.2016, 17:20   #475
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 57
Сообщений: 2,831
Вес репутации: 3992/109
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от diger67 Посмотреть сообщение
Я немного в ступоре....
Ну и что??? Кто мешает вам самому... поправить хедер ручками... или объявить BSRR по своему???
__________________
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Производительность STM32 Cortex M3 Pridnya Микроконтроллеры других производителей 43 16.10.2013 12:29
fatfs +usb Помогите разобраться сфайловой системой для stm32 Natali Вопросы начинающих 1 19.07.2012 11:00
Проект автономки для авто на pic16f84a Томас Продукция MICROCHIP 14 11.03.2012 21:37
Тайминги для 1-wire Wierus Общетехнические вопросы 15 21.09.2009 21:46
господа, где добыть для ознакомпления среду разработки для FUJITSU dynaco Общетехнические вопросы 2 04.06.2007 06:10


Часовой пояс GMT +3, время: 01:30.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot