Код
static __arm __irq void vADC_ISR(void)
{
unsigned portCHAR sr =0;
unsigned portCHAR i = 0;
AT91_REG * ADDR;
// Read status register
sr = a_pADC->ADC_SR;
sBUTTONS[7]=sr;
for (i=0;i<8;i++)
{
ADDR = AT91C_ADC_CDR0 + (4*i);
if ( (sr >> i) & 0x01)
{
// Bit is set, put data to array
sADC_RAW[i] = *(ADDR);
}
}
// Start new conversion
a_pADC->ADC_CR = 0x2;
/* End the interrupt in the AIC. */
AT91C_BASE_AIC->AIC_EOICR = 0;
}
{
unsigned portCHAR sr =0;
unsigned portCHAR i = 0;
AT91_REG * ADDR;
// Read status register
sr = a_pADC->ADC_SR;
sBUTTONS[7]=sr;
for (i=0;i<8;i++)
{
ADDR = AT91C_ADC_CDR0 + (4*i);
if ( (sr >> i) & 0x01)
{
// Bit is set, put data to array
sADC_RAW[i] = *(ADDR);
}
}
// Start new conversion
a_pADC->ADC_CR = 0x2;
/* End the interrupt in the AIC. */
AT91C_BASE_AIC->AIC_EOICR = 0;
}
Обратите внимание на переменную ADDR, я слева буду писать значение i, а справа - значение ADDR, полученное при отладке через JTAG:
i=0 ADDR=0xFFFD8030
i=1 ADDR=0xFFFD8040
i=2 ADDR=0xFFFD8050
ну и так далее.
Слушайте, может я умом тронулся, но вроде бы 0xFFFD8030 + 4 == 0xFFFD8034, или я чего-то недопонимаю? Контроллер - SAM7S256
Уж не знаю, почему так, но почему-то с адресом как с обычным числом работать нельзя.
Тупое ADDR= AT91C_ADC_CDR0 + i; заработало. Компиляцкий компилятор перестал умножать на 4....