Jump to content
    

Передача данных по 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 , ничего не работает.

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

 

Вот ещё.

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

 

Share this post


Link to post
Share on other sites

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 - не вижу.

 

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

Edited by Obam

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

. . . .

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

. . . .

 

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

 

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

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

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

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

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

 

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

 

PS

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

bic.b #XT2OFF,&BCSCTL1

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

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

 

Edited by k155la3

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...