реклама на сайте
подробности

 
 
> LPC2148 проблемы с вычислениями, LPC2148, среда Keil uVision V3.53
Zugus
сообщение Feb 9 2009, 06:31
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 15-12-05
Из: Зеленоград
Пользователь №: 12 235



Доброго времени суток.
Проблема вот в чём. Контроллер должен вычислять и задавать температуру, с использованием PID алгоритма.
Обмен между компом, контроллером и платой я наладил. Всё работает адекватно.
А в формулах для вычисления коэффициентов, используются переменные типа float. И вот тут начинаются чудеса.
До этого моделировал работу в Кейловском симуляторе, там всё было корректно.
А как только я начинаю делать расчёты с этими переменными в камне, у меня либо камень после прошивки повисает в стартапе в строчке DAbt_Addr/
Либо всё таки прошивается, но после вычисления получается ответ 0. Причём, если залезть в камень ULINKOм то даже если переменные типа флоат, он вполне адекватно показывает, что в них прописано, но стоит запустить программу в штатном режиме, снова 0.
Перешел от float к int, проблема в основном ушла, но мистика все равно осталась. Доходит до того, что просто добавление переменной, может после прошивки посылать контроллер в DAbt_Addr. Тоесть тупо добавил, и нигде не использую. Какие то танцы с бубном smile3046.gif
Я до этого не имел дело с АРМами. Возможно я не правильно инициирую камень в самом начале? Может у меня смешиваются области данных и области переменных? В стартапе надо что то прописать?
Или это проблемы в кейле самом, он у меня с лекарством. Компиллер RealViev Сам кеил Enterprise-ARM.
У меня состояние уже близко к панике, вторую неделю ересь какая то творится, все сроки уже горят. Поискал на форуме, не нашел никого с такой проблемой. Прикладываю свой startup и кусочек кода из мэин, ту часть где идёт начальная инициализация.
Код
#include <LPC214x.h>
#include <math.h>
#include <float.h>
#include <fenv.h>


void initFiq (void);
void initLPC (void);
void init_PLL(void);

int main (void)
{
init_PLL();
initLPC();
initFiq();


////////////////////////////////////////////////////////////////////////////////////////////////////
__irq void FIQ_Handler(void) ////prerivanie
{
if (state1 ==0x7f)                                                  
{
flajok =flajok+1;
}  
EXTINT      = 0x00000002;                        //Clear the peripheral interrupt flag
}  

////////////////////////////  INTERRUPT  //////////////////////////////////////////////
void initFiq(void)
{
PINSEL0         = 0x20000000;            //Enable the EXTINT1 interruptand p0.16, p0.17-input
VICIntSelect     = 0x00008000;                            //Enable a Vic Channel as FIQ
VICIntEnable    = 0x00008000;        
}
////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// INICIALIZATION  //////////////////////////////////////////////
void initLPC(void)
{
IODIR0            |= 0x00000000; //DATA
IODIR1            |= 0x007F0000; //ADDR
IOSET1             |= 0x00630000; //ADDR =3, WR =1; RD=1;    0x00630000
//IOSET1             |= 0x00230000; //ADDR =3, WR =1; RD=0;    
}
////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////   PLL   ///////////////////////////////////////////////
void init_PLL(void)
{
PLL0CFG         = 0x00000024;                  // Set multiplier and divider of PLL to give 60.00 Mhz
PLL0CON         = 0x00000001;                  // Enable the PLL
PLL0FEED         = 0x000000AA;                // Update PLL registers with feed sequence
PLL0FEED         = 0x00000055;
while (!(PLL0STAT & 0x00000400))             // test Lock bit
{
;
}
PLL0CON         = 0x00000003;                  // Connect the PLL
PLL0FEED        = 0x000000AA;                   //Update PLL registers
PLL0FEED         = 0x00000055;    
VPBDIV             = 0x00000001;                   //Set the VLSI peripheral bus to 30.000Mhz
}
/////////////////////////////////////////////////////////////////////////////////////

Прикрепленные файлы
Прикрепленный файл  Startup.rar ( 3.4 килобайт ) Кол-во скачиваний: 25
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Женёк   LPC2148 проблемы с вычислениями   Feb 9 2009, 06:31
- - sergeeff   У тебя под стек выделено 1024 байта. Нигде не испо...   Feb 9 2009, 07:54
- - Женёк   Я вообще не использую массивы.   Feb 9 2009, 07:57
- - sergeeff   Да, еще раз внимательнее посмотрел startup. Там яв...   Feb 9 2009, 08:07
|- - aaarrr   Цитата(sergeeff @ Feb 9 2009, 11:07) Там ...   Feb 9 2009, 10:57
|- - sergeeff   Цитата(aaarrr @ Feb 9 2009, 13:57) Не ляп...   Feb 9 2009, 12:01
- - Женёк   А можно поподробнее объяснить, чем отличается SUB...   Feb 9 2009, 08:13
- - Женёк   Вопрос наверно дурацкий. Но как его выровнять? По ...   Feb 9 2009, 11:15
|- - aaarrr   Цитата(Женёк @ Feb 9 2009, 14:15) Но как ...   Feb 9 2009, 12:01
- - Женёк   Можно подробнее расписать про стэк? Как его посмот...   Feb 9 2009, 12:46
|- - aaarrr   Цитата(Женёк @ Feb 9 2009, 15:46) Можно п...   Feb 10 2009, 00:23
- - A. Fig Lee   А сколько float места занимает? Возможно, он побол...   Feb 10 2009, 03:36
- - Женёк   Будем посмотреть. Кстати, в дата аборт вылетает ка...   Feb 10 2009, 09:08
- - Женёк   Коллега нашел ошибку... Всё дело было в плл. Она б...   Feb 10 2009, 12:10


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016