RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Май 2024
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031  

Календарь Календарь

Последние темы
» Вити больше нет!
автор bug19 Пн Фев 20 2023, 19:54

» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47

» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05

» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03

» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02

» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52

» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36

» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37

» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33

» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00

» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17

» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07

» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08

» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09

» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02

» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47

» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11

» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33

» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38

» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12

» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01

» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22

» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08

» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08

Самые активные пользователи за месяц
Нет пользователей

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


К210. Общая тема по GPIO. Практика.

Страница 1 из 2 1, 2  Следующий

Перейти вниз

К210. Общая тема по GPIO. Практика. Empty К210. Общая тема по GPIO. Практика.

Сообщение  Viktor2312 Чт Окт 29 2020, 14:17

1
Универсальный интерфейс ввода-вывода
(General Purpose Input/Output Interface, GPIO).


Практика.


Последний раз редактировалось: Viktor2312 (Пт Окт 30 2020, 15:14), всего редактировалось 2 раз(а)

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пт Окт 30 2020, 14:46

2
К210. Общая тема по GPIO. Практика. K210_l10
https://cloud.mail.ru/public/EKM6/wDBoHLoNn
Данный проект мигает 3 светодиодами (настройка периферии, уарта и порта вв) по сути на выводах 23,25,26 идет меандр на 500мС.
Добавлю еще один немаловажный факт. Всего ножек на порт ввода вывода можно проинициализировать 32!!
И на будущее, ознакомиться со всеми функциями периферии ножек можно в файле fpioa.h. Это все, что умеет сдк данного процессора, если и есть какие либо скрытые функции - нам этого не узнать никогда. Как видим - есть 2 оочень навороченных порта SPI, 3 полноценных уарта, потрясающий I2S. Ну и к всеобщей радости добавлено 12 шим портов. Из плюшек есть отладка Jtag, пока не проверял, хоть jlink и имеется.


Немного по схеме - выведено самое необходимое, если проблема с количеством светодиодов - то 2 можно не ставить, кнопки просто необходимы, с помощью них программист зашивает в процессор программу. Перевести процессор в режим программирования просто. Нажимаешь и удерживаешь ресет, нажимаешь и удерживаешь бут. отпускаешь ресет, процессор готов к прошивке. Питания достаточно 5 вольт, ноги 3,3В и 1,8В это ВНУТРЕННИЕ стабилизаторы. Я бы вообще рекомендовал их не трогать, так как по нагрузочной способности их нигде не прочитал.


Последний раз редактировалось: ведущий_специалист (Пт Окт 30 2020, 15:19), всего редактировалось 2 раз(а) (Обоснование : Добавил описание по схеме.)
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  Viktor2312 Пт Окт 30 2020, 15:04

3
Зачем всё так сложно, мы не можем просто взять один порт и помигать светодиодом на нём. Давайте проще, без уартов, кнопок и всего остального. Для начала нужно что-то совсем простое и элементарное, чтобы понять с чего начинать и как. Возьмём например порт io0 и настроем его как положено. Чтобы понять какие нужны файлы, и вообще чтобы понимать, что да как. Сначала код, думаю он будет прост и вы его по памяти можите набрать. Я всё равно средой ещё не умею пользоваться и посмотреть этот проект по ссылке не смогу. А нужно подробно по действиям, что нажать, для чего мы это нажали, что написать, для чего и почему мы это написали, и скомпилировать, чтобы получить рабочий проект, но только для одного порта,  одним светодиодом. То есть по сути, рассмотреть настройку порта на вывод от и до готового такого простейшего проекта.

Потому, что я вот читаю программинг мануал, но не всё понятно, как это сделать в среде разработки, что нужно обязательно настраивать, а что нет. Поэтому нужен максимально простой пример и код пока лучше тут выложить текстом.

К210. Общая тема по GPIO. Практика. 9ed_0031

Куча файлов и папок, я понятия не имею откуда они взялись, что сними делать и куда их пхать...

А нужно вот с самого начала, как создать проект с нуля, простейший. То есть вот запускаю я среду разработки и что дальше делать, в какой последовательности.


Последний раз редактировалось: Viktor2312 (Пт Окт 30 2020, 15:22), всего редактировалось 1 раз(а)

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пт Окт 30 2020, 15:21

4
Viktor2312 пишет:Зачем всё так сложно, мы не можем просто взять один порт и помигать светодиодом на нём. Давайте проще, без уартов, кнопок и всего остального.

К сожалению проще уже некуда. По уарту процессор нужно прошивать, кнопки переводят процессор в режим загрузки ПО. Светодиоды, по барабану, по сути пример все поясняет, что одним мигать что тремя.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  Viktor2312 Пт Окт 30 2020, 15:24

5
Хорошо, вот я запустил среду разработки, что мне нужно сделать, чтобы начать свой проект с нуля ?

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пт Окт 30 2020, 15:43

6
Viktor2312 пишет: Я всё равно средой ещё не умею пользоваться
Вот поэтому , считаю что нужно тогда начать с описания пользования средой программирования и настройкой первого проекта. Если честно, эта среда разрабатывалась для ардуинщиков и по сути 3 тыка мышки и проект готов. Но если пока что разобраться сложно - можно подготовить и это.

Оффтоп, я скорее всего в ближайшие 2 дня ухожу в запой, с понедельника можно начать.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пт Окт 30 2020, 15:50

7
Viktor2312 пишет:Хорошо, вот я запустил среду разработки, что мне нужно сделать, чтобы начать свой проект с нуля ?
Чтобы открыть проект, нужно ткнуть File - Open folder - и показать где лежит папка с проектом.
То, что Вы показали постом выше, это содержимое той папки, которую нужно подсунуть среде. Platform IO САМА "распхает" все файлы куда да что ей нужно. А то , что проект сам содержит столько папок - я фиг знает, так надо и об этом думать не нужно. Знаю только , что в папке SRC лежат исходники проекта.
Чтобы начать новый проект, жмем на домик внизу слева экрана, смотрим Quick access, там верхняя кнопка +New project, выбираем плату  и жмем кнопку финиш.
К210. Общая тема по GPIO. Практика. K210_l11
По сути проект будет готов, добавляем в него майн.с и все готово
К210. Общая тема по GPIO. Практика. K210_l12
Чтобы откомпилировать проект, нужно нажать на галочку рядом с домиком, зашить в плату - нажать на стрелку вправо
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty .

Сообщение  Viktor2312 Пт Окт 30 2020, 19:12

8
Оффтоп, я скорее всего в ближайшие 2 дня ухожу в запой, с понедельника можно начать.

Жаль. А у меня вот э/э рубанули, и в этот, 3-й раз за год надолго, что я посидел посидел часок, и пошёл шампусика пригубил, от нечего делать, но в сб и вс. собирался интенсивно изучать, так как с пн. много работы, времени будет мало свободного. Ну ничего, не последний же день живём, я пока почитаю мануалы, может и разберусь, побольше, чем сейчас. Пока почитаю, что вы постили, подумаю, уверен что я просто сильно туплю в начале, как это обычно, потом сам буду прикалываться над своей глупостью в начале изучения...

Но всё равно. Приятного вам отдыха !

выбираем плату и жмем кнопку финиш.

Вот тут тоже вопрос, а если у нас не конкретная плата, а мы её сами сделали, то что мы будем выбирать ?

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пт Окт 30 2020, 19:22

9
Viktor2312 пишет:
Вот тут тоже вопрос, а если у нас не конкретная плата, а мы её сами сделали, то что мы будем выбирать ?
Совсем не важно, процессор один и тот же. Ядро одинаковое, SDK на всех одна, поэтому можно выбирать любую плату с этим процессором. Отличия скорее всего будут , если мы будем программировать под ардуино, но в этих статьях точно ардуина упоминаться не будет.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пт Окт 30 2020, 19:52

10
Viktor2312 пишет:.... но не всё понятно, как это сделать в среде разработки, что нужно обязательно настраивать, а что нет. Поэтому нужен максимально простой пример и код ....
А нужно вот с самого начала, как создать проект с нуля, простейший. То есть вот запускаю я среду разработки и что дальше делать, в какой последовательности.

Тот код что дал - это и есть максимально простой вариант развития. Там ничего лишнего, все что там есть, это уарт и настройка портов. Все остальное кроме портов и уарта это просто нужные вещи в проекте и без них никак. Тем более, что мы же не будем ограничивать себя простым миганием светодиода, а будем развивать периферию дальше.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty .

Сообщение  Viktor2312 Вс Ноя 01 2020, 23:21

11
Для того, чтобы въехать первый проект нужно самому мне создать с объяснением каждой строчки, для чего она, откуда берётся, и что мы делаем когда её добавляем и как она будет работать. Потому что некоторые строчки, слова понятны, а некоторые видел, но не знаю как они работают, поэтому давайте я лучше создам свой проект под вашим чутким руководством, не спеша, по сути ваш test1. Обзову я его MY_TEST_002_LED_UART и буду потихоньку создавать, показывая что я делаю, либо спрашивая как сделать. Пока создам, ...002..., так как уже 001 создал пустой и добавил файл main.c и покажу тут как делал. Пусть будет для памяти, она у меня дырявая вечно всё забываю, возможно ещё кому-то пригодится. Ну и главное вы скажите правильно ли я сделал и всё ли я сделал, или ещё что-то нужно добавить, например файл с расширением .h

Итак запускаю Visual Studio Code

К210. Общая тема по GPIO. Практика. K210_010

И нажимаю кнопку New Project

К210. Общая тема по GPIO. Практика. K210_011

Указываю имя проекта, забиваю название платы, чтобы долго не искать, как появляется в списке выбираю нужную плату и нажимаю кнопку Finish. Проект создался со всеми необходимыми папками:

К210. Общая тема по GPIO. Практика. K210_012

Теперь нажимаю правой кнопкой мыши на папке src и в выпавшем окошке выбираю пункт меню New File

К210. Общая тема по GPIO. Практика. K210_013

В появившейся строке ввода набираю имя файла main.c и он появляется в соответствующей папке src и можно в поле редактора вводить текст программы:

К210. Общая тема по GPIO. Практика. K210_014

Вот интересно, правильно ли я всё сделал. Могули я приступать к написанию программы, которая будет в файле main.c и не нужно ли что-то ещё добавлять (хотелось бы пока всю программу делать только в файле main.c) Так как, как я понял, вы сделали все инициалицации в отдельном файле и потом добавили этот файл в маин, но об этом потом, не буду забегать в перёд, пока интересно насчёт того, что сделал на данный момент, правильно или нет, и нужно ли ещё что-то добавлять, на этом этапе ?

Продолжение:
Вопрос.
Могу ли я вот это всё, что ниже, из файла bsp.h разположить непосредственно в файле main.c   на данный момент, на данном этапе изучения, или всё же критично иметь этот файл с расширением .h

#ifndef _BOARD_CONFIG_
#define _BOARD_CONFIG_

#include "sysctl.h"
#include "atomic.h"
#include "encoding.h"
#include "entry.h"
#include "printf.h"
#include "syscalls.h"
#include <uarths.h>
#include "gpiohs.h"
#include <sleep.h>
#include <fpioa.h>
#include <plic.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define u16 uint16_t
#define u8 uint8_t

void io_set_power(void);
void system_init(void);

#define Led1_PIN  22
#define Led2_PIN  24
#define Led3_PIN  25

/* power domain set */
#define POWER_BANK0_SELECT SYSCTL_POWER_V33
#define POWER_BANK1_SELECT SYSCTL_POWER_V33
#define POWER_BANK2_SELECT SYSCTL_POWER_V33
#define POWER_BANK3_SELECT SYSCTL_POWER_V33
#define POWER_BANK4_SELECT SYSCTL_POWER_V33
#define POWER_BANK5_SELECT SYSCTL_POWER_V33
#define POWER_BANK6_SELECT SYSCTL_POWER_V33
#define POWER_BANK7_SELECT SYSCTL_POWER_V33

#endif

______________________________________________________________________________________

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пн Ноя 02 2020, 11:24

12
Все действия сделаны правильно. То есть проект создан правильно, да и по другому как то и не сделать. Все #include можно прописать и в main.c , опустив #ifndef _BOARD_CONFIG_
#define _BOARD_CONFIG_ и #endif. Я почему раскидал все это по разным файлам, просто для удобочитаемости программы. Накидывать все в main.c "дурной тон" не более. Просто когда пишешь код и программа разрастается на тыщщу строк, согласитесь, в такой каше черт ногу сломит.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty .

Сообщение  Viktor2312 Пн Ноя 02 2020, 12:38

13
#define u16 uint16_t
#define u8 uint8_t

Вот здесь мне понятно, мы сделали то же самое, что и когда дали имена нашим портам вот тут:

#define Led1_PIN  22
#define Led2_PIN  24
#define Led3_PIN  25

Теперь мы в программе будем писать не 22, то есть IO22 наш порт подразумевать, а Led1_PIN и т. д. Так и тут, чтобы не писать каждый раз длинное uint16_t, мы будем писать u16 или u8.

А вот эта конструкция:

#define _BOARD_CONFIG_

Мне не понятна, можете дать по ней краткое пояснение.

Так же хотелось бы краткое пояснение и по этой конструкции, что ниже, для чего она используется:

#ifndef _BOARD_CONFIG_
...
...
#endif

А вот тут больше интересует void я так понимаю, это мы указываем тип, но я не совсем пойму, что это за тип, и как он работает:

void io_set_power(void);
void system_init(void);

Сама конструкция, io_set_power как вроде по смыслу понятна (установка питания портов) и (инициализация системы), но почему с void в начале, а не например int и почему void в скобочках, а не, например, просто (). Можите и это как-то кратенько пояснить.

и почему void в скобочках, а не, например, просто ().

Про это я понял, немного, прочитав свой же конспекс по Си:

Ключевое слово void, которое находится в круглых скобках, означает, что в функцию main не передаётся никаких аргументов. Функции в языке С похожи на подпрограммы. Обычно вы вольны придумывать любые имена для своих функций, но main - особое имя, любая программа начинает свои вычисления с первой инструкции функции main. Обычно main для выполнения своей работы пользуется услугами других функций, одни из них пишутся самим программистом, а другие берутся готовыми из имеющихся в его распоряжении библиотек. Один из способов передачи данных между функциями состоит в том, что функция при обращении к другой функции передаёт ей список значений, называемых аргументами. Этот список берётся в скобки и помещается после имени функции. В нашем примере main определена как функция, которая не ждёт никаких аргументов.

Про установку 3,3 В для питания банков, как вроде понятна...

Я думаю мне при написании моего main.c  нужно будет сначала переносить из bsp.h данные, потом из bsp.c и потом из main.c вашего. Это мне нужно для практики и понимания, не думаю, что этот пример у меня разрастётся до 2000 строк...

Ну, итак много вопросов, я пока пойду подумаю, почитаю, вчера ещё заметил, что есть помимо bsp.h ещё и .c файл с таким же названием, там более менее всё понятно, но вопросы есть.

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пн Ноя 02 2020, 15:25

14
Viktor2312 пишет:

.....прочитав свой же конспекс по Си:

..... но вопросы есть.

....но почему с void в начале
void - пусто. если в начале - значит ничего функция не возвращает, элементарные законы си.
int func(void) // функция должна возвратить значение но ей ничего из переменных присылать не нужно
пример
int func1(int param) // функция принимает переменную param и должна возвратить число например
int func1(int param)
{
if (param>100) return 100; // возвратим 100 и выйдем из функции
return 0; возвратим 0
}
Тут пока сам по книжке или по примерам не врубишь объясняй не объясняй.... )))
Можно я здесь не буду учить вас языку си?  Допустим для Вас я буду гуру в си, но поверте, есть куча людей , которые с удовольствием поучили бы меня )))).


Последний раз редактировалось: ведущий_специалист (Пн Ноя 02 2020, 15:40), всего редактировалось 3 раз(а)
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пн Ноя 02 2020, 15:27

15
Viktor2312 пишет:
#define u16 uint16_t
#define u8 uint8_t
Большинство компиляторов не знают что такое u8 поэтому в дефайне мы и прописали что u8 это char а u16 это 16ти битный инт.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  Viktor2312 Пн Ноя 02 2020, 16:11

16
void - пусто. если в начале - значит ничего функция не возвращает, элементарные законы си.
int func(void) // функция должна возвратить значение но ей ничего из переменных присылать не нужно
пример
int func1(int param) // функция принимает переменную param и должна возвратить число например
int func1(int param)
{
if (param>100) return 100; // возвратим 100 и выйдем из функции
return 0; возвратим 0
}

Спасибо, всё понятно и всё встало на свои места. Поверьте я уже и по книжке это прочитал и по своему конспекту, но не было понятно до конца, и вот благодаря вашему примеру, всё окончательно прояснилось и стало понятным. Жизнь намного сложнее, и иногда прочитаешь в справочнике и всё понятно, а иногда остаются сомнения из-за которых трудно двигаться дальше, и один абзац объяснения сильно помогает.

Тут пока сам по книжке или по примерам не врубишь объясняй не объясняй.... )))

Вышло как раз наоборот, по книжке, да и ни одной, не врубался, ваш пример с комментариями всё разяснил. Спасибо.

Можно я здесь не буду учить вас языку си?

Да я уж стараюсь поменьше спрашивать и побольше читать в книжках и инете, чтобы не сильно вас напрягать. Но и вы меня поймите, первый пример, пока всё даётся сложно, то что не знал, интенсивно сейчас учу, то что знал и учил, забылось напрочь. В итоге так же интенсивно сейчас перечитываю. Но пока больше сложность представляет, что я для РС читал, а у нас для МК, и я пока многое не могу понять. Тот же оператор printf ну там мне понятно, написали в скобочках "Привет мир" он и вывел на экран надпись, а тут явно он будет по другому работать, особенно в случае, если у нас из элементов отображения только светодиоды, в общим пытаюсь, стараюсь. Ну а если не спрашивать, то в итоге я встану на каком нибудь месте, и буду долго, нудно топтаться, не понимая и не способным продвигаться дальше, ну постараюсь поменьше спрашивать и побольше искать инфу на стороне...

Большинство компиляторов не знают что такое u8 поэтому в дефайне мы и прописали что u8 это char а u16 это 16ти битный инт.

Ну это вообще гениально, хотел про это спрашивать, одно предложение всё расставило на свои места, я про char и 16ти битный int.

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

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  Viktor2312 Пн Ноя 02 2020, 17:29

17
Вот что я накалякал, на данный момет:


#include "sysctl.h" //Добавляем заголовочные файлы
#include "atomic.h"
#include "encoding.h"
#include "entry.h"
#include "printf.h"
#include "syscalls.h"
#include <uarths.h>
#include "gpiohs.h"
#include <sleep.h>
#include <fpioa.h>
#include <plic.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define u16 uint16_t
#define u8 uint8_t
#define Led1_PIN  22
#define Led2_PIN  24
#define Led3_PIN  25

int main(void)
{
system_init(); // Здесь инициализируем все нужные и не нужные аппаратные модули для работы
   fpioa_set_function(Led1_PIN, FUNC_GPIOHS22);
   fpioa_set_function(Led2_PIN, FUNC_GPIOHS24);
   fpioa_set_function(Led3_PIN, FUNC_GPIOHS25);
   gpiohs_set_drive_mode(Led1_PIN, GPIO_DM_OUTPUT); //Led1
   gpiohs_set_pin(Led1_PIN, GPIO_PV_HIGH);
   gpiohs_set_drive_mode(Led2_PIN, GPIO_DM_OUTPUT); //Led2
   gpiohs_set_pin(Led2_PIN, GPIO_PV_HIGH);
   gpiohs_set_drive_mode(Led3_PIN, GPIO_DM_OUTPUT); //Led3
   gpiohs_set_pin(Led3_PIN, GPIO_PV_HIGH);

   sysctl_set_power_mode(SYSCTL_POWER_BANK0, SYSCTL_POWER_V33);
   sysctl_set_power_mode(SYSCTL_POWER_BANK1, SYSCTL_POWER_V33);
   sysctl_set_power_mode(SYSCTL_POWER_BANK2, SYSCTL_POWER_V33);
   sysctl_set_power_mode(SYSCTL_POWER_BANK3, SYSCTL_POWER_V33);
   sysctl_set_power_mode(SYSCTL_POWER_BANK4, SYSCTL_POWER_V33);
   sysctl_set_power_mode(SYSCTL_POWER_BANK5, SYSCTL_POWER_V33);
   sysctl_set_power_mode(SYSCTL_POWER_BANK6, SYSCTL_POWER_V33);
   sysctl_set_power_mode(SYSCTL_POWER_BANK7, SYSCTL_POWER_V33);

   sysctl_pll_set_freq(SYSCTL_PLL0, 800000000UL); // Инициализация частот процессора
   sysctl_pll_set_freq(SYSCTL_PLL1, 160000000UL);
   sysctl_pll_set_freq(SYSCTL_PLL2, 45158400UL);
   uarths_init();    // Инициализация последовательного интерфейса для вывода в UART отл. инф.
   plic_init();      // Инициализация прерываний (пока не используются)
   io_set_power();   // Настройка портов на напряжение
   init_pins();      // Настройка портов

   while(1)
   {
       gpiohs_set_pin(Led1_PIN, GPIO_PV_HIGH); // ножку в единицу
       gpiohs_set_pin(Led2_PIN, GPIO_PV_HIGH); // ножку в единицу
       gpiohs_set_pin(Led3_PIN, GPIO_PV_HIGH); // ножку в единицу
       msleep(100); // Задержка на 100 мc работает при помощи присутствующего файла "sleep.h"
       gpiohs_set_pin(Led1_PIN, GPIO_PV_LOW);  // ножку в 0
       gpiohs_set_pin(Led2_PIN, GPIO_PV_LOW);  // ножку в 0
       gpiohs_set_pin(Led3_PIN, GPIO_PV_LOW);  // ножку в 0
       msleep(100);
   }
}

Уж не знаю насколько это корректно, так как конкретного плана нет, что и в какой последовательности нужно добавлять, если всё делать в виде одного файла main.c Да и почитать об этом особо негде, чтобы было доходчиво и по пунктикам разжёвано.

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Пн Ноя 02 2020, 17:58

18
Все функции, которые вызываются из main должны прописаны выше майн. Если функция находится по тексту ниже main, то она должна быть прописана сверху вот так:
void system_init(void);
у вас же в тексте она вообще отсутствует, что при компиляции вызовет ошибку.
io_set_power(); // Настройка портов на напряжение
init_pins(); // Настройка портов ??
по тексту выше вы проделали это уже , зачем вызывать функцию повторно?
думаю system_init тоже уже не нужен, так как все оттуда переехало в главную функцию
uarths_init(); // Инициализация последовательного интерфейса для вывода в UART отл. инф.
plic_init(); // Инициализация прерываний (пока не используются)
а вот это библиотечные подпрограммы, и их нужно оставить.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty .

Сообщение  Viktor2312 Пн Ноя 02 2020, 21:12

19
Переписал, так всё правильно ?

К210. Общая тема по GPIO. Практика. K210_015
К210. Общая тема по GPIO. Практика. K210_016

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Вт Ноя 03 2020, 09:25

20
Одна ошибка. Сперва нужно проинициализировать частоту а потом настраивать периферию. Поэтому систем инит надо поместить двумя строками выше
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Чт Ноя 05 2020, 16:32

21
Ну что, едем дальше? изучаем пины на вход с подтяжками и прерываниями?
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty .

Сообщение  Viktor2312 Чт Ноя 05 2020, 22:59

22
Ну что, едем дальше? изучаем пины на вход с подтяжками и прерываниями?

Можно, хотя у меня ещё по прежнему много вопросов по тому, что мы сделали на данный момент. Да я и не пробовал даже компилировать написанный код, свой, сташшшно. Я где-то читал, но сейчас не помню где, про заголовочные файлы, когда они должны быть в "ххххх.х", а когда в <ххххх.х>, вот хочу этот момент прояснить. К тому же когда я открывал ваш проект test1 они у меня подчёркивались и ругалось что-то на путь, хотелось бы понять, где эти файлы находятся, когда и как мы их добавляли, и другую полезную информацию по ним. Например, описание заголовочных файлов которые идут вместе с микросхемой К210, ведь это по сути те же void имя_функции(void), как с вашим примером, когда я взял и перенёс всё содержимое из заголовочного файла bsp.h и bsp.c в главную функцию main. Вот вопрос, есть где-то какое-то описание этих заголовочных файлов.

Также у вас в примере есть функция, которая не просто void имя_функции(void) написана, а так:

static void имя_функции(void)

а у себя я написал вот без этого static, поэтому хотелось бы и этот момент прояснить.

Так же я сейчас немного ознакамливаюсь с самой микросхемой К210 и с модулем kendryte K210, чтобы лучше представлять, что у нас есть из периферии, что мы имеем внутри ядра, сколько и какой у нас памяти и другие тонкости.

Я готов двигаться дальше, но у меня накопилось много моментов и нюансов, которые я хотел бы прояснить, то есть почитать про них инфу, подумать, переварить и разложить всё по полочкам. Может и услышать от вас какие-то пояснения, они порой или помогают понять сразу или задают направление где копать, чтобы прояснить непонятные моменты.

Как я понял на данный момент, мы инициализировали систему тактирования и установили частоту для трёх ФАПЧ (PLL), вот про это тоже мне хотелось бы почитать более детально, вообще про всю систему тактирования, про наверняка имеющийся для неё заголовочный файл или в какой заголовочный файл входит её описание, мы же та по сути вызываем функцию (подпрограмму) для её инициализации и настройки, но с параметрами.

Потом мы инициализировали и настроили систему ввода-вывода, указали напряжение питания, 3,3 В для всех банков и про эти uint8_t и uint16_t хотелось бы как-то разобраться и почитать или понять, пока просто понял, что мы указали два типа 8-битный (char) и 16-битный (16-разрядный int), второй точно целый, я просто вставил в текст как есть, но как-то не разбирался по этому поводу, для чего, почему и т. д.

Ну и потом, в конце уже помигали самими светодиодиками, опять же при помощи заголовочного файла, и я хотел бы почитать его описание, какие параметры мы можем задавать в скобках, вызывая эту функцию для создания задержки. К тому же я немного не понимаю принцип, ну допустим нам нужно не помигать светодиодом в какой-то момент, тут понятно мы вставим кусочек кода, где переведём порт в лог. 1 сделаем задержку, потом переведём в лог.0 и снова сделаем задержку, так мы по идее мигнём один раз, значит у нас должно быть две задержки, одна это время в течении которого светодиод горит и она же в течении которого светодиод погашен, а вторая, в течении какого времени он будет мигать 10с или 30с или 1 мин. или 10 мин. А если нам нужно чтобы он мигал в течении часа, пока мы выполняем какие-то действия, как это нам сделать, и вот во всём этом я пока как-то до конца не разобрался.

Да и сам Си мне ещё подучить нужно, а то так или по памяти делаю или наугад или просто оставляю как есть, для более детального изучения на потом.

И если и делать, даигаться дальше, хотелось бы чтобы я продолжал этот свой проект, в него добавляя код, то есть пусть и перенося из вашего примера с большим количеством файлов чем только main.c, так у меня немного тоже проясняются некоторые моменты, хотя и опять же начинают лезть вопросы, про .h файл, мы их так же добавляем как main.c и потом начинаем наполнять содержимым, или только .c создаём, то есть вы создали файл .h  наполнили его, потом .c и его наполнили, а потом уже сделали main.c или может по другому, почему у него .h и т. д. и т. п...

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty .

Сообщение  Viktor2312 Вт Ноя 10 2020, 13:59

23
Во, опять же в своём же конспекте прочитал:

Он работает следующим образом. Проверяется условие в скобках. Если оно истинно (значение fahr меньше или равно upper), то выполняется тело цикла (три инструкции заключённые в фигурные скобки). Затем опять проверяется условие, и если оно истинно, то тело цикла выполняется снова. Когда условие становится ложным (fahr превысило upper), цикл завершается, и вычисления продолжаются с инструкции, следующей за циклом. Поскольку никаких инструкций за циклом нет, кроме return (0); то программа по сути завершает работу.

Тогда вопрос остался один, что за единица у нас в скобках ?

while (1)

То есть получается, если что-то, чёрт его знает что равно единице, то у нас выполняется тело цикла, само тело цикла понятно, включили все три светодиода в единицу, подождали, включили в 0, снова подождали, и если, опять, что-то равно 1, хотя, может это указание, сколько раз выполнить тело цикла, но об этом нигде не написано, ну или я пока не нашёл где об этом прочитать...

Ну и конечно остаются не разрешёнными пока все вопросы из предыдущего поста.

Мозг после 2-х дневной перезагрузки, начинает потихоньку подгружать данные, может неспеша и разрешу их все, чтобы понять, запомнить и разложить всё по полочкам, с char пока прочитал, что это символ либо байт, думаю в нашем случае это однозначно байт, то есть 8 бит...


Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty Re: К210. Общая тема по GPIO. Практика.

Сообщение  ведущий_специалист Вт Ноя 10 2020, 18:32

24
Viktor2312 пишет:

Тогда вопрос остался один, что за единица у нас в скобках ?

while (1)
Тут очень просто... бесконечный цикл )))). Из этого вайла не выйдем никогда и низачто.



Viktor2312 пишет:.... чтобы понять, запомнить и разложить всё по полочкам, с char пока прочитал, что это символ либо байт, думаю в нашем случае это однозначно байт, то есть 8 бит...

char всю жизнь был и остается 8ми битным
uint8_t - беззнаковая 8ми битная переменная , в данном случае инт = интеджер что значит целая.
uint16_t - то же самое только 16 бит
uint32_t - то же самое только 4 байта = 32 бита.
В случае с последним можно было бы написать unsigned long что по сути должно быть то же самое, но данная запись иногда бывает платформо зависимой, и не исключено что на каком нибудь си для AVR это станет не 32 а 16 бит переменной. (может и бред написал) Но вот например в случае с unsigned int для AVR это будут чистые 16 бит а в случае с stm32 данная запись обозначит 32х битную переменную. Поэтому вот такая разница. Многие сдк процессоров вообще дефайнят типа u8 u16 u32, программист привыкает, переходит на другую платформу а компилятор не знает таких обозначений. так как они не стандартные. Поэтому и пишется что то типа #define u8 char что в переводе на русский 1=1
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

К210. Общая тема по GPIO. Практика. Empty .

Сообщение  Viktor2312 Ср Ноя 11 2020, 00:12

25
Вечный цикл, это не дело, нам при включении, нужно помигать 3 раза, пусть и всеми светодиодами, как показатель, что инициализация прошла успешно. Поэтому, давайте это сделаем. И мы же можем, 500 указать, вместо 100 мс. а то это слишком быстро ? И где найти описание для этого заголовочного файла ?

Хватит уже перегревать сетки ламп, давайте повеселимся!

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Страница 1 из 2 1, 2  Следующий

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения