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

 
 
> Одноразовый UART в AVR, Отправляет данные корректно только 1 раз..
Dikoy
сообщение Aug 2 2012, 18:17
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676



IAR 4.30, ATmega640.
Структура. Надо её всю слить в UART.
Беру указатель на начало и попёр. Вроде всё правильно. Но отправляется корректно она только первый раз, а потом идёт мусор.

CODE
#pragma pack(1)
typedef struct
{
unsigned char Length;
unsigned char Cmd;
unsigned char ADC1[ADCBUFSISE]; // ADCBUFSISE == 18
unsigned char ADC2[ADCBUFSISE];
unsigned char ADC3[ADCBUFSISE];
unsigned char crc_h;
unsigned char crc_l;
} Response_str;
#pragma pack()


Response_str TransmisionFrame;
unsigned char *pUart0_tx_pointer;


void USART0_Transmit( unsigned char data ) {
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data;
}


// инициирую отправку пакета раз в 2 секунды, пакет отправляется 2 мс, по этому период огромен
void main( void ) {
while(1) {
pUart0_tx_pointer = &TransmisionFrame.Cmd;
USART0_Transmit( TransmisionFrame.Length );
__delay_cycles(8000000*8);

}
}


// прерывание
// USART0 Transmitter interrupt service routine
#pragma vector=(0x36*0x02)
__interrupt void USART0_TXC_isr(void) { //

if( pUart0_tx_pointer <= &TransmisionFrame.crc_l ) {
UDR0 = *pUart0_tx_pointer++;
}
}


Результат:

Код
223A0000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000A55A - верный пакет
1A606908A5019746581A058A58A58199C65F1A606908A5019746581A058A58A58199C65F1A606908
A5019746581A058A58A58199C65F1A606908 - лажа
1A626910A52197C6581A078A64A5A19906601A626910A52197C6581A078A64A5A19906601A626910
A52197C6581A078A64A5A19906601A626910 - лажа


Подумал, указатель сползает... Сделал так:

Код
while( 1 )
  {
    pUart0_tx_pointer = &TransmisionFrame.Cmd;
    USART0_Transmit( TransmisionFrame.Length );  
    __delay_cycles(8000000*8);
    memset( &TransmisionFrame, 0xAA, sizeof(TransmisionFrame) );    
  }


Получил:

Код
223A0000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000A55A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


Лага категорически не вижу sad.gif

Сообщение отредактировал IgorKossak - Aug 2 2012, 18:23
Причина редактирования: [codebox] для длинного кода!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dikoy   Одноразовый UART в AVR   Aug 2 2012, 18:17
- - Сергей Борщ   Что-то (стек?) затирает содержимое структуры после...   Aug 2 2012, 21:34
- - kolobok0   Цитата(Dikoy @ Aug 2 2012, 22:17) ...иниц...   Aug 2 2012, 21:41
- - Dikoy   Да, скорее всего стек... 18 байт, это размер масси...   Aug 3 2012, 02:59
|- - Сергей Борщ   QUOTE (Dikoy @ Aug 3 2012, 05:59) Ещё до ...   Aug 3 2012, 23:10
|- - _Артём_   Цитата(Сергей Борщ @ Aug 4 2012, 02:10) З...   Aug 4 2012, 00:09
- - prottoss   2 Dikoy Вы не верно строите прерывание. Как Вы зна...   Aug 3 2012, 04:09
|- - Dikoy   Цитата(prottoss @ Aug 3 2012, 08:09) 2 Di...   Aug 3 2012, 14:51
|- - _Артём_   Цитата(Dikoy @ Aug 3 2012, 17:51) Помимо ...   Aug 3 2012, 15:01
- - mempfis_   Может организуйте fifo для отправки данных? CODEu...   Aug 3 2012, 08:44
- - xemul   Кодwhile( 1 ) { pUart0_tx_pointer = ...   Aug 3 2012, 10:51
|- - _Артём_   Цитата(xemul @ Aug 3 2012, 13:51) Кодwhil...   Aug 3 2012, 11:02
||- - xemul   Цитата(_Артём_ @ Aug 3 2012, 15:02) Несоп...   Aug 3 2012, 11:56
||- - _Артём_   Цитата(xemul @ Aug 3 2012, 14:56) У меня ...   Aug 3 2012, 12:18
||- - xemul   Цитата(_Артём_ @ Aug 3 2012, 16:18) И что...   Aug 3 2012, 12:25
||- - _Артём_   Цитата(xemul @ Aug 3 2012, 15:25) Да ну? ...   Aug 3 2012, 12:43
||- - xemul   Цитата(_Артём_ @ Aug 3 2012, 16:31) Кодvo...   Aug 3 2012, 12:48
||- - _Артём_   Цитата(xemul @ Aug 3 2012, 15:48) Йес-с-с...   Aug 3 2012, 13:07
||- - xemul   Цитата(_Артём_ @ Aug 3 2012, 17:07) Обычн...   Aug 3 2012, 13:19
|- - Dikoy   Цитата(xemul @ Aug 3 2012, 14:51) Кодwhil...   Aug 3 2012, 15:34
|- - _Артём_   Цитата(Dikoy @ Aug 3 2012, 18:34) Вы пред...   Aug 3 2012, 15:43
- - Dikoy   Почитал про UDRE. Получается, прерывание оное надо...   Aug 4 2012, 01:01
|- - _Артём_   Цитата(Dikoy @ Aug 4 2012, 04:01) Почитал...   Aug 4 2012, 01:17
|- - _Артём_   Цитата(Dikoy @ Aug 4 2012, 04:01) Отключа...   Aug 5 2012, 19:39
- - Dikoy   RE: Одноразовый UART в AVR   Aug 5 2012, 18:01
- - Dikoy   Я уже писал тут где-то, что у меня цепь из 2 чипов...   Aug 5 2012, 20:32
|- - _Артём_   Цитата(Dikoy @ Aug 5 2012, 23:32) Я уже п...   Aug 5 2012, 21:00
- - Dikoy   В общем, память однозначо перетирают прерывания от...   Aug 5 2012, 23:54
|- - Petka   Цитата(Dikoy @ Aug 6 2012, 03:54) В общем...   Aug 6 2012, 06:33
|- - _Артём_   Цитата(Petka @ Aug 6 2012, 09:33) Разумее...   Aug 6 2012, 11:12
||- - kolobok0   Цитата(_Артём_ @ Aug 6 2012, 15:12) ...А ...   Aug 6 2012, 13:10
||- - _Артём_   Цитата(kolobok0 @ Aug 6 2012, 16:10) код ...   Aug 6 2012, 13:24
||- - Сергей Борщ   QUOTE (_Артём_ @ Aug 6 2012, 16:24) Я так...   Aug 6 2012, 19:09
||- - kolobok0   Цитата(_Артём_ @ Aug 6 2012, 17:24) ...ко...   Aug 7 2012, 06:05
|- - Dikoy   Цитата(Petka @ Aug 6 2012, 10:33) Полный ...   Aug 6 2012, 20:18
|- - _Pasha   Цитата(Dikoy @ Aug 6 2012, 23:18) а не в ...   Aug 6 2012, 23:06
|- - Petka   Цитата(Dikoy @ Aug 7 2012, 00:18) ... 1 и...   Aug 7 2012, 07:05
|- - Dikoy   Цитата(Petka @ Aug 7 2012, 11:05) А что з...   Aug 7 2012, 23:02
- - _Pasha   Вы б отложили чашку с кофейной гущей и гадали бы н...   Aug 6 2012, 12:25
- - hd44780   Возьмите реализацию очередей из CVAvr-а. Я её и на...   Aug 7 2012, 06:27
|- - mempfis_   Цитата(hd44780 @ Aug 7 2012, 09:27) Возьм...   Aug 7 2012, 07:12
- - Dikoy   Переписал прерывание через указатель, и всё зарабо...   Aug 8 2012, 02:35
|- - Сергей Борщ   QUOTE (Dikoy @ Aug 8 2012, 05:35) Прерыва...   Aug 8 2012, 16:18
- - Dikoy   В этом случае компилер ругается Warning[Pa082]: ...   Aug 9 2012, 02:33
|- - xemul   Цитата(Dikoy @ Aug 9 2012, 06:33) В этом ...   Aug 9 2012, 09:39
||- - _Артём_   Цитата(xemul @ Aug 9 2012, 12:39) Вот так...   Aug 9 2012, 09:53
||- - xemul   Цитата(_Артём_ @ Aug 9 2012, 13:53) Нет, ...   Aug 9 2012, 10:18
||- - _Артём_   Цитата(xemul @ Aug 9 2012, 13:18) Обоснов...   Aug 9 2012, 11:00
|- - Сергей Борщ   QUOTE (Dikoy @ Aug 9 2012, 05:33) В этом ...   Aug 9 2012, 18:26
- - xemul   Спасибо. Вероятно, предупреждение связано таки с д...   Aug 9 2012, 11:41
- - Dikoy   инкремент указателя будет согласно типу. У нас это...   Aug 9 2012, 17:13


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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 09:17
Рейтинг@Mail.ru


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