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

 
 
 
Reply to this topicStart new topic
> После портирования прошивки с IAR под GCC не работает последовательный порт
cvv
сообщение Feb 5 2008, 15:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 3-02-08
Пользователь №: 34 700



С чего начать разруливание?

Осцилографа нетsad.gif
Go to the top of the page
 
+Quote Post
aesok
сообщение Feb 5 2008, 15:37
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(cvv @ Feb 5 2008, 18:22) *
С чего начать разруливание?


Вы ждете что я вам скажу номер строки где надо внести изменения???? У меня нет исходников.....

Анатолий.
Go to the top of the page
 
+Quote Post
cvv
сообщение Feb 5 2008, 16:05
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 3-02-08
Пользователь №: 34 700



Цитата(aesok @ Feb 5 2008, 17:37) *
Вы ждете что я вам скажу номер строки где надо внести изменения???? У меня нет исходников.....

Анатолий.


Ок,

настройка USART:

// USART initialization^M
// Communication Parameters: 8 Data, 1 Stop, No Parity^M
// USART Receiver: On^M
// USART Transmitter: On^M
// USART0 Mode: Asynchronous^M
// USART Baud rate: 38400 (Double Speed Mode)^M
UCSR0A=0x02;^M
UCSR0B=0x98;^M
UCSR0C=0x06;^M
UBRR0H=0x00;^M
UBRR0L=0x19; ^M

Обработчик:

// USART Receiver interrupt service routine^M
#ifndef __GNUC__
interrupt [USART_RXC] void usart_rx_isr(void)^M
#else
ISR(USART_RX_vect)
#endif
{ ^M
char status,Rdata/*,x*/;^M
unsigned long K;^M
status=UCSR0A;^M
Rdata=UDR0; ^M
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)^M
{^M
^M
if(rx_index0==0)^M
{^M
if(Rdata=='E')^M
{^M
//for(x=0;x<data[2];x++)putchar((data[x]));^M
PutDataBuff(); ^M
//putchar(crc8_compute(&data[1],5)); ^M
rx_index0=0;goto end_rx_isr;^M
}//resived error need retransmit last paket^M
}^M
if(rx_index0>32)rx_index0=0;^M
rx_buffer0[rx_index0++]=Rdata; ^M
if(rx_index0==2)rx_weit_index0=Rdata;//set paket size^M
if (rx_weit_index0 == rx_index0)//paket resived^M
{^M
//check CRC^M
if((rx_buffer0[rx_weit_index0-1])==(crc8_compute(&rx_buffer0[0],rx_weit_index0-1)))^M
{//crc ok^M
.....
}^M
else {PutError('C');}//crc error^M
rx_index0=0;^M
}^M
^M
}^M
else {PutError('F');rx_index0=0;}//frame error^M
^M
end_rx_isr: ^M
return;^M
} ^M
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 5 2008, 18:14
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(cvv @ Feb 5 2008, 18:05) *
Для оформления исходников вверху формы ввода есть кнопочка с символом "#".
Не видно разрешения прерываний ( sei(); ). Коды, которые вы заносите в регистры USART переведите из шетнадцатиричных цифр в имена битов самостоятельно. Возможно, визард CV и прост в освоении, но читать его код несколько неудобно. Что не работает вы тоже не указали - нет приема, принимается не то, прерывания не происходят? Передача работает?

Начать разруливания можно с инвертирования ноги. А на ногу повесить светодиод или подключить вольтметр. Сначала убеждаетесь, что вам удалось просто инвертировать ногу. Потом переносите это инвертирование в прерывание. Запускаете гипертерминал, нажимаете любую кнопку, символ передается, убеждаетесь, что он дошел до процессора, прерывание вызвалось, нога инвертировалась. Посылаете следующий символ. Убеждаетесь, что ситуация повторяется, т.е. из прерывания программа выходила и снова вошла. Потом перемещаете дерганье ногой по программе и проверяете, куда заходит ваша программа.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
cvv
сообщение Feb 7 2008, 09:37
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 3-02-08
Пользователь №: 34 700



>Не видно разрешения прерываний ( sei(); ).

Разрешения есть в ф-и main() которую я не приводил.

>Передача работает?

Приемная часть ничего не принимает.

> А на ногу повесить светодиод или подключить вольтметр.

Сейчас проверну
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 7 2008, 12:32
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(cvv @ Feb 7 2008, 11:37) *
>Передача работает?

Приемная часть ничего не принимает.
Ну, хотите шифроваться - шифруйтесь. Я пытался у вас получить побольше косвенной информации, чтобы понять что конкретно не работает и что может быть причиной.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
cvv
сообщение Feb 7 2008, 12:44
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 3-02-08
Пользователь №: 34 700



Цитата(Сергей Борщ @ Feb 7 2008, 14:32) *
Ну, хотите шифроваться - шифруйтесь. Я пытался у вас получить побольше косвенной информации, чтобы понять что конкретно не работает и что может быть причиной.


у меня тут мысли запутались. прошивка по наступлению некоторого внешнего события (нажата кнопка) должна посылать код события через UART. После перекомпиляции GCC пакеты приходить перестали, при этом по загорающимся лампочкам видно что процеесор обрабатывает нажатия корректно.

меня тут убедили отказатся от испорльзования UART в текущей схеме по причине отсутствия кварца, тем не менее мне придется в ближайшем будущем снова программировать UART в паре других железок с кварцем

\\wbr Vitaly
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th July 2025 - 08:10
Рейтинг@Mail.ru


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