|
Одноразовый UART в AVR, Отправляет данные корректно только 1 раз.. |
|
|
|
Aug 2 2012, 18:17
|

Местный
  
Группа: Участник
Сообщений: 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 Лага категорически не вижу
Сообщение отредактировал IgorKossak - Aug 2 2012, 18:23
Причина редактирования: [codebox] для длинного кода!!!
|
|
|
|
|
 |
Ответов
|
Aug 9 2012, 18:26
|

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

|
QUOTE (Dikoy @ Aug 9 2012, 05:33)  В этом случае компилер ругается CODE { unsigned char * pTmp = *pADC3_rx_pointer; *pTmp++ = UDR1; pADC3_rx_pointer = pTmp; } можно попробовать также другие варианты, и выбрать наиболее удачно компилирующийся: CODE { unsigned char * pTmp = *pADC3_rx_pointer++; *pTmp = UDR1; } CODE { unsigned char * pTmp = *pADC3_rx_pointer; *pTmp = UDR1; pADC3_rx_pointer = ++pTmp; }
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
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 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 xemul Спасибо.
Вероятно, предупреждение связано таки с д... Aug 9 2012, 11:41 Dikoy инкремент указателя будет согласно типу. У нас это... Aug 9 2012, 17:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|