Перейти к содержанию
    

Передача данных по UART для 430f247

Всем добрый день! Никак не получается организовать передачу данных из МК в ПК. Над проблемой бьюсь уже не один день. Ниже приведен код:

NAME 
#include <msp430f247.h>
;------------------------------------------
            RSEG  CSTACK
DS    0
            RSEG CODE
;------------------------------------------
RESET   mov #SFE(CSTACK),SP
            mov.w #WDTPW+WDTHOLD,&WDTCTL  
            
            
            mov.b   #SELM_0,&BCSCTL2; DCO
            mov.b   #XT2OFF+RSEL3,&BCSCTL1; stop XT2
            bis     #OSCOFF,SR     ; stop XT1
            bis.b #XT2S_2,&BCSCTL3;4MHz
            
            bic.b #XT2OFF,&BCSCTL1
           ;bis.b #SELM_2,&BCSCTL2
SetupOsc    
            mov.w #1000,R15               
            bic.b #OFIFG,&IFG1 
SetupOsc1   
            dec.w R15                     
            jnz SetupOsc1               
            bit.b #OFIFG,&IFG1            
            jnz SetupOsc                
            bis.b #SELM_2+SELS,&BCSCTL2
            bis.b #1b,P5DIR
            bic.b #1b,P1OUT
;---------------------------------------------
            bis.b #UCSWRST,&UCA1CTL1     
            clr.b &UCA1CTL0
            bis.b #UCSSEL_1,&UCA1CTL1;ACLK
            mov.b #0000,&UCA1MCTL
            mov.b #11010000b,&UCA1BR0; 4MHz/19200 = 208.3 = 100000100b;;
          mov.b #000b,&UCA1BR1         
           
            clr.b &UCA1STAT
            clr.b   &UCA1IRTCTL
            clr.b   &UCA1IRRCTL
            clr.b   &UCA1ABCTL
            bis.b #0C0h,&P3SEL; P3.6,7 - USART
            bic.b #UCSWRST,&UCA1CTL1
           ;bis.b #UCA1RXIE,&UC1IE         
       ;bis.b #GIE,SR;
       ;nop
Check
            bit.b #UCBUSY,&UCA1STAT
            jnz Check
Rep_Check0  bit.b   #UCA1RXIFG,&UC1IFG
            jz Rep_Check0
            mov.b &UCA1RXBUF,R6
Rep_Check01  bit.b   #UCA1RXIFG,&UC1IFG
            jz Rep_Check01
            mov.b &UCA1RXBUF,R7            
Rep_Check02  bit.b   #UCA1RXIFG,&UC1IFG
            jz Rep_Check02
            mov.b &UCA1RXBUF,R8
Rep_Check10  bit.b   #UCA1TXIFG,&UC1IFG
            jz Rep_Check10
            mov.b R6,&UCA1TXBUF
Rep_Check20  bit.b   #UCA1TXIFG,&UC1IFG
            jz Rep_Check20
            mov.b R7,&UCA1TXBUF            
Rep_Check30  bit.b   #UCA1TXIFG,&UC1IFG
            jz Rep_Check30
            mov.b R8,&UCA1TXBUF
            jmp Check            
            
            
            
            
            COMMON INTVEC
            
        ORG     RESET_VECTOR                
        DW      RESET 
        
        END.

 

Уже в самом начале, когда необходимо принять данные из ПК, не происходит ровным счетом ничего. Пробовал коды с Code_examples , ничего не работает.

Если кто может, подскажите, пожалуйста, в чем проблема:)

За ранее благодарю!)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте добавить в регистр UCA1MCTL, в биты UCBRSx число 3 - как это приведено в таблице 15-4 мануала для USCI. Может этого достаточно будет.

 

Ещё проверьте - не перепутаны ли TX RX сигналы на плате.

Кроме того, есть ли физический контакт в линии (бывают обрывы). Прямо тестером прозвоните цепь от ножки МК до ножки на схеме ПК, откуда идут данные.

И ещё посмотрите замыкание линии RX контроллера: на землю, питание, или какую-то соседнюю ножку. Вообще гляньте вольтметром, какое напряжение на этой ножке в отсутствие данных, и во время приёма.

 

Вот ещё.

Скорость передачи на стороне ПК именно 19200? Параметр настроек "Управление потоком" в состоянии Off? И остальное (бит четности, стоп бит) - как положено?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Each bit in each PxDIR register selects the direction of the corresponding I/O pin, regardless of the

selected function for the pin. PxDIR bits for I/O pins that are selected for other functions must be set as

required by the other function. Подчёркнуто цитирующим

 

P3SEL программируется - вижу, а P3DIR - не вижу.

 

Ну и "за ранее" пишется без пробела (;

Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое за советы, но увы, ничего не заработало( буду искать проблему дальше, может быть она не в программной части вовсе)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В дополнение к вышесказанному.

 

Всем добрый день! Никак не получается организовать передачу данных из МК в ПК.

. . . .

Уже в самом начале, когда необходимо принять данные из ПК, не происходит ровным счетом ничего. Пробовал коды с Code_examples , ничего не работает.

. . . .

 

Так передача в сторону ПК таки работает, али нет ?

 

Смотреть это надо не терминалкой, а осцилографом.

Если ОНО (передача) есть, а приема нет - проверяем скорость на которой идет передача. Если скорость нестандартная или нетачтонадо -

папилац не взлетит.

Если в процессоре этого типа есть возможность вывести контрольные частоты MCLK SMCLK ACLK - проверяем (осцилографом) их наличие

и частоты, далее - коэффиценты деления для USART с привязкой на XXCLK.

 

Как упрощенный вариант без осцилографа - соединяем Tx - Rx и в отладчике смтрим есть ли обмен по "кольцу".

 

PS

Исходя из этой команды, Вы собираетесть использовать XT2

bic.b #XT2OFF,&BCSCTL1

До этого, проверьте, возможно надо настроить порты, которые выведены на XT2.

Как в Вашем процессоре не знаю - см. даташит.

 

Изменено пользователем k155la3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...