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

 
 
> Запрет/Разрешение прерываний в кольцевых буферах, Как правильно и оптимально?
Smallday
сообщение Jun 18 2008, 03:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 18-06-07
Пользователь №: 28 506



Пожалуйста, подскажите как правильно и оптимально Запрешать/Разрешать прерывания при работе с программыми буферами устройств. Попробовал несколько вариантов:
1)
cpsr=DisableIRQ();

.... // работа с буфером

RestoreIRQ(cpsr);
2)
VICIntEnClr = 1 << UART0_INT;

.... // работа с буфером

VICIntEnable = 1 << UART0_INT;
3)
cpsr=DisableIRQ();
U0IER &= ~UIER_ETBEI;
RestoreIRQ(cpsr);

.... // работа с буфером

cpsr=DisableIRQ();
U0IER |= UIER_ETBEI;
RestoreIRQ(cpsr);

Второй случай давал сбои и зависание на LPC2138, а вот на LPC2368 работаспособен..

Сообщение отредактировал Smallday - Jun 18 2008, 03:18
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Jun 18 2008, 09:56
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Что касается буферов, то они бывают разными и есть варианты построения и дисциплины работы, не требующие запрета прерываний.


А можно примерчик такого?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
tag
сообщение Jun 18 2008, 11:37
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(Rst7 @ Jun 18 2008, 13:56) *
А можно примерчик такого?


...вот пример кольцевого буфера не требующего запрета прерываний

struct
{
U8 in;
U8 out;
U8 data [256];
} buf;


void init_buf(void)
{
buf.in = buf.out;
}



void isr_rx(void)
{
U8 c;
...

if ((U8)(buf.in + 1) != buf.out) buf.data [buf.in++] = c;
else return;
}


void main(void)
{
U8 c;

...

if (buf.in != buf.out) c = buf.data[buf.out++];

...

}

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Smallday   Запрет/Разрешение прерываний в кольцевых буферах   Jun 18 2008, 03:11
- - sensor_ua   запрет источника прерывания приводит к потере запр...   Jun 18 2008, 05:29
|- - tag   Цитата(sensor_ua @ Jun 18 2008, 09:29) за...   Jun 18 2008, 05:53
|- - aaarrr   Цитата(sensor_ua @ Jun 18 2008, 09:29) за...   Jun 18 2008, 06:44
- - sensor_ua   Цитата...Вы уверены? Абсолютно. Толко я чуть ошибс...   Jun 18 2008, 06:13
|- - tag   Цитата(sensor_ua @ Jun 18 2008, 10:13) Чи...   Jun 18 2008, 06:19
- - sensor_ua   ЦитатаПосмотрите хотя бы картинку Interrupt reques...   Jun 18 2008, 07:19
|- - aaarrr   Цитата(sensor_ua @ Jun 18 2008, 11:19) См...   Jun 18 2008, 07:30
- - Rst7   Цитата..вот пример кольцевого буфера не требующего...   Jun 18 2008, 12:02
|- - defunct   Цитата(Rst7 @ Jun 18 2008, 15:02) >...   Jun 18 2008, 21:16
|- - tag   Цитата(Rst7 @ Jun 18 2008, 16:02) Да, так...   Jun 19 2008, 05:20
|- - tag   ...скажу даже больше, так реализован обмен с модем...   Jun 19 2008, 05:26
- - rezident   Для кольцевых буферов я лично использую два индекс...   Jun 18 2008, 14:21
- - Rst7   А можно пример кода?   Jun 18 2008, 16:37
- - mdmitry   Идея кольцевых буферов и код есть в avr-lib. У мен...   Jun 18 2008, 16:50
- - Rst7   ЦитатаИдея кольцевых буферов и код есть в avr-lib ...   Jun 18 2008, 17:11
- - AHTOXA   Цитата(rezident @ Jun 18 2008, 20:21) Для...   Jun 18 2008, 17:38
- - Rst7   ЦитатаЭто еще почему?! Еще как будет работать....   Jun 19 2008, 05:25


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

 


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


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