|
|
  |
Правильно ли организую прерывания? |
|
|
|
Apr 27 2010, 07:36
|

Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|