Vector IDE
-
- Сообщения: 17
- Зарегистрирован: 09 дек 2016, 18:55
Re: Vector IDE
Спасибо Максим, я разобрался. Проблема была в плате собственной сборки. У меня еще вопрос: получалось ли у вас запустить FreeRTOS или CMSIS RTOS RTX на данный процессор (плату)?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: Vector IDE
Нет, мы даже и не пытались, мы на фирме для задач электропривода больше придерживаемся религии bare metal programming. С такими вопросами, наверное, лучше обратиться на форум НИИЭта (http://forum.niiet.ru/viewforum.php?f=37).
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
-
- Сообщения: 17
- Зарегистрирован: 09 дек 2016, 18:55
Re: Vector IDE
Скажите пожалуйста Максим, я хочу добавить обработчики прерываний на UART1 по RX и TX. Достаточно ли для этого в файле с main просто создать процедуры с правильными названиями и эти процедуры будут автоматически распознаны как обработчики прерываний? Надо ли эти процедуры правильно чередовать в файле?
-
- Сообщения: 17
- Зарегистрирован: 09 дек 2016, 18:55
Re: Vector IDE
Максим, а вы не могли бы выслать пример работы с UART, у меня не получается. Непонятна привязка процедур обработки прерываний к векторам. Мой адрес ***************@mail.ru. Спасибо.
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: Vector IDE
Добрый день. С уартом можно работать и без прерываний. А процесс организации процедур обработки прерываний к самому уарт отношения не имеет. Как работать с прерываниями показано в примерах, которые идут вместе с VectorIDE - там есть прерывания от таймеров. А для работы с UART можно посмотреть библиотеку UART на битбакете НИИЭТ https://bitbucket.org/niietcm4/niietcm4_pd
Да и ничего там сложно нет, вот инициализация уарта из одного из наших драйверов (без прерываний)
вот отправка
вот прием
Да и ничего там сложно нет, вот инициализация уарта из одного из наших драйверов (без прерываний)
Код: Выделить всё
// Выбрать и разрешить периферийную функцию
NT_COMMON_REG->GPIOPCTLD_bit.PIN1 = 1; //UART_TxD[3]
NT_COMMON_REG->GPIOPCTLD_bit.PIN2 = 1; //UART_RxD[3]
NT_GPIOD->ALTFUNCSET = (1 << 1) + (1 << 2);
// Изменить периферийную функцию F12 и F13, чтобы они не заблокировали UART3
NT_COMMON_REG->GPIOPCTLF_bit.PIN12 = 1;
NT_COMMON_REG->GPIOPCTLF_bit.PIN13 = 1;
NT_UART3->CR_bit.UARTEN = 1; // Разрешить работу UART_3
// Натсройка частоты в двух регистрах:
// задание делителя частоты для получения BaudRate
// Т.к. блок UART тактируется с частотой 25 МГц (так настроено в ините микроконтроллера),
// то для получения частоты 57600 бит/с необходим
// делитель 25000000 / (16 * 57600) = 27,126736111111111111111111111111
// Целая часть I = 27
// Дробная часть F = (int)( 0.126736111*64 + 0.5 ) = 8
// Формулы см. в документации
NT_UART3->IBRD_bit.BAUD_DIVINT = 27;
NT_UART3->FBRD_bit.BAUD_DIVFRAC = 8;
NT_UART3->LCR_H_bit.SPS = 0; // Нет проверки четности
NT_UART3->LCR_H_bit.WLEN = 3; // Длина посылки 8 бит
NT_UART3->LCR_H_bit.FEN = 1; // Использовать FIFO
NT_UART3->CR_bit.TXE = 1; // Разрешить приём
NT_UART3->CR_bit.RXE = 1; // Разрешить передачу
NT_UART3->LCR_H_bit.STP2 = 0; // 1 стоп-бит
Код: Выделить всё
NT_UART3->DR_bit.DATA = 42
Код: Выделить всё
if (NT_UART3->FR_bit.RXFE)
return;
temp_byte = NT_UART3->DR_bit.DATA;
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
-
- Сообщения: 17
- Зарегистрирован: 09 дек 2016, 18:55
Re: Vector IDE
Спасибо за примеры, но я не понял как происходит назначение вектору прерывания функции для его обработки? Тут есть "магическое название" функции или привязка происходит по другому? Как должна называться функция для прерывания UART1_RX? UART1_RX_IRQHandler или по-другому? И как указать, что процедура UART1_RX_IRQHandler обрабатывает прерывание UART1_RX_IRQn?
-
- Сообщения: 17
- Зарегистрирован: 09 дек 2016, 18:55
Re: Vector IDE
В примере с таймерами не раскрыто как должна называться функция для прерывания UART1_RX и где указывается, что именно эта функция, а не какая-то другая является обработчиком именно этого прерывания.
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: Vector IDE
Как и во всех кортексах. Есть вектор прерываний g_pfnVectors, где лежат адреса обработчиков прерываний. Их заполняет пользователь. В файле asm/startup_MCP_gcc.S этот вектор заполняется "пустыми" метками, если функция с таким именем встречается где-то в коде, то она линкуется как обработчик прерывания. Собственно, в этом файле можно и посмотреть все названия, и поменять если надо. Указатель на этот вектор прерываний задается в регистре SCB->VTOR в инициализации, в функции Timer_and_interrupt_init.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
-
- Сообщения: 17
- Зарегистрирован: 09 дек 2016, 18:55
Re: Vector IDE
Спасибо большое Максим. Я разобрался, просто напутал с Регистром маски прерываний. Думал он наоборот работает.
-
- Сообщения: 17
- Зарегистрирован: 09 дек 2016, 18:55
Re: Vector IDE
Добрый день Максим. У меня такой вопрос. Можно ли фукцией memcpy считывать данные из пользовательской FLASH памяти. И как этой функции указать, что работаешь с пользовательской Flash, а не загрузочной?