0x0D_0x0A_0x0D 0 8 августа, 2012 Опубликовано 8 августа, 2012 · Жалоба Всем привет, у меня такая проблема написал программу на IAR в отладчике работает правельно, выключаю IAR ВСЁЁЁЁ ни ацп ни уарт не работают Написал отдельно передачу по UART таже фигня.... Вот код полностью #include "io430.h" unsigned int i; unsigned int j; unsigned char txbuffer[16]= {0x0D, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0D, 0xFF, 0xFF}; unsigned char rxbuffer[16]; int main( void ) { WDTCTL = WDTPW + WDTHOLD; P2DIR |= BIT1; P2OUT = BIT1; // P1.0/1 setup for LED output P3SEL = 0x30; IFG2 |= UCA0TXIFG + UCA0RXIFG; UCA0CTL1 |= UCSSEL_1; // CLK = ACLK UCA0BR0 = 0x03; // 32kHz/9600 = 3.41 UCA0BR1 = 0x00; UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE + UCA0TXIE; // Enable USCI_A0 TX/RX interrupt __bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupts enabled } // USCI A0/B0 Transmit ISR #pragma vector=USCIAB0TX_VECTOR __interrupt void USCI0TX_ISR(void) { P2OUT |= BIT1; // P1.0/1 setup for LED output i = 405; // Delay do (i--); while (i != 0); P2OUT &= ~BIT1; // P1.0/1 setup for LED output i = 450; // Delay do (i--); while (i != 0); UCA0TXBUF = txbuffer[0]; // Read, justify, and transmit } Для нагляднасти отправляю 0 и 1 на Р2.1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 8 августа, 2012 Опубликовано 8 августа, 2012 · Жалоба У вас не хватает обработчика прерывания от приемника UART. Либо не разрешайте прерывания от него (UCA0RXIE), если не собираетесь использовать и тем более не стоит "насильно" взводить флаг UCA0RXIFG. Вообще стоит вначале проинициализировать систему тактирования и функции всех пинов явными значениями (без масок), не надеясь на их дефолтные состояния. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0x0D_0x0A_0x0D 0 9 августа, 2012 Опубликовано 9 августа, 2012 · Жалоба [code]int main( void ) { WDTCTL = WDTPW + WDTHOLD; // Я же тут всё проинициализировал P3SEL = 0x30; IFG2 |= UCA0TXIFG; UCA0CTL1 |= UCSSEL_1; UCA0BR0 = 0x03; // 32kHz/9600 = 3.41 UCA0BR1 = 0x00; UCA0MCTL = UCBRS1 + UCBRS0; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0TXIE; __bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupts enabled } // USCI A0/B0 Transmit ISR #pragma vector=USCIAB0TX_VECTOR __interrupt void USCI0TX_ISR(void) { UCA0TXBUF = txbuffer[0]; } [/code] Я тут оставил только передачу.. убрал RX он мне щас не нужен Всё равно работает только в режиме отладки :smile3046: если ты про P3DIR |= 0x30; То Я так сделал ничего не изменилось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0x0D_0x0A_0x0D 0 9 августа, 2012 Опубликовано 9 августа, 2012 · Жалоба Я щас поигрался с Watchdog Timer там та же проблема в отладчике всё работает а при выходе перестаёт работать #include "io430.h" void main(void) { WDTCTL = WDT_ADLY_16; IE1 |= WDTIE; P3DIR |= 0x10; __bis_SR_register(LPM3_bits + GIE); } // Watchdog Timer interrupt service routine #pragma vector = WDT_VECTOR __interrupt void watchdog_timer(void) { P3OUT ^= 0x10; } Что вообще происходит почему так??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба По первому сообщению. Вы уверенны что дефолтные значения в модуле DC0 (система тактирования) застявят работать кварц 32 кГц на линию ACLK? По поводу последнего: без строчки __bis_SR_register(LPM3_bits + GIE);, а лучше в место неё _EINT(); while(1); всё равно не работает? А ватчдок таймер случайно не от MCLK тактируется? Так если с помощью режимов вы отключаете MCLK как таймер считать будет? И ещё. уберите #include "io430.h" напишите конкретно #include "msp430f2254.h" или #include "msp430x22x4.h", это ещё завист от версии компилятора. вот пример от техаса: #include "msp430x22x4.h" void main(void) { WDTCTL = WDT_MDLY_32; // Set Watchdog interval to ~27ms IE1 |= WDTIE; // Enable WDT interrupt P1DIR |= 0x01; // Set P1.0 to output direction __bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt } // Watchdog Timer interrupt service routine __interrupt void watchdog_timer (void); WDT_ISR(watchdog_timer) __interrupt void watchdog_timer (void) { P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0x0D_0x0A_0x0D 0 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба 1 Если чесно то не уверен, но это взято из стандартных примеров 2 на счёт _EINT(); while(1); да это удобнее)) Спс "msp430x22x4.h" поставил.. Всё равно не работает... плату сами собирали Возможно в схеме гон... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 10 августа, 2012 Опубликовано 10 августа, 2012 · Жалоба проверьте питание, цепь RESET, кварц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0x0D_0x0A_0x0D 0 11 августа, 2012 Опубликовано 11 августа, 2012 · Жалоба Кварц не работает на 1-й ноге 0 а на другой 1 Вот настройка для внешноего BCSCTL1 |= XTS + XT2OFF; BCSCTL2 |= SELM_2 + SELS; Вроде всё так((( Вернее работает от внутреннего при настройках внешнего... Остальное работает хорошо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 11 августа, 2012 Опубликовано 11 августа, 2012 · Жалоба Как раз не так. XTS включение ВЧ режима. У вас 32 кГц кварц. Это НЧ режим. XT2OFF не обязательно выключать, его и так нет у вас. В регистре BCSCTL1 вам только интересны биты DIVAx. Лучше использовать SELM_3, для лучшего переносимости кода. Это первое. Во-вторых по моемому(читать руководство надо) процессор не может тактироваться от НЧ кварца. Только от 400 кГц. И зачем SMCLK тактировать от ACLK? Делайте так. Переферию если вам надо тактируйте от ACLK, а процессор от SMCLK. Т.е. (я сейчас проверил) в DC0 по умолчанию ACLK настроен на кварц 32768кГц. Настраивать надо только делитель ACLK. И проверьте, нет ли КЗ с общим прводом у ноги кварца, у которого "0". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0x0D_0x0A_0x0D 0 16 августа, 2012 Опубликовано 16 августа, 2012 · Жалоба )))) Дело было всётаки в питании .... Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться