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

Есть процессор MSP430F6723. UART на скоростях до 115200 работает нормально, на 230400 мусор выдаёт. Кто работал с такими скоростями, посоветуйте как?

Может где-то модуляцию включить? Хотя на 115200 и на 4МГц системной частоты всё ОК.

#define FREQXT1 32768

#define BAUD 115200*1

#define FSYS 115200*32*2

#define NUM_USCTL2 (FLLD_0 + (FSYS/FREQXT1) - 1)

#define NUM_DCO DCORSEL_4

 

UCA0CTL1 = UCSWRST; // **Put state machine in reset**

UCA0CTL0 = 0; // UART 8bit

UCA0CTL1 |= UCSSEL_2; // SMCLK

UCA0BRW = FSYS/BAUD; // 1.00MHz 38400 (see User's Guide)

// UCA0BR1 = 0; // 1.00MHz 38400

// UCA0MCTLW_ |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0

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

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


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

Тут не совсем понятно чему равен SMCLK. Предположим что == FSYS (7372800Hz вроде так у вас получается). И еще не понятно что такое "4МГц системной частоты"

 

Вообще, можно попробовать так:

#define BAUD            230400ul
#define SMCLK_FREQ          7372800ul

UCA0BRW = (SMCLK_FREQ + BAUD / 2) / (16ul * BAUD);
UCA0MCTL = UCOS16 + UCBRF0 * (((SMCLK_FREQ + BAUD / 2) / BAUD) & 0x0f);

 

Удачи

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

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


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

#define BAUD 115200*1

#define FSYS 115200*32*2

UCA0BRW = FSYS/BAUD;

Вы-бы хоть для начала НУ ХОТЬ НЕМНОГО задумались, хотя-бы на уровне знаний арифметики начальной школы, что получится в результате такой подстановки при

#define BAUD 115200*2

 

 

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


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

Вы-бы хоть для начала НУ ХОТЬ НЕМНОГО задумались, хотя-бы на уровне знаний арифметики начальной школы, что получится в результате такой подстановки при

#define BAUD 115200*2

А я проверял :biggrin:

#define FREQXT1 32768

#define BAUD 115200*2

#define FSYS 115200*32*2

#define NUM_USCTL2 (FLLD_0 + (FSYS/FREQXT1) - 1)

#define NUM_DCO DCORSEL_4

 

UCA0BRW = FSYS/BAUD; // 1.00MHz 38400 (see User's Guide)

4798: b2 40 80 00 mov #128, &0x05c6 ;#0x0080

479c: c6 05

 

Спасибо! надо так:

#define BAUD (115200*2)

UCA0BRW = FSYS/BAUD; // 1.00MHz 38400 (see User's Guide)

4798: b2 40 20 00 mov #32, &0x05c6 ;#0x0020

479c: c6 05

CC2511 USB Flash Loader
H - Help
U - USB-RS232 (Ctrl-Q end)
P - MCU FLASH LOADER
B - Self BootLoader
Q - REBOOT

UART>start : 230400 0 0 8 03

Taipit Stend Flash Loader
H - Help
A - 10bit ADC p3
S - Taipit Stend
F - FILE UTIL

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

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


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

Спасибо! надо так:

#define BAUD (115200*2)

Да.

А посему, запомните простую препростую вещь всегда, абсолютно всегда и абсолютно все дефайны заключать в скобки (ну только если, они ЯВНО,как текстовые литералы они не использутся). Даже если это

#define DUMMY (1)

Всегда! Дабы потом не думать о том что получится.

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


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

Добрый вечер, уважаемые форумчане!) Недавно возникла потребность передачи данных из микроконтроллера в ПК. Написал код на ассемблере, опираясь на Code_examples от TI, и то, что получилось, приведено ниже:

 

#include "msp430F1232.h"

RSEG CSTACK

DS16 0

RSEG CODE

;---------------------------------------------------------------------

; Установка тактирования от кварца

;---------------------------------------------------------------------

RESET mov #SFE(CSTACK),SP

mov #WDTPW+WDTHOLD,&WDTCTL ;OSTANOVKA WDT

BIC #OSCOFF, SR ; tAKTIROVANIE OT KVARCA

BIS.B #XTS, BCSCTL1

L1 BIC.B #OFIFG, &IFG1

MOV #0FFh, R15

L2 DEC R15

JNZ L2

BIT.B #OFIFG, &IFG1

JNZ L1

BIS.B #SELM_3, &BCSCTL2

;--------------------------------------------------------------------

; Инициализация USART

;--------------------------------------------------------------------

mov.b #200,R7

bis.b #SWRST,&UCTL0;

bis.b #030h,&P3SEL; P3.4,5 - USART

bis.b #UTXE0+URXE0,&ME2; Включение передачи и приема

bis.b #CHAR, &UCTL0; Формат данных 8-разрядный

mov.b #SSEL0, &UTCTL0; UCLK=ACLK

mov.b #0100b,&UBR00; 5MHz/19200 = 260.4 = 100000100b

mov.b #0001b,&UBR10;

mov.b #0000, &UMCTL0; Без модуляции

bic.b #SWRST,&UCTL0; Сброс USART не включен

bis.b #URXIE0+UTXIE0,&IE2

bis.b #UTXIFG0,&IFG2; Флаг гтовности к прерыванию

Loop bis.w #LPM3+GIE,SR

nop

jmp Loop

;-------------------------------------------------------------------

USART0TX_ISR;

;-------------------------------------------------------------------

mov.b R7, &TXBUF0;

reti

;--------------------------------------------------------------------

; Векторы прерываний

;--------------------------------------------------------------------

 

COMMON INTVEC

 

ORG RESET_VECTOR

DW RESET

 

ORG USART0TX_VECTOR

DW USART0TX_ISR

 

END.

 

Из программы видно, что я просто хочу передать содержимое R7 в ПК. Трудность заключается в том, что это значение передается не всегда. Запускаю программу, которая считывает информацию с com порта (программа работает 100% правильно), она в тестовый файл записывает значение 200(правильное значение). В следующий раз, после перезапуска программы, в текстовый файл она записывает величину 14. Потом снова 200. И я не пойму, что с ней происходит! Кто знает, отзовитесь пожалуйста :)

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


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

bis.b #UTXE0+URXE0,&ME2; Включение передачи и приема

 

Бит UTXE0 отвечает за передачу

 

URXE0 - а вектор евойный где ?

 

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


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

Я же не использую прерывание по приему.

А зачем тогда устанавливаете бит разрешения прерывания на прием?

У Вас бит разрешения прерывания на передачу устанавливается один раз (не в основном цикле). На сколько я помню, после выполнения прерывания (после отправки данных), данный бит сбрасывается. То есть, у вас через USART должен отправиться только 1 байт.

Вы пишете, что выполняете перезапуск программы. Позвольте уточнить: перезапуск программы в ПК или в МК?

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


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

Ну да, Вы правы, бит разрешения прерывания на прием лишний.

Вот тут написано, что бит UTXE0 не сбрасывается после обработки прерывания. Сбрасывается только бит UTXIFG0 и устанавливается после опустошения буфера TXBUF0

Или я чего-то недопонимаю??

В программе в ПК идет прием не одного байта, а потока информации.

 

 

 

Перезапуск программы в ПК

post-87652-1465455941_thumb.jpg

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


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

"UTXE0" и не должен сбрасываться просто так - он выключает передатчик (это же вам не нужно?). "UTXIFG0" будет в "0" только на то время, пока сдвиговый регистр передатчика отправляет текущий байт данных, а UTXBUF уже содержит новый байт данных. По сему, передача единственного байта выглядит так:

в основной программе разрешаете прерывание от пустого буфера передатчика

 

bis.b #UTXIE0,&IE2

Loop:

jmp Loop

 

а в обработчике прерывания загружаете R7 в UTXBUFF и запрещаете прерывание от пустого буфера передатчика:

 

mov.b R7, &TXBUF0;

biс.b #UTXIE0,&IE2

 

 

И почему вы не пользуетесь при отладке JTAGом?

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


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

Извините, Obam, я не вполне понял что я делаю не так) у меня нет цели передачи одного байта. Я пользуюсь JTAGом только для прошивки в данном случае. у меня передается много данных. Но, если перезапускаю программу на ПК, то данные принимаются другие, вот в чем проблема(

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


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

Ага, я было решил, что вас смущает, почему передатчик сыплет данными без остановки (из вашего обработчика это и следует).

 

А JTAGом можно (и это самое ценное) посмотреть содержимое чего угодно в контроллере и выяснить действительно ли дурит ПК.

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


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

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

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

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

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

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

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

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

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

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