реклама на сайте
подробности

 
 
> вопрос по NEC серии 78K0R/KF3, по поводу Юарта
another_one
сообщение Nov 12 2009, 04:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557



Здравствуйте.

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

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

Заранее благодарен


--------------------
One Chip is All You Need
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Verifi
сообщение Nov 12 2009, 06:00
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 5-05-08
Из: Kursk
Пользователь №: 37 282



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

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


А в чём проблема то огласите


--------------------
"Если я в чем-то сомневаюсь, я возвращаюсь к началу"
Go to the top of the page
 
+Quote Post
another_one
сообщение Nov 12 2009, 18:54
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557



Цитата(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();
}

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

Не могу понять, что не так, необходима Ваша помощь.
Причина редактирования: Уменьшение видимого размера цитаты исходника.


--------------------
One Chip is All You Need
Go to the top of the page
 
+Quote Post
guxa
сообщение Nov 16 2009, 06:56
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 17-12-06
Пользователь №: 23 612



Утро доброе!
Попробуйте посмотреть здесь: http://www.eu.necel.com/_pdf/U19885EE1V0AN00.PDF
Go to the top of the page
 
+Quote Post
another_one
сообщение Nov 16 2009, 18:57
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557



Цитата(guxa @ Nov 16 2009, 09:56) *
Утро доброе!
Попробуйте посмотреть здесь: http://www.eu.necel.com/_pdf/U19885EE1V0AN00.PDF

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

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

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

Необходимо разделить по соответствующим векторам этот код.


--------------------
One Chip is All You Need
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016