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

 
 
> Правильно ли организую прерывания?
Shevnnov
сообщение Apr 27 2010, 07:36
Сообщение #1


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

Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498



Необходимо организовать обработку прерывания для SOPC системы. Когда прерывание выполняется необходимо выполнить функцию eth_receive_data() и получить принятый данные из регистров. Раскурив документацию Alter'ы попытался написать обработку. Правильно ли я делаю

CODE
void init_eth_rx_interrupts(int *data)
{
volatile void* data_context = (volatile void*)data;
alt_irq_register(ETH_RECEIVE_IRQ, data_context, eth_receive_data);
}

int eth_receive_data(int *data, int *data_len)
{
int i;
int rx_p_len = 0;

rx_p_len = IORD_ETH_CONTROL_RECEIVED_BYTES(ETH_CONTROL_BASE);

// data = (int*)malloc(rx_p_len);

for (i=0; i < rx_p_len/4; i++)
data[i] = IORD_ETH_RECEIVE(ETH_RECEIVE_BASE,i);

*data_len = rx_p_len;

if (data[0])
return 1;
else
return 0;
}


и в main пишу следующее:

CODE
rx_data = (int*)malloc(pack_count*sizeof(int));

init_eth_rx_interrupts(rx_data);
alt_irq_enable_all(*rx_data);

printf("\n Received: \t");
for (i=0; i< rx_data_len/4; i++)
printf("%x",rx_data[i]);

alt_irq_disable_all();


Правильно ли так или надо по другому это делать?
И еще проблема для функции eth_receive_data нужно передавать два указателя - одно на место под данные, второе под длину принятых данных. Пока получается только один.

Сообщение отредактировал Shevnnov - Apr 27 2010, 07:37
Go to the top of the page
 
+Quote Post



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

 


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


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