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

 
 
> Помоните новичку!
Allregia
сообщение May 21 2009, 13:33
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Только осваиваю MSP, задавал вопросы тут рядом, в теме о длительности цикла. С тем вроде понятно.
но помогите плиз, посмотрите - где у меня тут ошибка?
Пытаюсь помигать светодиодом по прерыванию от Таймера A:
CODE
#include "defs.h"
#include "ports.h"
//#include "display.h"
//-----------------------------------------------
#pragma vector=TIMERA0_VECTOR
__interrupt void timera0_interrurpt(){
LED_BAT1_TOGGLE;
#ifndef DEBUG
WDTCTL = WDTPW + WDTCNTCL;
#endif
}
//-----------------------------------------------

#pragma vector=TIMERB0_VECTOR
__interrupt void timerb0_interrupt(){
//LED_BAT1_TOGGLE;
//LEDS_ON; _NOP(); LEDS_OFF;
#ifndef DEBUG
WDTCTL = WDTPW + WDTCNTCL;
#endif

}

//------------------------------------------------
void SwitchToHighClock(void){ // XT1=ON, XT2=ON, MLCK=XT2, SMCLK=XT2, ACLK=XT1
int i;
BCSCTL1 = 0; // Turn on XTL2
do{
IFG1 &= ~OFIFG; //clear OFIFG
for (i=0x0F; i>0; i--) _NOP();
} while( (IFG1 & OFIFG)!=0);
BCSCTL2 = SELM1+SELS; // MCLK = XTL2, /1, SMCLK=XT2, /1, IntRes DCO
__bic_SR_register(SCG1); // Turn on SMCLK
}

void SwitchToLowClock(void){ // XT1=ON, XT2=OFF, MLCK=XT1, SMCLK=OFF, ACLK=XT1
int i;
BCSCTL1 = 0x80; // Turn off XTL2
do{
IFG1 &= ~OFIFG; //clear OFIFG
for (i=0x0F; i>0; i--) _NOP();
} while( (IFG1 & OFIFG)!=0);
BCSCTL2 = SELM1+SELM0 + SELS; // MCLK = XTL1, /1, SMCLK=XT2, /1, IntRes DCO
__bis_SR_register(SCG1); // Turn off SMCLK
}

void SetClock(){
__bic_SR_register(OSCOFF); // turn ON clock generator
SwitchToLowClock();
}
//--
void InitTimers(){
// Timer A
TACTL = TASSEL_2+MC_1+ID_3; // XT2 Select (8Mhz), Up to CCR0, divide by 8 to get 1Mhz
TACCR0 = 62500-1; // Interrunt every 1/16 Sec
TACCTL0 = CCIE;
TAR = 0;
TACTL |=TAIE;
// Timer B
TBCTL = TBSSEL_1 + MC_1; // ACLK Clock input
TBCCTL0 = CCIE;
TBCCR0 = 3333; // ~ 0.1 Sec @ 32.768kHz XT1
TBR=0;
//TBCTL |= TBIE;
}
//================================================================================
========
void main( void ){
//int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

// Clock init
SetClock();
SwitchToHighClock();
//initPorts();
P2DIR = 0xFF;
P3DIR = 0x0B;
P4DIR = 0x03;
P5DIR = 0x7F;
DDIR = 0xFF;

InitTimers();

__enable_interrupt();
while(1){
WDTCTL = WDTPW + WDTCNTCL;
}
}
}


Таймер B я там подготовил к такой-же процедуре, но пока его прерывание не включено.
В чем проблема - оно мигает, но на обоих фронтах есть глитч. Т.е. переходит из 0 в 1
потом примерно через 2.3мс переходит из 1 на половину уровня, еще через 3.7мс
возвращяется к 1.
Если не образать внимание на глитч, то период примерно правильный.
Но (!) - почему-то на совсем другом порту, который я не трогаю, возникают импульсы
с периодом как у моего светодиода, и длительностью - как у глитча. Какого?!

Подскажите - что я не заметил или не знаю ?
Причина редактирования: Уменьшение видимого размера цитаты исходника.
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 19)
dxp
сообщение May 23 2009, 10:32
Сообщение #16


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Allregia @ May 23 2009, 17:11) *
Видимо придется, у ЕЕПРОМ ресурс минимум на порядок больше, типично - на два порядка (1М), а иногда и на три (10М).


Если FRAM применить, то вообще об этом думать не надо - пиши хоть непрерывно в одну и ту же ячейку на максимальной скорости... Интерфейс у нее совместимый. Только она подороже, вроде.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 23 2009, 11:51
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(dxp @ May 23 2009, 13:32) *
Если FRAM применить, то вообще об этом думать не надо - пиши хоть непрерывно в одну и ту же ячейку на максимальной скорости... Интерфейс у нее совместимый. Только она подороже, вроде.


О FRAM я слышал последний раз лет 5-6 назад, в ру.эмбеддед или су.хардв.схемз., они вообще еще живы, или померли как ЦМД-память?
Go to the top of the page
 
+Quote Post
dxp
сообщение May 23 2009, 12:57
Сообщение #18


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Allregia @ May 23 2009, 18:51) *
О FRAM я слышал последний раз лет 5-6 назад, в ру.эмбеддед или су.хардв.схемз., они вообще еще живы, или померли как ЦМД-память?


Да, вроде, живо все. На любой вкус - SPI'ные, I2C'шные. Их главный минус, насколько знаю, - цена по сравнению с EEPROM'ными аналогами.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 24 2009, 20:09
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



С УАРТОм вроде разобрался, но непонятки у меня продолжаются - теперь с АЦП.
Пока не готов сформулировать вопрос, попробую еще сам помучаться. Не получиться - буду опять просить "помощь Клуба".
Go to the top of the page
 
+Quote Post
dxp
сообщение May 25 2009, 03:30
Сообщение #20


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Allregia @ May 25 2009, 03:09) *
Пока не готов сформулировать вопрос, попробую еще сам помучаться. Не получиться - буду опять просить "помощь Клуба".

У TI на сайте есть пачка примеров на Си и асме для всей имеющейся периферии - инициализация, запуск. На старте весьма помогает разобраться с нюансами.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:57
Рейтинг@Mail.ru


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