Перейти к содержанию
    

Allwinner V3s BareMetal -попытки

24.01.2021 в 15:01, nanorobot сказал:

Эта область памяти чем то уникальна?  В V3S тоже есть аналогичная? Доступные даташиты для v3s и h4 слова coherent не знают..

Тут скорее всего касается кэширования, т.к. ДМА работает только с некэшируемой памятью, ну и кратность 32м битам задавать не забывайте, если работаете с кэшируемым регионом, не забывайте сбрасывать кэш. Мне больше нравится использовать буферируемые регионы, да, ускоряется только запись, но за-то не надо сбрасывать кэш...

Изменено пользователем mantech

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


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

Очередная сложность. Допилил штатный драйвер UART  RT-Thread  для работы с прерываниями/дма- изначально такой возможности в нем нет, хотя и предусматривалась (возможность использования флага RT_DEVICE_FLAG_DMA_TX  при открытии). Так вот получить прерывание по ПОЛНОМУ ОКОНЧАНИЮ передачи (мне необходимо управлять переключением драйвера RS485) не получается никаким образом.  Прерывание происходит по опустошению регистра хранения передаваемого символа, а не сдвигового регистра передачи. То есть последний символ еще передается, а прерывание по окончании передачи уже случилось. Что то здесь китайские товарищи не доработали.. Можно конечно и таймер запустить на передачу последнего символа, но это уже какой то некрасивый костыль. У уважаемых гуру эта проблема решена?

 

 

PS. Предположил, что в этом вопросе может помочь 7 бит  из регистра UART_IER описанный как "Programmable THRE Interrupt Mode Enable" - но тоже нет. Назначение данного бита как то совсем неясно.

Изменено пользователем nanorobot

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


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

3 hours ago, nanorobot said:

Что то здесь китайские товарищи не доработали.. Можно конечно и таймер запустить на передачу последнего символа, но это уже какой то некрасивый костыль.

Китайские товарищи ни при чем, это особенность "классического" 16550.

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


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

19 minutes ago, aaarrr said:

Китайские товарищи ни при чем, это особенность "классического" 16550.

Похоже не совсем 16550. У того 7 бита в IER не было.. :acute:
.. то есть для RS 485 только таймер.

Изменено пользователем nanorobot

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


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

1 час назад, nanorobot сказал:

Похоже не совсем 16550. У того 7 бита в IER не было.. :acute:
.. то есть для RS 485 только таймер.

 

Обычно в 485-м есть возможность приема своих данных, поэтому можно по приему своего последнего символа переключать драйвер.

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


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

1 час назад, nanorobot сказал:

Похоже не совсем 16550. У того 7 бита в IER не было..

Не совсем... Недавно нужно было работать с битом четности, так его там тоже не было, хотя в оригинальном 16550 он есть, это нужно иметь ввиду, т.к. совместимый не означает такой же точно...

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


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

19 minutes ago, Edit2007 said:

Обычно в 485-м есть возможность приема своих данных, поэтому можно по приему своего последнего символа переключать драйвер.

Мысль интересная.  Единственое "но" в том что слегка нарушается идеология rt-thread в плане использования rt_device. Хотя вероятно этим можно пренебречь. Возможно там и все драйвера не лучше уартовского. использовать только шедулер, сервисы ядра...

 

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


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

Предыдущий вопрос решил использованием таймера. UART + RS485 в режиме  DMA  работает. Следующий пункт I2C. При наличии  в V3S аппаратных итерфейсов TWI (I2C)   драйвера I2C для RT-Thread   @V3S реализованы ногодрыгом и запустить их пока не удалось. Решил писать свой, используя аппаратный TWI.  Роюсь в тех же исходниках - rpidmx512 и XBOOT. Ни в одном из них не обнаружил использования регистров I2C_ADDR  и I2C_XADDR - они вообще зачем то нужны?

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


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

6 minutes ago, Obam said:

А как думаете, адрес ведомого зачем-то нужен? А длиннее байта?

Да я уже понял что бред написал. Чисто глядя исходники инициализации мастера. Про режим слейва мысль в голову не зашла. Ну уж удалять не стал. А I2C аппаратный запустил. Пять минут назад, буквально.

Изменено пользователем nanorobot

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


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

20 часов назад, nanorobot сказал:

@V3S реализованы ногодрыгом и запустить их пока не удалось. Решил писать свой, используя аппаратный TWI.

Смотрю, вы не ищите легких путей)))  Мастера всегда ногодрыгом делал, ибо раз напоролся на необъятную еррату в СТМ - ну его нафиг, преимущества от аппаратного мастера не вижу совсем, а ногодрыг портируется за полчаса, да и пины можно выбрать любые, что тоже бывает важно...

Изменено пользователем mantech

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


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

4 hours ago, mantech said:

Смотрю, вы не ищите легких путей)))  Мастера всегда ногодрыгом делал, ибо раз напоролся на необъятную еррату в СТМ - ну его нафиг, преимущества от аппаратного мастера не вижу совсем, а ногодрыг портируется за полчаса, да и пины можно выбрать любые, что тоже бывает важно...

 

Ну не знаю... На  v3s аппаратный TWI запустил за один день, при условии что с камешком раньше дела не имел, не показалось что долго. Из преимуществ - возможность сделать всю работу по прерываниям.. Ну вот  есть у меня такой фетиш - реалтайм...

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


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

16 минут назад, nanorobot сказал:

На  v3s аппаратный TWI запустил за один день,

Так я на СТМ его вообще за пол-дня запустил, а потом начали выплывать косяки, то не отработает, то зависнет или пропадет связь... 

16 минут назад, nanorobot сказал:

Из преимуществ - возможность сделать всю работу по прерываниям.. Ну вот  есть у меня такой фетиш - реалтайм...

Я понимаю, уарт по прерываниям или считывание портов, ну даже СПИ, на высокой скорости, а тут какой смысл этим полностью контроллируемым и синхронным интерфейсом, да еще и относительно медленным с кучей пром. состояний, загружать прерывания?? Сомнительно это как по мне... У меня в прогах этот и2с в самом низком приоритете работает, и вполне справляется (конечно никогда не использую его извращенным образом, например для дисплеев или других устройств, требующих большой скорости или объемов данных), так мелкие еепромки, тачпанели или конфигурация АЦП\ЦАП и подобных...

Изменено пользователем mantech

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


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

Чисто глядя исходники инициализации мастера. Про режим слейва мысль в голову не зашла.


А разве ведущему не надо хранить адрес ведомого? Как автомат сформирует


цепочу в танзакции?

Изменено пользователем Obam

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


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

Не понял. Зачем ведущему хранить адрес ведомого где то, кроме памяти.  По крайней мере в случае использования аппаратного TWI, как мастера, регистры I2C_ADDR  и I2C_XADDR не используются. Поясните Вашу мысль?

Изменено пользователем nanorobot

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

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

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

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

×
×
  • Создать...