|
странности в работе f5437a |
|
|
|
Dec 3 2013, 11:38
|
Местный
  
Группа: Участник
Сообщений: 314
Регистрация: 27-04-10
Пользователь №: 56 923

|
Здравствуйте!прошу помочь советом или направить в нужное русло, потому как у самого идеи уже кончились. был проект на 149-м MSP, переделали его под msp430f5437a, соответственно ничего существенного в коде программы не меняли, только ноги и некоторые названия регистров, и само собой, настройка PMM. проблема такова- есть прерывания по uart rx и tx, при срабатывании RX (прием кадра modbus ascii) кадр принимается нормально (несколько символов), затем по программе должен формироваться кадр ответа, но программа не доходит до нужной подпрограммы, она просто зависает каждый раз в разных местах, но чаще всего на обработке TX (даже когда прерывание TX я специально отключаю!). повторюсь-в коде ничего существенно не меняли. работал с отладчиком TI USB-FET. скорость uart 115200, пробовал и 9600. (но похоже он тут ни при чем) короче, в итоге устройство абсолютно нерабочее! прошу, подскажите пож. может кто-то испытывал подобные трудности. кристалл работал вначале от внешнего резонатора 25 Мгц, после проявления вышеописанных проблем я перевел его на DCO (2 мгц), стало лучше, но выполнение программы заканчивается все равно раньше конца подпрограммы (я смотрел пошагово отладчиком). может у кого были похожие симптомы? незнаю уже на кого грешить. спасибо всем
Сообщение отредактировал shide_3 - Dec 3 2013, 11:39
|
|
|
|
|
 |
Ответов
|
Dec 3 2013, 15:28
|
Местный
  
Группа: Участник
Сообщений: 314
Регистрация: 27-04-10
Пользователь №: 56 923

|
void UART_Init(unsigned long BaudRate,unsigned char MbMode) { UCA0CTL1 |= UCSWRST; // **Put state machine in reset** UCA0CTL0 |= UCSPB + UC7BIT;//UCPEN + UCPAR ;//+ UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 109;//0xD9;//109;//;//27 // 25MHz 115200 (see User's Guide) UCA0BR1 = 0;//0; // 25MHz 115200 UCA0MCTL |= UCBRS_2;//|= UCBRS_2; // UCA0MCTL |= UCBRS_4 + UCBRF_1 + UCOS16; // Modulation UCBRSx=1, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** UCA0IE |= UCRXIE ;//+ UCTXIE; // Enable USCI_A0 RX interrupt
// __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled // __no_operation(); // For debugger
}//сейчас скорость 9600 от DCO 1048576 hz.
А,кстати, интеррапт флаги usci автоматически сбрасываются. это видно в отладке
вот инициализация остального:
void Peripheral_Setup(void) { unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT //============================================================================== // Perepherial setup // //============================================================================== P1SEL = 0x00; // no alt. functions P1OUT = 0x00; P1DIR = 0xFF; P2SEL = 0x00; // no alt. functions P2DIR = 0x00; // input direction
P3SEL = 0x00; // no alt. functions P3DIR = 0x00; P3SEL = bmTxD | bmRxD; // USART0 TXD/RXD alt. functions P3DIR = bmTxD; //TxD - out; RxD - in /////////////////////////////////////////////////////////////// //SetVcore (0x03); // UCSCTL6 &= ~XT2OFF; // Enable XT2 UCSCTL3 |= SELREF_2; // FLLref = REFO // Since LFXT1 is not used, // sourcing FLL with LFXT1 can cause // XT1OFFG flag to set UCSCTL4 |= SELA_2 + SELS_3 + SELM_3; // ACLK=REFO,SMCLK=DCO,MCLK=DCO UCSCTL6 &= ~XT2DRIVE_3; // Clear XT2drive field // Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles /* do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG_L + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags } while (SFRIFG1 & OFIFG); */ // Test oscillator fault flag
// UCSCTL6 &= ~XT2DRIVE0; // Decrease XT2 Drive according to // expected frequency // UCSCTL6 |= XTS; // // UCSCTL6 |= XT2DRIVE_3; // Set requested value // UCSCTL4 = SELS_5 + SELM_5; }
void SetVcore (unsigned int level) { //#ifdef MSP // Open PMM registers for write PMMCTL0_H = PMMPW_H; // Set SVS/SVM high side new level SVMHE = 1, SVSMHRRL SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // Set SVM low side to new level SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; // Wait till SVM is settled while ((PMMIFG & SVSMLDLYIFG) == 0); // Clear already set flags PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Set VCore to new level PMMCTL0_L = PMMCOREV0 * level; // Wait till new level reached if ((PMMIFG & SVMLIFG)) while ((PMMIFG & SVMLVLRIFG) == 0); // Set SVS/SVM low side to new level SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; // Lock PMM registers for write access PMMCTL0_H = 0x00; //#endif }
cейчас половина закомментирована, т.к. тактируемся от DCO
Сообщение отредактировал shide_3 - Dec 3 2013, 15:39
|
|
|
|
Сообщений в этой теме
shide_3 странности в работе f5437a Dec 3 2013, 11:38 rezident Цитата(shide_3 @ Dec 3 2013, 16:38) был п... Dec 3 2013, 15:20 shide_3 может, 25 мгц виноваты- всетаки это предельная час... Dec 4 2013, 09:06 rezident Кварц 25МГц ни при чем. Генераторы и на бОльшей ча... Dec 4 2013, 09:34 shide_3 Цитата(rezident @ Dec 4 2013, 12:34) 2. З... Dec 4 2013, 11:32  rezident Цитата(shide_3 @ Dec 4 2013, 16:32) как р... Dec 5 2013, 19:58   shide_3 Цитата(rezident @ Dec 5 2013, 22:58) Либо... Dec 6 2013, 08:42 shide_3 эх. было бы наверное интересно и полезно опробоват... Dec 4 2013, 14:54 shide_3 интересно, неужели у всех кто юзал эти мспшники, б... Dec 10 2013, 14:26 rezident Цитата(shide_3 @ Dec 10 2013, 19:26) инте... Dec 10 2013, 15:06  shide_3 Цитата(rezident @ Dec 10 2013, 18:06) В к... Dec 10 2013, 15:48   rezident Цитата(shide_3 @ Dec 10 2013, 20:48) може... Dec 14 2013, 16:35    shide_3 Цитата(rezident @ Dec 14 2013, 19:35) Вме... Dec 14 2013, 20:24     rezident Цитата(shide_3 @ Dec 15 2013, 01:24) у ме... Dec 14 2013, 21:02      shide_3 Цитата(rezident @ Dec 15 2013, 00:02) Пок... Dec 16 2013, 18:38       rezident Цитата(shide_3 @ Dec 16 2013, 23:38) а об... Dec 16 2013, 19:00 shide_3 теперь ясно,спасибо! не догадался что можно фр... Dec 17 2013, 06:16
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|