![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
ДЕЙЛ
-
Постов
767 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Сообщения, опубликованные ДЕЙЛ
-
-
Думается мне, что в функции SystemInit изначально заложен пример инициализации и ошибки здесь нет. Просто образец или шаблон, но эту функцию под каждый проект нужно переписывать - настроивать тактирование и конфигурацию кристалла под себя.
-
Опубликовано · Изменено пользователем ДЕЙЛ · Пожаловаться
С этой проблемой разобрался, дело было в настройках тактирования. В функции SystemInit файла System_LPC17xx.c полностью всё убрал, оставив только пустое место {}. В этой функции была куча настроек тактированя, которые непринципиальны для меня в данный момент, поэтому отложу их до лучших времён. Ручная настройка оказалась более предсказуемой. В книге по Cortex-M3 сегодня в электричке прочитал, что функции для переферийных модулей в CMSIS пока не доведены до совершенства. Похоже на мой случай.
К посту прилепил архив проекта, который не ругается на корявость. Мошть кого-то от лишней шишки избавит :)
-
Библиотеки тоже пишут люди и очень часто они это делают не совсем профессионально.
Причина только в этом.
А что у вас конкретно не получается?
Приводите примеры _вашего_ кода и сообщений компилятора, только тогда можно что-то посоветовать.
К самому первому сообщению прилепил два проекта. Оба отправляют циклически код от 0 до 250 в UART0. Но проблема в том, что без файлов CMSIS всё отправляется, программа на компе принимает данные с COM-порта. После добавления в дерево проекта файлов библиотеки CMSIS передача данных не идёт. Насколько я понял, проблема связана с настройкой частоты тактирования, которая имеет не то значение по причине опечатки в файле system_LPC17xx.c На скринах в этой теме видны предупреждения. Этот файл я брал из разных источников с различными датами изменений. Может кто-нибудь тут выложить пустой проект для IAR_LPC1778 с прилепленной библиотекой CMSIS, который не ругается при компиляции?
-
И что не понятно?
Компилятор явно сообщает вам, что поведение программы может быть непредсказуемым ввиду не заданной явно очерёдности доступа в выражении к volatile переменным.
Чтобы этого не было volatile переменную можно закешировать перед выражением, либо расставить в выражении достаточное количество скобочек, но не всегда это возможно...
Пример:
extern volatile int port1; extern volatile int port2; int y = port1*port1 + port2 + port1/2; // плохо, т.к. неизвестна очерёдность доступа к volatile переменным
extern volatile int port1; extern volatile int port2; int t = port1; // кешируем int y = t*t + port2 + t/2; // хорошо т.к. в выражении одна volatile переменная, читаемая один раз
что-то так просто закешировать не получилось. В чём причина этих ошибок? Файлы я готовые взял из установленных библиотек.
Предположу, что проблема в настройках тактовой частоты. В startup файле происходит ее настройка. Поэтому после присоединения CMSIS у вас изменилась ситуация и усарт перестал работать.к этой мысли тоже пришёл, но пока разбираюсь с основами работы CMSIS
-
Опубликовано · Изменено пользователем ДЕЙЛ · Пожаловаться
-
выхлоп компилятора угадать надо?
не понял
На свежую голову запустил отладчик, нажал Break. Программа зациклилась на проверке установке какого-то бита в функции SystemInit. С этим покопаюсь. Возник другой вопрос - каким образом эта функция из system_LPC17xx.c попала в главную программу main.c, если этот файл (system_LPC17xx.c) нигде не прописан в инклудах и функция SystemInit тоже не упоминается.
-
Доброй ночи, коллеги. Продолжаю начинать осваивать 32битные контроллеры. Прилепил к проекту CMSIS, как написано в статье http://easyelectronics.ru/arm-uchebnyj-kur...ls-library.html Всё сделал так же, но применительно к LPC1778. Далее последовали странности на мой взгляд. Написал тестовую программу передачи данных по UART0. Без CMSIS всё передаётся правильно, но после добавления в дерево проекта CMSIS со своими хидерами UART0 замолчал, хотя в main.c ничего не поменял и не добавлял никаких новых функций. Проект также компилируется, но с небольшими предупреждениями, которые на мой взгляд не должны повлиять на передачу данных по последовательному порту. Оба проекта - работающий и неработающий прикреплены к сообщению. Использую IAR 6.4 Что сделал не так?
-
все CM3 одинаковы
попробуйте за основу взять
FreeRTOSv8.0.1\FreeRTOS\Demo\CORTEX_LPC1768_IAR\RTOSDemo.eww
ничего не менял, но при компилировании 27 ошибок и одно предупреждение
-
ну попробуйте чтоли вызвать контексное меню правой кнопкой =)
аа, попробую :smile3046:
-
готовый прект тоже чёт матерился, :maniac: поэтому решил с простейшего начать, а то в дебри залез бы. Какие именно *.C файлы включать надо и куда нажимать для их добавления?
вечером попробую почистить тот проект до минимума :smile3046:
картинка не сразу открылась
-
Посмотрите, как в примерах сделано. В проект включается куча .c файлов от FreeRTOS.
И раз уж у вас сходу такие проблемы, на первых порах лучше отказаться от c++ в пользу c, ибо там добавится ещё вопросов.
вот от примера
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
/* Demo app includes. */
#include "BlockQ.h"
#include "integer.h"
#include "blocktim.h"
#include "flash.h"
#include "partest.h"
#include "semtest.h"
#include "PollQ.h"
#include "GenQTest.h"
#include "QPeek.h"
#include "recmutex.h"
#include "includes.h"
#include <stdio.h>
#include <system_LPC177x_8x.h>
#include <lpc177x_8x_uart.h>
те, которые после /* Demo app includes. */ мне пока не нужны
-
-
Опубликовано · Изменено пользователем ДЕЙЛ · Пожаловаться
Имеется LPC1778, IAR, FreeRTOSv8.0.1. Распаковал папку с ОС, но не нашёл там ничего, связанного с моим МК. Для меня всё усложняется тем, что ещё ни разу не имел дела с ОСРВ, руками не щупал. С какой стороны к нему подходить? Немного накопал в интернете http://catethysis.ru/freertos_stm32f100_iar/ - пример установки, но там хотя бы имеются нужные файлы, поэтому для моего случая она не подходит. В статьях Курница тоже предполагается, что нужные файлы имеются в наличии. Хотелось бы увидеть выход из данной ситуации или хотя бы полезные ссылки.
Есть смутное подозрение, что можно поискать файлы к МК с аналогичным ядром Cortex-M3 :05:
-
Опубликовано · Изменено пользователем ДЕЙЛ · Пожаловаться
Купил плату с LPC1778 у стартеркита, благополучно поморгал светодиодом с частотй 1 МГц, т.е. познакомился с МК. На плате есть много разъёмов для всяких штучек. Где бы можно найти исходные тексты программ на си для данного МК, чтобы погонять усб, етнернет, почитать память с карточки и т.д.?
-
подумал купить макетку с LPC4088, но в IAR нет такого девайса. Где можно найти и как поставить?
-
Спасибо :) Нагуглил http://www.nxp.com/documents/user_manual/UM10470.pdf ещё лучше было бы узреть всё это на русском языке :rolleyes:
-
Получше вчитался в книгу по LPC2300/2400 - нет толком никакой справочной информации, всё размазано по книге клочками. Решил скачать даташит на LPC1788 - нашёл вот это http://www.nxp.com/documents/data_sheet/LPC178X_7X.pdf В нём тоже ничего конкретного. Мне нужны структурные схемы переферийных модулей и собранные в таблицы описания регистров. Если этого нет даже в буржуйском даташите, то где ещё искать? Для интереса скачал даташить по at91sam7 - http://www.atmel.com/images/doc6175.pdf Здесь всё нормально - названия регистров и назначения каждого бита сведены в таблицы (пример на стр 388 и ниже) Где найти такие же структурированные сведения на переферию LPC1788?
-
Так понимаю, что территориально http://starterkit.ru находится где-то в Ижевске, судя по контактным телефонам. В Москве где можно купить тоже самое? В Терраэлектронике, чипдипе и платане пока ничего не нашёл.
-
Также преимуществом является то, что у данной платы и микроконтроллера можно будет погонять uCLinux (когда разберетесь), что является очень актуальной задачей/нишей при изучении "сложных и высокопроизводительных" МК :)
а насчёт FreeRTOS как? Вроде как операционка реального времени. Её тут прилепить можно будет? Могу какую-нибудь глупость сморозить, т.к. мой стаж работы по этой теме на сегодняшний день ровно 4 дня. :smile3046:
-
Ещё вопрос. Если покупать вот эту плату http://starterkit.ru/html/index.php?name=s...6&word=lpc1 , то к нему нужен ещё и вот этот переходник http://starterkit.ru/html/index.php?name=s...=view&id=16 ? Т.е. в сумме уже будет не 2500, а 4500?
-
Есть ли принципиальная разница между LPC1xxx и LPC2300/2400? Я начинал с МК MSP430F169 по той причине, что у него относительно развитая переферия - несколько интерфейсов, 12битный АЦП, два 12битных ЦАПа, два таймера 2 и 6 защёлок и т.д. Есть соответствующая толстая книга на русском языке. После изучения данного МК вопросов с программированием других кристаллов не было, т.к. они отличались только набором переферии.
Если я изучу LPC2300/2400, то смогу потом с такой же лёгкостью перейти на LPC1xxx?
-
Опубликовано · Изменено пользователем ДЕЙЛ · Пожаловаться
Они, насколько помню, уже сняты с производствачто именно снято с производства?
-
Решил заняться изучением 32битных микроконтроллеров, с которыми раньше не имел дела. Для этого решил собрать в одном месте у себя на столе литературу на русском языке, софт и отладочную плату. Понравилась книжка Микроконтроллеры ARM7 семейств LPC 2300/2400. Вводный курс разработчика (+ CD-ROM) http://www.ozon.ru/context/detail/id/5283896/ . В ней пишут, что все примеры написаны для платы MCB2360 - http://www.danomsk.ru/shop/459859-mcb2360-ulink-me-keil Софт на первое время обещают приложить на диске в комплекте. Всё хорошо, кроме цены на плату - не меньше 12000 р в Москве. После двух дней сидения в гугле появились вопросы:
Насколько перспективно изучение данных МК? Не устарели они?
Можно вместо рекомендуемой в книжке отладочной платы применить какую-нибудь подешевле?
Есть ли другие более полезные книжки по данным МК для начинающих?
Настройка прерываний в LPC1778
в Программирование
Опубликовано · Изменено пользователем ДЕЙЛ · Пожаловаться
Листинг в общих чертах такой:
Инициализация и настройка тактирования
1: U0IER|=0x4; //Разрешение прерывания по приёму байта в RX
2: __enable_irq(); //Разрешаем прерывания (CMSIS)
3: __set_BASEPRI(0xFFFFFFFF); //Разрешаем все прерывания (CMSIS)
4: NVIC_EnableIRQ(UART0_IRQn); //Разрешение прерывания UART0 (CMSIS)
while(1)
{
Циклическая отправка данных на ПК
}
5: __irq void UART0_IRQ1(void)
{
for (k=0; k<200; k++)
{
FIO1SET=0x2000000; //Подёргаем ножкой 200 раз
FIO1CLR=0x2000000;
}
}
Хочу сделать так, чтобы при появлении байта в буфере приёма UART вызывалось прерывание. Вот с этим вызовом прерывания проблема и пока не знаю, с какой стороны к ней подходить. Вопросы такие:
1. Правильно ли я выполнил настройки? (строки 1-4)
в строке 4 в качестве параметра функции передаётся UART0_IRQn. Что значит эта n? Её так и нужно оставлять или вместо n нужно какое-то число стаить? Хотя компилятор ругается.
2. Правильно ли я оформил обработчик прерывания? (строка 5). В этой строке пробовал писать название функции от UART0_IRQ1 ло UART0_IRQ10. Компилятор не ругался, но и толку никакого не было, на осциллографе не видел дёрганий ножки после отправки байта с ПК.
На что влияет выделенное число?
Данные в буфер приёма однозначно приходят правильные с ПК.
На скрине моя программа в сыром виде. При нажатии кнопки "ТЕСТОВАЯ" с COM-порта отправляется 1 байт 0xAA, который я вижу принятым программой от МК (выделено). Т.е. с приёмом нормально всё, но не совсем удобно каждый раз смотреть на буфер, куда удобнее считывать из него байт по прерыванию. Ну и с настройкой прерываний разобраться нужно.
И ещё имеется такой регистр
//SETENA0=0xFFFFFFFF;
В описании написано, что каждый бит этого регистра разрешает или запрещает соответствующее прерывание. Как понять, к какому прерыванию относится конкретный бит?