1830ВЕ32У, 1830ВЕ32АУ

Интегральные схемы разработки ОАО "НИИЭТ" с повышенной стойкостью к СВ ВВФ

Модераторы: gurzzza, pip, _sva_

cto402
Сообщения: 9
Зарегистрирован: 11 сен 2013, 08:50

Re: 1830ВЕ32У, 1830ВЕ32АУ

Сообщение cto402 » 28 мар 2016, 09:46

Здравствуйте.
Вопрос по асинхронному приёмопередатчику.
Из описания возникает двоякое толкование ситуации, когда посылка не считана и приходит новая. Не понятно, при этом, старая посылка перезаписывается новой или в буфере будет оставаться несчитанная ("старая") посылка? Вот выдержки из текста:
"..если к моменту окончания приема байта предыдущий байт не был считан из SBUF, то он будет
потерян.." - значит перезаписывается новой посылкой?
"..если не выполнено условие "RI"=0 ....., то принятая последовательность бит теряется..."(фрагмент из описания режима "1", описание ситуации, когда флаг "RI" не был сброшен) - значит остаётся старая посылка?
Уточню ещё раз вопрос, какая посылка будет в SBUF, если посылки не считывать, первая или последняя? В связи с этим ещё вопрос. Достаточно ли сбросить флаг "RI" для приёма очередной посылки или нужно выполнять чтение SBUF?

cto402
Сообщения: 9
Зарегистрирован: 11 сен 2013, 08:50

Re: 1830ВЕ32У, 1830ВЕ32АУ

Сообщение cto402 » 28 мар 2016, 12:00

Ещё вопросы по асинхронному приёмопередатчику. Цитирую ТО:
"Если бит остановки потерян, устанавливается бит ошибки формата (FE). Этот бит может быть проверен программно после каждого приема для обнаружения ошибок связи."
1. Означает ли это, что в режимах "1", "2" и "3", независимо от состояния стоп-бита, при соблюдении всех остальных условий, посылка будет принята и выставлен флаг "RI" ?
2. Будет ли принята посылка в режиме "1" и сформирован флаг "FE" при следующем исходном состоянии приёмника: "RI"=0, "SM"=1, стоп-бит = 0.

_sva_
Специалист
Сообщения: 202
Зарегистрирован: 12 ноя 2009, 17:42
Откуда: Воронеж
Contact:

Re: 1830ВЕ32У, 1830ВЕ32АУ

Сообщение _sva_ » 29 мар 2016, 12:20

cto402 писал(а): Уточню ещё раз вопрос, какая посылка будет в SBUF, если посылки не считывать, первая или последняя? В связи с этим ещё вопрос. Достаточно ли сбросить флаг "RI" для приёма очередной посылки или нужно выполнять чтение SBUF?
Первая, сбросить флаг достаточно.

_sva_
Специалист
Сообщения: 202
Зарегистрирован: 12 ноя 2009, 17:42
Откуда: Воронеж
Contact:

Re: 1830ВЕ32У, 1830ВЕ32АУ

Сообщение _sva_ » 29 мар 2016, 12:48

cto402 писал(а):Ещё вопросы по асинхронному приёмопередатчику. Цитирую ТО:
"Если бит остановки потерян, устанавливается бит ошибки формата (FE). Этот бит может быть проверен программно после каждого приема для обнаружения ошибок связи."
1. Означает ли это, что в режимах "1", "2" и "3", независимо от состояния стоп-бита, при соблюдении всех остальных условий, посылка будет принята и выставлен флаг "RI" ?
2. Будет ли принята посылка в режиме "1" и сформирован флаг "FE" при следующем исходном состоянии приёмника: "RI"=0, "SM"=1, стоп-бит = 0.
1. Да.
2. Да.

alextm
Сообщения: 1
Зарегистрирован: 10 окт 2017, 15:54
Предприятие: АО НПЦ "Полюс"

Re: 1830ВЕ32АУ

Сообщение alextm » 10 окт 2017, 16:23

Здравствуйте, проблема при приеме данных по UART
Столкнулся с непонятной проблемой при обмене данными по UART - прием данных происходит с ошибкой. Неверно интерпретируются входные данные при формате байтов с одним стоповым битом. Из первой осциллограммы видно, что второй байт не был принят (обработчик прерывания UART не вызвался). Так же, странно, что не было установки признака ошибки кадра FE. (При содержимом посылки 0xFF, 0x00, 0x00, 0x00 ... 0x00, стабильно пропускается каждый второй байт и "FE" не возникает)
При изменении содержимого посылки на FF 10 02 0A 15 00 01 97 30 00 01.... начинают происходить ошибки FE, прием байтов идет с ошибкой. Эта ситуация показана на втором рисунке.
Для того, что бы контролировать работу UART и контроллера в целом, в момент приема команд по UART, сделана непрерывная выдача константы 0x55, которая корректно принимается ПК, что позволяет судить о корректности тактирования МК, и его настоек UART.
Для эксперемента, была изменена настройка порта на стороне ПК с одного стопового бита на два, при этом прием данных МК происходит без потерь и ошибок. (Рис.3). Но в штатной системе обмен должен происходить в формате 19200,8,N,1. Прошу пояснить данную ситуацию и дать совет решения.

Для пояснения привожу код инициализации UART и обработчик прерывания.
void UART_ISR(void) ISR_ID_UART {
unsigned char i;

if (TI) {
TI = 0;
WDT_HW_RESET;
TB8 = 0;
SBUF = 0x55;
return ;
}
DEBUG_IRQ_UART_RI_START;
if (RI) {
RI = 0;
i = SBUF;
if (SM0) // FE
{
DEBUG_UART_FE_DETECT;
SM0 = 0;
}
//HexBin_Rx_Char(i); обработка данных отключена
DEBUG_IRQ_UART_RI_EXIT;
}
}
Main():
...
InitUART();
...
Initxxxx();
...
SBUF = 0x55;
IE = (1 << 7) | (1 << 4); //EA + ES
PCON &= ~(1<<6);
SM0 = 0;
PCON |= (1<<6);
SM0 = 0;
while (1) {
}
Инициализация:
unsigned char InitUART() {

PCON = 0;
SCON = 0x50;
#ifdef UART_USE_TIMER2
#warning "UART использует таймер 2"
RCAP2L = UART_RCAP_CALC(UART_BAUD);
RCAP2H = UART_RCAP_CALC(UART_BAUD) >> 8;
TL2 = RCAP2L;
TH2 = RCAP2H;
RCLK = 1;
TCLK = 1;
TR2 = 1;
#else
#warning "UART использует таймер 1"
TMOD = (TMOD & 0x0F) | ( 2 << 4) ;// Timer 1 : режим "2"
TH1 = UART_T1_CALC(UART_BAUD);
TL1 = UART_T1_CALC(UART_BAUD);
TR1 = 1; // Timer 1 run
#endif

RI = 0; //Сброс битов приёма и передачи
TI = 0;

PCON = 0x40 | (UART_BAUD_x2 << 7); //Use FE. SM0 as FE
ES = 1;
PS = 1; // Высокий приоритет!
P3 = 0xff;
return 0;
}
Определения:
#define UART_BAUD 9600
#define UART_BAUD_x2 1 // режим удвоения скорости
#define CLK 11059000 //11.059 МГц
#define TIMER2_DIV 32
// #define UART_USE_TIMER2

#define UART_RCAP_CALC(baud) (unsigned short)((65536.0 - ((float)CLK / (float)baud / (float)TIMER2_DIV)) + 0.5) //9600
#define UART_T1_CALC(baud) (unsigned short)((256.0 - (((float)CLK/12.0)/ ((float)baud * 32.0))) + 0.5)

#define DEBUG_PIN0( x ) P1_0 = x;
#define DEBUG_PIN1( x ) P1_1 = x;
#define WDT_HW_RESET P3_5 ^= 1;

#define DEBUG_IRQ_UART_RI_START DEBUG_PIN1(0); DEBUG_PIN1(1)
#define DEBUG_IRQ_UART_RI_EXIT DEBUG_PIN1(0); DEBUG_PIN1(1);DEBUG_PIN1(0); DEBUG_PIN1(1)
#define DEBUG_UART_FE_DETECT DEBUG_PIN0(0); DEBUG_PIN0(1);
Потеря байтов. нет FE!
Изображение

Потеря байтов. 19200 бод, 1 стоп бит.
Изображение

Обмен нормальный. 19200 бод, 2 стоп бит.
Изображение

Ответить

Вернуться в «Радиационно-стойкие интегральные схемы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость