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

 
 
> MSP430 - снова вопросы от чайника, Вопросы от чайника про MSP и магнитный компас
Daria
сообщение Jul 23 2008, 19:17
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



smile.gif Здравствуйте. Кто читал предыдущую мою тему "MSP430 - вопросы от чайника", тот поймет - это снова я biggrin.gif Тему закрыли, слишком долго висела. А вопрсов все больше. smile.gif
Если кому-то вдруг окажется не влом разбираться, то
Вот кусок проги:
int flag;//глобальные переменные
int cindex;
испульзуемые функции(write_flash - пишет число во flash, read_flash - считывает)
void write_flash(float* value, float *addr)
{ while(FCTL1 & BUSY);
_BIC_SR(GIE);
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
*addr = 0;

while(FCTL1 & BUSY);
FCTL1 = FWKEY + WRT; for (int i=0;i<=3;i++)
{ *addr = value[i];
addr++;
}

_BIS_SR(GIE);
while(FCTL1 & BUSY);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}

void read_flash(float* addr, float* pfO)
{
for (int i=0;i<=3;i++)
{ pfO[i]=*addr;
addr++;
}
}
Чего хочу сделать - Если присылаю 0, то должны считаться два показания с выводов P6.3 и P6.4, присылается 0хАА - т.е. "считалось", записываются первые элементы двух массивоы данных.
Когда набирается по четыре элемента, индекс сбрасывается
Если присылаю 0xFF, то должна выполнится функция calibrovka_hmc, если она выполняется неверно, то присылается 0хСС, иначе из flash считывается и присылается вычисленная с помощью этой функции константа.
Внутри функции main
ADC12CTL0 = ADC12ON + REFON + SHT0_8; //настройка АЦП
ADC12CTL1 = CSTARTADD0 + CSTARTADD1 + ADC12SSEL_1+ CONSEQ_1;
ADC12MCTL3 = INCH_3;
ADC12MCTL4 = INCH_4 + EOS;

float temp[4];
flag=0;
cindex=0;
for(;;)
{
for(delay = 0; delay <20000; delay++);
if( flag==0 )
{send_int(0x0);
}
if( flag==1 )
{

if (calibrovka_hmc(CVx, CVy, temp)==0)//calibrovka_hmc - имеет параметрами два массива и вычисляет четыре константы(нужные для калибровки устройства)

{
send_int(0xCC);
flag=0;
}
else
{
float pfO[4];
read_flash((float*)0x1000,pfO);
r=(int)(pfO[0]+0.5);
send_int®;
flag=0;
}

flag=4;
}

if (flag==2)
{
ADC12CTL0 |=ADC12SC + ENC; CVx[cindex] = ADC12MEM3; CVy[cindex] = ADC12MEM4;
ADC12CTL0 &= ENC;
cindex++;
send_int(0xAA);
flag=0;
}

if (cindex>3)
cindex=0;
}
}
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx ( void)
{
if( RXBUF0==0xFF)
flag = 1;
if (RXBUF0==0x0)
flag = 2;
}
В ЧЕМ ПРОБЛЕМА:
Перед выполнением калибровки присылаю элементы массива, полученного при считывании показаний с выводов, - оказывается, что в массив записываются по два-три раза одно значение, хотя этого не может быть. Соответственно, из-за этого не работает и все остальное crying.gif
Может, неправильно настроен АЦП? Или в чем может быть дело?
И, если кому-то вдруг не влом разбираться - функции записи во flash и чтения flash - можно ли сделать как-то поумнее?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Aug 12 2008, 23:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Daria, извините за откровенность, но у вас какой-то бред получается sad.gif Вы вообще понимаете суть и механизм работы прерываний? Я не знаю вашего возраста и семейного статуса, но надеюсь что "детская" ассоциация разъяснения сути прерываний будет вам понятна. smile.gif
Представте себе, что вы - мама. Сидите на лавочке с подругой и беседуете. Рядом в песочнице ковыряется и бегает возде нее ваш малыш. И вот в произвольный момент времени малыш подбегает к вам и, прерывая ваш разговор с подругой, спрашивает: "мама, а правда, что море мокрое?" "Правда", отвечаете вы. Малыш, удовлетворенный ответом, убегает, а вы возвращаетесь к разговору с подругой. Через некоторое (опять недетерменированное время) малыш снова подбегает к вам и, прерывает разговор, очередным вопросом: "мама, а небо голубое?" "Конечно голубое, сынок. Подними голову и убедись сам", отвечаете вы. Малыш, задрав высоко голову, долго рассматривает проплывающие в голубом небе облака, а вы по-прежнему продолжаете отложенный разговор с подругой.
Такая аналогия вам понятна? wink.gif
Развиваю мысль дальше.
Запрет прерываний. "Сынок, перестань отвлекать маму вопросами. Дай маме с тетей спокойно поговорить."
Разрешение прерываний. "Сынок, у тебя там все нормально? Никто тебя не обижает? Ну если что-то случится сразу беги ко мне и скажи."
Тот исходник, что вы привели можно переложить на детский сюжет так.
Мама, вместо того, чтобы разговаривать с подругой, отпускает малыша в песочницу и внимательно следит, чтобы он не упал и не перепачкался. Как только ребенок падает, она, отряхнув его одежду, говорит: "Ну вот, смотри как ты перепачкался! Не ходи больше в песочницу, поиграй рядом с мамой, пока я с этой тётей побеседую". Усадив ребенка рядом, продолжает беседу.
А эта аналогия понятна?
Вы запускаете преобразование АЦП и, не выходя из прерывания, ждете окончания преобразования и установки бита готовности. Спрашивается ЗАЧЕМ? 07.gif Факт возникновения прерывания УЖЕ является свидетельством о том, что преобразование выполнено и в регистре ADC12MEMx находится готовое значение. После перехода по вектору прерывания вам нужно только считать это значение и при необходимости (пере)запустить или остановить цикл последующих преобразований АЦП. Ждать готовности преобразования, находясь прямо в прерывании нет никакой необходимости!

По структуре всей программы. У вас есть основной цикл, где вы что-то там вычисляете, усредняете и при необходимости передаете наружу. У вас есть таймер, по которому вычисляются временные интервалы и идет управление переключением выходного сигнала и работой АЦП. Работа таймера происходит асинхронно (НЕсинхронно) работе основного цикла. АЦП в принципе тоже работает асинхронно и основному циклу и таймеру, но запуск цикла преобразований АЦП происходит синхронно с таймером. Поэтому запуск АЦП после переключения выходного сигнала должен производится из таймерного прерывания. А останов уже в прерывании АЦП. Обмен между прерываниями и основным циклом можно реализовать посредством семафоров (флагов). В прерывании устанавливается семафор, сигнализирующий. например, о том, что цикл измерений был завершен. В основном цикле этот семафор постоянно опрашивается и как только обнаруживается, что он установлен, результаты измерения обрабатываются, а семафор завершения цикла измерений сбрасывается. Таким образом производится взаимодействие асинхронных процессов. Ну насчет буферов, как средства синхронизации потоков данных для асинхронных процессов, по-моему вы уже знаете.

И еще просьба. Оформляйте, пожалуйста, ваш текст исходников в теги code. Это такая решеточка над полем редактирования сообщения. Так сохраняются все отступы и код получается более удобным для восприятия.
Go to the top of the page
 
+Quote Post
Daria
сообщение Aug 13 2008, 17:06
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(rezident @ Aug 13 2008, 03:30) *

Rezident, циклы while совершенно случайно оказались в прерывании! Просто копировала и ... дело было вечером... 05.gif Так что совершенно зря разразились такой тирадой smile.gif Впрочем, не зря, долго еще могла не заметить. А история про маленького мальчика - супер. biggrin.gif Но - запрещение прерываний в прерывании таймера и АЦП делаю осознанно smile.gif , при переключении вывода должен пройти переходной процесс, прежде чем можно разрешать преобразование АЦП. Так что переключение вывода и старт АЦП должны совершенно точно делаться в разные моменты времени. Такие дела. А вообще - как всегда, спасибо biggrin.gif
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 14 2008, 08:09
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Ух-х, какие крутые виражи! Ух, как человека мысли колбасят:
Цитата( @ Aug 13 2008, 23:06) *
... Так что совершенно зря разразились такой тирадой smile.gif

И сразу же, не давая осознать -- ба-бах!
Цитата
Впрочем, не зря, ...


Rezident -- восхищаюсь Вашим терпением. Буду счастлив, если даму удастся выдернуть из девичьего восприятия мира. Да, длинный путь предстоит, долго ей топать. Но, человека надо вытаскивать. Тем более, сам чел этого хочет.

Daria, не останавливайтесь на полпути! Мы все за Вас переживаем и хотим получить полноценного товарища. Глупой Вас никто не считает, просто склад ума/логика мышления у Вас несколько иные. Это не плохо и не хорошо, это -- просто имеет быть.

"Не важно -- кто ты и где ты сейчас. Важно -- куда ты живешь" (С) не помню чье.
Всех благ!


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
Daria
сообщение Aug 14 2008, 20:47
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(zhevak @ Aug 14 2008, 12:09) *
Rezident -- восхищаюсь Вашим терпением. Буду счастлив, если даму удастся выдернуть из девичьего восприятия мира. Да, длинный путь предстоит, долго ей топать. Но, человека надо вытаскивать. Тем более, сам чел этого хочет.

Я сама восхищаюсь его терпением 07.gif Я бы себя уж давно послала, причем с громкими выкриками biggrin.gif
Цитата(zhevak @ Aug 14 2008, 12:09) *
Daria, не останавливайтесь на полпути!

Ну не знаю, не знаю. мы женщины все такие непоследовательные - то почитать, то пострелять... biggrin.gif
Цитата(zhevak @ Aug 14 2008, 12:09) *
Мы все за Вас переживаем

Надеюсь, аппетит не пропал? wink.gif
Цитата(zhevak @ Aug 14 2008, 12:09) *
Всех благ!

И Вам!! Спасибо за мнение

Rezident, по поводу буфера, пример которого вы приводили. А что, если cbuf.rIdx будет равен cbuf. wIdx +1? Т.е. если считывание "обгонит" запись? Может, стоит поверять if((cbuf.cntr< max_bufsize)&(cbuf.rIdx !=cbuf. wIdx +1))?
Или опять мойс клад ума/логика мышления меня подвел? sad.gif тогда - ой, беда, беда - огорчение.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Daria   MSP430 - снова вопросы от чайника   Jul 23 2008, 19:17
- - rezident   Некоторое (продолжительное) время не заглядывал в ...   Jul 23 2008, 22:03
|- - Daria   Ага, все же заглянули спасибо за комментарии и кр...   Jul 24 2008, 19:29
|- - =DS=   Цитата(Daria @ Jul 24 2008, 23:29) А по п...   Jul 25 2008, 03:03
|- - Daria   Цитата(=DS= @ Jul 25 2008, 07:03) *addr ...   Jul 25 2008, 18:27
|- - rezident   Цитата(Daria @ Jul 26 2008, 00:27) а к...   Jul 25 2008, 19:47
|- - Daria   И версии, и настройки. А кикстарт - потому что сн...   Jul 25 2008, 21:05
|- - rezident   Цитата(Daria @ Jul 26 2008, 03:05) И верс...   Jul 25 2008, 21:38
||- - Daria   Цитата(rezident @ Jul 26 2008, 01:38) Ну ...   Jul 26 2008, 12:38
||- - rezident   Цитата(Daria @ Jul 26 2008, 18:38) rezide...   Jul 26 2008, 12:58
||- - Daria   Так вот. Галочка стоит. А состояние переменных все...   Jul 28 2008, 20:14
||- - rezident   Цитата(Daria @ Jul 29 2008, 02:14) Так во...   Jul 28 2008, 23:05
||- - Daria   Цитата(rezident @ Jul 29 2008, 03:05) Ну ...   Jul 30 2008, 19:31
||- - Daria   Здравствуйте, снова я Цитата(rezident @ Jul...   Aug 7 2008, 20:43
||- - rezident   Цитата(Daria @ Aug 8 2008, 02:43) ЗКак бы...   Aug 8 2008, 01:29
||- - Daria   Цитата(rezident @ Aug 8 2008, 05:29) Можн...   Aug 8 2008, 20:28
||- - rezident   Цитата(Daria @ Aug 9 2008, 02:28) а вот п...   Aug 9 2008, 01:10
||- - Daria   Цитата(rezident @ Aug 9 2008, 05:10) Коли...   Aug 9 2008, 20:42
||- - rezident   Цитата(Daria @ Aug 10 2008, 02:42) Ну и п...   Aug 9 2008, 22:10
||- - Daria   Так. Ну вот, как-то не выходит ничего Если в пре...   Aug 11 2008, 20:19
||- - Dog Pawlowa   Цитата(Daria @ Aug 11 2008, 23:19) Как бы...   Aug 12 2008, 06:14
||- - Daria   Цитата(Dog Pawlowa @ Aug 12 2008, 10:14) ...   Aug 12 2008, 19:55
|- - =DS=   Цитата(Daria @ Jul 26 2008, 01:05) Дебагг...   Jul 25 2008, 21:40
- - Т.Достоевский   Может так? Код#pragma vector=ADC_VECTOR { if ...   Aug 11 2008, 21:52
- - rezident   Все дело в том, что вы маски неверно накладываете....   Aug 11 2008, 23:19
|- - rezident   Цитата(Daria @ Aug 13 2008, 23:06) Но - з...   Aug 13 2008, 18:19
||- - Daria   Цитата(rezident @ Aug 13 2008, 22:19) Яс...   Aug 13 2008, 19:59
|- - rezident   Цитата(Daria @ Aug 15 2008, 02:47) Rezide...   Aug 14 2008, 21:01
|- - Daria   Ага, будем считать с буфером приема разобрались ...   Aug 17 2008, 11:13
|- - zhevak   О-хо-хо... Ну да ладно! Даша, я предполагаю, ...   Aug 17 2008, 14:49
|- - rezident   Цитата(Daria @ Aug 17 2008, 17:13) Запись...   Aug 17 2008, 15:09
|- - zhevak   Цитата(rezident @ Aug 17 2008, 21:09) Изв...   Aug 17 2008, 15:51
|- - rezident   Цитата(zhevak @ Aug 17 2008, 21:51) Не, н...   Aug 17 2008, 15:56
|- - zhevak   Цитата(rezident @ Aug 17 2008, 21:56) Да ...   Aug 17 2008, 16:38
|- - Daria   Да-а-а утром отправляю вопрос, иде себе спокойне...   Aug 17 2008, 20:49
|- - Daria   здравствуйте снова. Такой вопрос - во время работ...   Aug 19 2008, 17:42
|- - rezident   Цитата(Daria @ Aug 19 2008, 23:42) можно ...   Aug 19 2008, 21:40
|- - Daria   Цитата(rezident @ Aug 20 2008, 01:40) А т...   Aug 20 2008, 18:20
|- - Daria   Здравствуйте. rezident, по поводу примера буфера п...   Aug 21 2008, 18:01
|- - rezident   Цитата(Daria @ Aug 22 2008, 00:01) для че...   Aug 21 2008, 21:19
|- - Daria   Как всегда - большое спасибо! про выравниван...   Aug 24 2008, 17:36
|- - Daria   Здравствуйте снова. Вот опять вопросы_ Делаю усред...   Aug 29 2008, 18:53
|- - rezident   Цитата(Daria @ Aug 30 2008, 00:53) Делаю ...   Aug 29 2008, 20:16
|- - Daria   Да знаю я, знаю, что долго сидеть в прерывании нех...   Aug 30 2008, 18:33
|- - rezident   Цитата(Daria @ Aug 31 2008, 00:33) Да зна...   Aug 30 2008, 21:04
|- - Daria   Цитата(rezident @ Aug 31 2008, 01:04) Ест...   Aug 31 2008, 16:48
|- - rezident   Цитата(Daria @ Aug 31 2008, 22:48) Нужно....   Aug 31 2008, 18:39
|- - Daria   Цитата(rezident @ Aug 31 2008, 22:39) В п...   Aug 31 2008, 20:29
|- - Daria   Ну вот, отпуск кончился, пошли суровые будни И в...   Sep 12 2008, 18:04
|- - rezident   Цитата(Daria @ Sep 13 2008, 00:04) Вот та...   Sep 12 2008, 18:27
||- - Daria   Цитата(rezident @ Sep 12 2008, 22:27) re...   Sep 18 2008, 13:34
||- - Daria   Здравствуйте. Такие вопросы - сейчас я прошиваю ...   Sep 23 2008, 18:33
||- - rezident   Цитата(Daria @ Sep 24 2008, 00:33) В даль...   Sep 23 2008, 19:56
|||- - Daria   Ага, но мне, как пока неквалифицированному програм...   Sep 23 2008, 20:12
|||- - rezident   Цитата(Daria @ Sep 24 2008, 02:12) Значит...   Sep 23 2008, 20:47
|||- - Daria   Цитата(rezident @ Sep 24 2008, 00:47) Для...   Sep 23 2008, 20:56
|||- - rezident   Цитата(Daria @ Sep 24 2008, 02:56) А UIF ...   Sep 23 2008, 21:35
|||- - Сергей Борщ   Цитата(Daria @ Sep 23 2008, 23:56) Как-то...   Sep 23 2008, 21:52
|||- - Daria   Цитата(Сергей Борщ @ Sep 24 2008, 01:52) ...   Sep 24 2008, 17:18
||- - Сергей Борщ   Цитата(Daria @ Sep 23 2008, 21:33) мне ск...   Sep 23 2008, 20:01
||- - LCD   Цитата(Daria @ Sep 23 2008, 22:33) Не под...   Sep 24 2008, 19:14
|- - MrYuran   Цитата(Daria @ Sep 12 2008, 22:04) Как бы...   Sep 13 2008, 10:53
|- - rezident   Цитата(MrYuran @ Sep 13 2008, 16:53) И с ...   Sep 13 2008, 16:48
|- - MrYuran   Цитата(rezident @ Sep 13 2008, 20:48) А в...   Sep 13 2008, 17:31
|- - Сергей Борщ   Цитата(rezident @ Sep 13 2008, 19:48) А в...   Sep 13 2008, 18:20
|- - rezident   Цитата(MrYuran @ Sep 13 2008, 23:31) А во...   Sep 13 2008, 20:13
|- - AHTOXA   Цитата(rezident @ Sep 14 2008, 02:13) При...   Sep 15 2008, 17:38
- - Kurt   2rezident: я восхищен силой вашего воображения ))   Aug 13 2008, 04:41
|- - _3m   Цитата(Kurt @ Aug 13 2008, 08:41) 2rezide...   Aug 13 2008, 06:34
- - rezident   Я не вижу функции инициализации UART, но попробуйт...   Sep 24 2008, 18:12
|- - Daria   Цитата(rezident @ Sep 24 2008, 22:12) Я н...   Sep 25 2008, 18:43
|- - rezident   Цитата(Daria @ Sep 26 2008, 00:43) Ну, те...   Sep 25 2008, 19:30
|- - Daria   Цитата(rezident @ Sep 25 2008, 23:30) Пок...   Sep 26 2008, 15:21
- - VAI   ЦитатаКварц, кстати, подходящий нашла у Murata - C...   Sep 25 2008, 06:57
- - rezident   Ну вот она и ошибка. Первой командой инициализации...   Sep 26 2008, 15:33
|- - Daria   Цитата(rezident @ Sep 26 2008, 19:33) Ну ...   Sep 29 2008, 19:16
|- - rezident   Цитата(Daria @ Sep 30 2008, 01:16) не-а, ...   Sep 29 2008, 20:23
|- - Daria   Цитата(rezident @ Sep 30 2008, 00:23) Дел...   Sep 30 2008, 19:00
|- - rezident   Цитата(Daria @ Oct 1 2008, 01:00) NData -...   Sep 30 2008, 19:49
|- - Daria   Кодtypedef struct CharBuffer { unsigned char* Dat...   Sep 30 2008, 20:26
|- - rezident   Цитата(Daria @ Oct 1 2008, 02:26) но так ...   Sep 30 2008, 23:05
|- - Daria   Цитата(rezident @ Oct 1 2008, 03:05) Поче...   Oct 1 2008, 18:23
|- - rezident   Цитата(Daria @ Oct 2 2008, 00:23) Да, но ...   Oct 1 2008, 19:34
|- - Daria   Цитата(rezident @ Oct 1 2008, 23:34) Если...   Oct 2 2008, 19:37
- - VAI   Кстати, по уартам, я как-то выкладывал свои исходн...   Oct 3 2008, 01:12
- - Daria   Цитата(VAI @ Oct 3 2008, 05:12) Кстати, п...   Oct 4 2008, 17:01
- - Daria   Опять я теперь нужен еще буфер - для АЦП. посмот...   Oct 5 2008, 15:42
- - Daria   И еще Мне нужно обмениваться с двумя устройствам...   Oct 5 2008, 19:35
- - Dog Pawlowa   Цитата(Daria @ Oct 5 2008, 22:35) И еще ...   Oct 6 2008, 06:04
- - Daria   Цитата(Dog Pawlowa @ Oct 6 2008, 10:04) О...   Oct 6 2008, 17:45
- - rezident   Цитата(Daria @ Oct 6 2008, 23:45) одно ус...   Oct 6 2008, 19:04
- - Daria   Цитата(rezident @ Oct 6 2008, 23:04) Личн...   Oct 7 2008, 17:09
- - rezident   Цитата(Daria @ Oct 7 2008, 23:09) Ага, а ...   Oct 7 2008, 17:41
- - Daria   Цитата(rezident @ Oct 7 2008, 21:41) В IA...   Oct 7 2008, 18:12
- - rezident   Цитата(Daria @ Oct 8 2008, 00:12) Все же ...   Oct 7 2008, 19:07
- - Daria   Цитата(rezident @ Oct 7 2008, 23:07) Либо...   Oct 10 2008, 20:23
3 страниц V   1 2 3 >


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

 


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


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