RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Март 2024
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031

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

Последние темы
» Вити больше нет!
автор 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. Практика.

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

Перейти вниз

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

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

26
Viktor2312 пишет:Вечный цикл, это не дело, нам при включении, нужно помигать 3 раза, пусть и всеми светодиодами, как показатель, что инициализация прошла успешно. Поэтому, давайте это сделаем. И мы же можем, 500 указать, вместо 100 мс. а то это слишком быстро ? И где найти описание для этого заголовочного файла ?
Программисту на С, как впрочем на любом другом языке программирования нужно понимать вообще, что мы хотим от программы в конечном итоге. Процессору наплевать что делать, он будет работать и перебирать счетчик команд до тех пор пока включен и не завис на неопределенной команде. Так вот, никто Вам не мешает помигать светодиодом всего 3 раза со скважностью 500мС, но будьте добры, все таки укажите процессору что ему делать дальше. В данном случае мы ему говорим крутиться на месте. Можно конечно в дальнейшем поднять модуль нейросети с камерой и запрограммировать для слежения по камере за кошкой.... Дело как говорится вкуса.
А по поводу поиска файла или где находится какая либо функция, все просто, щелкаете курсором на функцию или инклад который хотите посмотреть, или жмете ф12 ну или правой кнопкой и goto definition
ведущий_специалист
ведущий_специалист
Мастер+

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

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

К210. Общая тема по GPIO. Практика. - Страница 2 Empty .

Сообщение  Viktor2312 Ср Ноя 11 2020, 21:55

27
Программисту на С, как впрочем на любом другом языке программирования нужно понимать вообще, что мы хотим от программы в конечном итоге. Процессору наплевать что делать, он будет работать и перебирать счетчик команд до тех пор пока включен и не завис на неопределенной команде. Так вот, никто Вам не мешает помигать светодиодом всего 3 раза со скважностью 500мС, но будьте добры, все таки укажите процессору что ему делать дальше. В данном случае мы ему говорим крутиться на месте.

Это я всё понимаю. И цель есть конкретная, для этой программы "прошивки". И как помигать на ассемблере 3 раза и с задержками в 500 мс тоже понимаю, а тут нужно на С сделать какой-то счётчик, который посчитает до трёх. Значит нужно указать переменную, то бишь объявить, например nomber_1 задать ей начальное значение, например 0, потом засунуть в наш while, что-то типа nomber_1 + 1 в тело цикла, ну и в скобки условие вписать, например (nomber_1 < 3), получится после объявления переменной и задания ей начального значения, думаю в С это же возможно, в VHDL, это точно можно, а в С не знаю, нужно почитать. У нас переменная nomber_1 будет иметь значение 0х00, да и тип ей нужно будет задать тогда тоже char, то есть по сути объявить переменную конкретного типа, мне удобнее, понятнее, когда она в 16 разрадной системе, хотя пофиг в какой, до 3-х думаю посчитаем в любой, но опять же оптимизация нет смысла делать её 32-разраядной, тратить память... Я просто рассуждаю, может и не в том направлении...
И вот, в конце после того как помигали вкл-пауза-выкл-пауза- nomber_1+1 цикл закончился, проверяет условие в скобках 1 < 3, ага меньше, да меньше, выполняем цикл ещё раз, ... 2 < 3 да, выполняем, 3 < 3 нет. Идём выполнять след. команду после цикла нашего. Итог, 3 раза помигали.

Правильно?

Тут ещё синтаксис теперь напрягает, как это правильно написать, корректно.

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

Можно, конечно можно, всё можно, но главное: "В дальнейшем !.."

Я тут что-то опять забухерил малость, да цены растут, доходы падают, как-то на этом фоне стало тускло, совсем, и я решил накатить, и как понеслась пи.. по кочкам, нужно завязывать и содиться погружаться глубоко в С в К210, интересно по крайней мере, мозг нужно только заставить работать, он что-то ленится совсем, то мяска ему подавай, как вот сейчас, да с салатиками и пивасиком, обильно, то просто ничего не хочет учить, хотя вчера почитал он, про CNN, но это требует отдельного детального изучения, там под шафе особо не почитаешь, чтобы понять, но будем и почитать и поизучать, это интересно, вот ещё не понятно как бы эту "железку" физически заполучить, всякими али шмали никогда не пользовался, понятия не имею, как. А в чип-дип нет её и думаю не скоро появится, если вообще появится... Одни проблемы и геморы в общим... Так, что там дальше...

А по поводу поиска файла или где находится какая либо функция, все просто, щелкаете курсором на функцию или инклад который хотите посмотреть, или жмете ф12 ну или правой кнопкой и goto definition

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

Viktor2312
RIP

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

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

К210. Общая тема по GPIO. Практика. - Страница 2 Empty .

Сообщение  Viktor2312 Ср Дек 02 2020, 23:52

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

Суть проста, в общих чертах, инициализируем систему, мигаем три раза нашими тремя светодиодами, типа как сигнал для пользователя, что инициализация произошла, потом просто второй цикл while как заглушка, включающий все три светодиода. Некоторые #define по-убирал, так как компилятор на них ругается. В общим желательно посмотреть, высказать свои мысли, главное при этом не забывать, что это программа пример, урок, а не коммерческая программа для очень требовательного заказчика за деньги, тут главное, чтобы это точно работало, то есть правильный синтаксис, и работоспособность. Обратить внимание на использование и синтаксис переменной count_1

Код программы:

К210. Общая тема по GPIO. Практика. - Страница 2 K210_054
К210. Общая тема по GPIO. Практика. - Страница 2 K210_055


.

Viktor2312
RIP

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

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

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

Сообщение  ведущий_специалист Чт Дек 03 2020, 22:37

29
все подпрограммы, которые вызываются из main() должны быть объявлены выше. Если неохота загромаждать код сверху рутинными подпрограммами (функциями) то будте любезны хотя бы пропишите их сверху до main(). В Вашей программе 3 функции, их нужно объявить сверху. делается это так:
void system_init(void);
и тд. Несоблюдение данного правила вызовет тупейшую ошибку у компилятора.
Объявление функций способом написанном выше, можно сделать в хедер файле но потом не забыть его прикрепить в программе инкладом.
ведущий_специалист
ведущий_специалист
Мастер+

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

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

К210. Общая тема по GPIO. Практика. - Страница 2 Empty .

Сообщение  Viktor2312 Пт Дек 04 2020, 00:14

30
все подпрограммы, которые вызываются из main() должны быть объявлены выше.

Я это уже понял, по сегодняшним моим ночным бдениям при изучении просто Си для РС. Сначала мы создаём функцию, как бы объявляем её, потом main() ей может пользоваться.

Если неохота загромаждать код сверху рутинными подпрограммами (функциями) то будте любезны хотя бы пропишите их сверху до main().

Они же изначально так и были все написаны, а потом я ... Ну в общем не важно вверху, значит вверху, суть я понял, уловил.

В Вашей программе 3 функции, их нужно объявить сверху. делается это так:
void system_init(void);
и тд. Несоблюдение данного правила вызовет тупейшую ошибку у компилятора.

Я понял, сегодня видел как Pelles C меня материл типа эй мэн ты уверен? Переделаю.

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

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

Вот в Peles C мои операторы цикла while() работали корректно, как и задумано и синтаксис один в один с этим моим, что я тут написал, так я корректно написал, чтобы светодиоды мигнули три раза ?

И это, ну если всё корректно и правильно, что у нас дальше по списку ? А то же мне ещё нужно будет ознакомится с datasheet с programming guide и т. д. Чтобы понимать суть происходящего. UART  ?

Хотя у меня вот такой вопрос и что меня беспокоит, где прочитать, наиподробнейшую информацию по системе тактирования, про ФАПЧ, сколько там этих блоков, какие они имеют диапазоны по частотам и какие есть настройки и т. д.  ?

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

Это вот как например с переменными, да можно тупо сделать все переменные глобальными и пользоваться и работать будет, а потом в итоге получается код, как от Индусов в лучших традициях, пашет медленно, памяти жрёт немерянно и т. д., а всё почему, потому, что глобальные переменные существуют всё время, а локальным выделяется память только на время пока выполняется блок в котором они объявлены, после чего память высвобождается, так же и с регистровыми переменными, которые хранят свои значения в регистрах микропроцессора, а у 2-х ядерного, 64-разрядного, современного проца, их достаточно, а это как никак на порядок ускоряет быстродействие, так как одно дело обращаться к памяти по медленным последовательным портам, записывая и считывая и совсем другое дело к регистрам на том же кристалле, что и сам процессор находится, это доли наносекунд, а не десятки, да пожалуй даже на два порядка, это быстрее. Поэтому, если у вас есть, что и где почитать, подробно, а не так как в доках от Cannan что для CNN они выделили 1 страницу, хотя там не менее 100 нужно, если всё подробно расписать, то поделитесь уж ссылкой или выложите, а то информации-то толком и нет.

То же самое с заголовочным файлом sleep.h где можно почитать его описание? Какие диапазоны я могу задавать, задержек, ограничения есть всегда и у всего, какие есть там команды, помимо msleep().

Viktor2312
RIP

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

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

К210. Общая тема по GPIO. Практика. - Страница 2 Empty .

Сообщение  Viktor2312 Ср Дек 09 2020, 00:20

31
Перенесу и сюда, из другой темы, чтобы продолжить обсуждение.


#include <stdio.h>
#include <unistd.h>
#include <fpioa.h>
#include <plic.h>
#include <string.h>
#include <sleep.h>
#include <uarths.h>
#include "sysctl.h" // Заголовочный файл системы тактирования
#include "atomic.h"
#include "encoding.h"
#include "entry.h"
#include "printf.h"
#include "syscalls.h"
#include "gpiohs.h"

#define u8 uint8_t // 8-битный unsigned char
#define u16 uint16_t // 16-битный unsigned short
#define Led1_PIN 22
#define Led2_PIN 24
#define Led3_PIN 25

void system_init(void){ // Инициализация частот системы тактирования
sysctl_pll_set_freq(SYSCTL_PLL0, 800000000UL);
sysctl_pll_set_freq(SYSCTL_PLL1, 160000000UL);
sysctl_pll_set_freq(SYSCTL_PLL2, 45158400UL);
}
void init_pins(void){ // Настройка портов
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);
gpiohs_set_pin(Led1_PIN, GPIO_PV_HIGH);
gpiohs_set_drive_mode(Led2_PIN, GPIO_DM_OUTPUT);
gpiohs_set_pin(Led2_PIN, GPIO_PV_HIGH);
gpiohs_set_drive_mode(Led3_PIN, GPIO_DM_OUTPUT);
gpiohs_set_pin(Led3_PIN, GPIO_PV_HIGH);
}
void io_set_power(void){ // Выбор напряжения питания портов
sysctl_set_power_mode(SYSCTL_POWER_BANK0, SYSCTL_POWER_V33); // Напряжение (банк 0) 3,3 В
sysctl_set_power_mode(SYSCTL_POWER_BANK1, SYSCTL_POWER_V33); // Напряжение (банк 1) 3,3 В
sysctl_set_power_mode(SYSCTL_POWER_BANK2, SYSCTL_POWER_V33); // Напряжение (банк 2) 3,3 В
sysctl_set_power_mode(SYSCTL_POWER_BANK3, SYSCTL_POWER_V33); // Напряжение (банк 3) 3,3 В
sysctl_set_power_mode(SYSCTL_POWER_BANK4, SYSCTL_POWER_V33); // Напряжение (банк 4) 3,3 В
sysctl_set_power_mode(SYSCTL_POWER_BANK5, SYSCTL_POWER_V33); // Напряжение (банк 5) 3,3 В
sysctl_set_power_mode(SYSCTL_POWER_BANK6, SYSCTL_POWER_V33); // Напряжение (банк 6) 3,3 В
sysctl_set_power_mode(SYSCTL_POWER_BANK7, SYSCTL_POWER_V33); // Напряжение (банк 7) 3,3 В
}

int main(void){ // Основная функция
int count_1 = 0; // Объявляем переменную count_1 и присваиваем начальное значение 0

system_init(); // Инициализация частот процессора
init_pins(); // Настройка портов
io_set_power(); // Выбор напряжения питания портов
uarths_init(); // Инициализация последовательного интерфейса, для вывода в UART отлад. инф.
plic_init(); // Инициализация прерываний (пока не используются)

while(count_1 < 3){ // Цикл выполняющийся три раза.
gpiohs_set_pin(Led1_PIN, GPIO_PV_HIGH); // Переключаем в состояние лог. 1
gpiohs_set_pin(Led2_PIN, GPIO_PV_HIGH); // Переключаем в состояние лог. 1
gpiohs_set_pin(Led3_PIN, GPIO_PV_HIGH); // Переключаем в состояние лог. 1
msleep(250); // Задержка на 250 мс работает при помощи присутствующего файла "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(250); // Задержка на 250 мс
count_1 = count_1 + 1; // Увеличиваем на единицу значение переменной count_1
}
while(1){ // Бесконечный цикл
gpiohs_set_pin(Led1_PIN, GPIO_PV_HIGH); // Переключаем в состояние лог. 1
gpiohs_set_pin(Led2_PIN, GPIO_PV_HIGH); // Переключаем в состояние лог. 1
gpiohs_set_pin(Led3_PIN, GPIO_PV_HIGH); // Переключаем в состояние лог. 1
}
}

Viktor2312
RIP

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

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

К210. Общая тема по GPIO. Практика. - Страница 2 Empty .

Сообщение  Viktor2312 Ср Дек 09 2020, 00:24

32
Так вот из кода, что выше, и в таком виде программа на данный момент. Я думаю, что в этой функции:

void init_pins(void){ // Настройка портов
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);
gpiohs_set_pin(Led1_PIN, GPIO_PV_HIGH);
gpiohs_set_drive_mode(Led2_PIN, GPIO_DM_OUTPUT);
gpiohs_set_pin(Led2_PIN, GPIO_PV_HIGH);
gpiohs_set_drive_mode(Led3_PIN, GPIO_DM_OUTPUT);
gpiohs_set_pin(Led3_PIN, GPIO_PV_HIGH);
}

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

gpiohs_set_pin(Led1_PIN, GPIO_PV_HIGH);
gpiohs_set_pin(Led2_PIN, GPIO_PV_HIGH);
gpiohs_set_pin(Led3_PIN, GPIO_PV_HIGH);

То есть по сути останется настройка портов и установки их на работы на вывод, вот так:

void init_pins(void){ // Настройка портов
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);
gpiohs_set_drive_mode(Led2_PIN, GPIO_DM_OUTPUT);
gpiohs_set_drive_mode(Led3_PIN, GPIO_DM_OUTPUT);
}

Что скажете ?

Viktor2312
RIP

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

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

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

Сообщение  ведущий_специалист Ср Дек 09 2020, 00:51

33


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

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

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

К210. Общая тема по GPIO. Практика. - Страница 2 Empty .

Сообщение  Viktor2312 Ср Дек 09 2020, 00:58

34
То есть получается, по умолчанию, после инициализации, мы имеем лог. 0  вы входе порта.

Мы будем дальше изучать ? И что у нас следующее по списку ?

Чтобы я немного почитал теорию.

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

Viktor2312
RIP

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

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

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

Сообщение  ведущий_специалист Ср Дек 09 2020, 01:11

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

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

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

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

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

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

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