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;
}
{
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();
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 нужно передавать два указателя - одно на место под данные, второе под длину принятых данных. Пока получается только один.