Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос по NEC серии 78K0R/KF3
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
another_one
Здравствуйте.

Прощу помочь в простом вопросе по настройке UART'a в микроконтроллерах NEC семейства 78K0R/KF3.

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

Заранее благодарен
Verifi
Цитата(another_one @ Nov 12 2009, 07:46) *
Здравствуйте.

Прощу помочь в простом вопросе по настройке UART'a в микроконтроллерах NEC семейства 78K0R/KF3.
Заранее благодарен


А в чём проблема то огласите
another_one
Цитата(Verifi @ Nov 12 2009, 09:00) *
А в чём проблема то огласите

Спасибо за поддержку.
Проблема заключается в том, что присутствует постоянная ошибка при приеме данных пакета(протокол DMX-512).
Согласно стандарту протокола скорость передачи (bit rate = 250 kbit/s), я настроил UART0 на приемник :
Тактирование от внешнего кварцего генератора на 16 Мгц
CODE
void Clock_Init( void )
{
/* Set fMX */
UCHAR temp_stabset, temp_stabwait;
OSTS = CG_OSCSTAB_SEL18;
CMC = CG_HISYS_OSC | CG_SYSOSC_OVER10M | CG_SUB_PORT;
/* 10MHz < fxh <= 20MHz, X1, X2 as crystal/ceramic resonator connection, XT1, XT2 as I/O port */
CSC = CG_HISYS_OPER | CG_SUB_STOP | CG_HIO_STOP;
/* X1 oscillator operating, stop internal high-speed oscillator, stop XT oscillator */
temp_stabset = CG_OSCSTAB_STA18;
do{
temp_stabwait = OSTC;
temp_stabwait &= temp_stabset;
}while(temp_stabwait != temp_stabset);
OSMC = CG_FCLK_OVER10M;
__no_operation();
__no_operation();
__no_operation();
CKC = CG_CPUCLK_MAIN | CG_CPUCLK_SELMAIN | CG_MAINCLK_HISYS | CG_MAINCLK_SELHISYS | CG_CPUCLK_MAIN0 | _bit3_to1;
// High-speed system clock (fMX), fCLK = fMAIN
}
void UART0_Start( void )
{
SRMK0 = 0; /* INTSR0 enable */
SREMK0 = 0; /* INTSRE0 enable */
SS0 |= SAU_CH1_START_TRG_ON; /* UART0 receive enable */
}
void SAU0_Init( void )
{
SAU0EN = 1; /* SAU0 clock supply */
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
SPS0 = SAU_CK00_FCLK_0 | SAU_CK01_FCLK_0; // fclk0 = 16Mhz
UART0_Init( );
}
void UART0_Init( void )
{
/* UART0 initial setting */
ST0 |= SAU_CH1_STOP_TRG_ON; /* UART0 receive disable */
ST0 |= SAU_CH0_STOP_TRG_ON; /* UART0 transmit disable */
SRMK0 = 1; /* INTSR0 disable */
SREMK0 = 1; /* INTSRE0 disable */
STMK0 = 1; /* INTST0 disable */
SRIF0 = 0; /* INTSR0 IF clear */
SREIF0 = 0; /* INTSRE0 IF clear */
STIF0 = 0; /* INTST0 IF clear */
SIR01 = SAU_SIRMN_FECTMN | SAU_SIRMN_PECTMN | SAU_SIRMN_OVCTMN;
SMR01 = SAU_EDGE_FALL | SAU_SMRMN_INITIALVALUE | SAU_CLOCK_SELECT_CK00 | SAU_CLOCK_MODE_CKS | SAU_TRIGGER_RXD | SAU_UART | SAU_TRANSFER_END;
SMR00 = SAU_SMRMN_INITIALVALUE | SAU_CLOCK_SELECT_CK00 | SAU_CLOCK_MODE_CKS | SAU_TRIGGER_SOFTWARE | SAU_UART | SAU_TRANSFER_END;
// receive only
SCR01 = SAU_RECEPTION | SAU_INTSRE_MASK | SAU_PARITY_NONE | SAU_LSB | SAU_STOP_2 | SAU_LENGTH_8;
SDR01 = UART0_RECEIVE_DIVISOR; //// 250 kHz
/* INTSR0 priority low */
SRPR10 = 1;
SRPR00 = 1;
/* INTSRE0 priority low */
SREPR10 = 1;
SREPR00 = 1;
/* INTST0 priority low */
STPR10 = 1;
STPR00 = 1;
/* RXD0 pin setting */
PM1 |= 0x02;
/* TxD0 pin setting */
PM1 &= ~0x04;
P1 |= 0x04;
UART0_Start();
}

В результате происходит постоянный переход по вектору прерывания ошибки приема.

Не могу понять, что не так, необходима Ваша помощь.
guxa
Утро доброе!
Попробуйте посмотреть здесь: http://www.eu.necel.com/_pdf/U19885EE1V0AN00.PDF
another_one
Цитата(guxa @ Nov 16 2009, 09:56) *
Утро доброе!
Попробуйте посмотреть здесь: http://www.eu.necel.com/_pdf/U19885EE1V0AN00.PDF

Спасибо за поддержку.

Я как раз взял этот код за основу, проблема вроде решена, кстате код от NEC(его логика) на мой взгляд не совсем корректна в следующим случае:

когда чтение ошибки после дектектирования break инртервала происходит по вектору прерывания упешного приема фрейма. В этом случае первый байт после MAB интервала считается как "break"? запускается таймер отсчета длительности этого интервала, и.т.д.

Необходимо разделить по соответствующим векторам этот код.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.