Цитата(taoga @ Aug 15 2011, 14:29)

EMAC_Handler постоянно вызывается.
Не устанавливается бит EMAC_RX_OWNERSHIP_BIT.
Уточняю: Один раз выполняется условие в EMAC_Handler():
Код
if (( (AT91C_BASE_EMAC->EMAC_ISR & AT91C_BASE_EMAC->EMAC_IMR) & AT91C_EMAC_RCOMP) || (AT91C_BASE_EMAC->EMAC_RSR & AT91C_EMAC_REC)) {
printf("RX packet\n\r");
rxStatusFlag = AT91C_EMAC_REC;
...
и дальше в статистике сохраняется, что был установлен бит OVR регистра EMAC_RSR, т.е.
выполняется это условие:
Код
if (AT91C_BASE_EMAC->EMAC_RSR & AT91C_EMAC_OVR) {
rxStatusFlag |= AT91C_EMAC_OVR;
EmacStatistics.rx_ovrs++;
}
Далее EMAC_Handler() вызывается "вхолостую" нет ни приема, ни передачи.
Такая ситуация возникает, когда включаются d-cache, i-cache, mmu.
Может быть я неправильно задал таблицу трансляции или буферы остались кэшируемыми?
Если я все сделал правильно куда дальше "копать"?
Сообщение отредактировал IgorKossak - Aug 16 2011, 12:33