Задача такая:
Запустить PIT, досчитать до чего-нибудь, вылететь в прерывание по флагу PITS.
Код
#include <AT91SAM7S256.H> /* AT91SAMT7S64 definitions */
#include <lib_AT91SAM7S256.h>
/*
* Main Program
*/
int i;
__irq void isrSYS(void)
{
unsigned int status = AT91C_BASE_SYS->PITC_PIVR;
if (i==1)
{
AT91C_BASE_PIOA->PIO_SODR = i;
i=0;
}
else
{
AT91C_BASE_PIOA->PIO_SODR = i;
i=1;
}
AT91C_BASE_AIC->AIC_EOICR = status;
}
int main (void) {
// Enable the Clock of the PIO
AT91C_BASE_PIOA->PIO_PER = (1 << AT91C_PIO_PA0);
AT91C_BASE_PIOA->PIO_OER = 0x0000ffff;
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA)| (1 << AT91C_ID_SYS);
AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN|AT91C_PITC_PITIEN|0x000007;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (unsigned int)isrSYS;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_SYS] = 6;
AT91C_BASE_AIC->AIC_IECR = (1UL << AT91C_ID_SYS);
AT91C_BASE_AIC->AIC_IECR |= 2;
AT91C_BASE_AIC->AIC_IDCR &= ~2;
// Loop forever
for (;;)
{
j++;
}
}
#include <lib_AT91SAM7S256.h>
/*
* Main Program
*/
int i;
__irq void isrSYS(void)
{
unsigned int status = AT91C_BASE_SYS->PITC_PIVR;
if (i==1)
{
AT91C_BASE_PIOA->PIO_SODR = i;
i=0;
}
else
{
AT91C_BASE_PIOA->PIO_SODR = i;
i=1;
}
AT91C_BASE_AIC->AIC_EOICR = status;
}
int main (void) {
// Enable the Clock of the PIO
AT91C_BASE_PIOA->PIO_PER = (1 << AT91C_PIO_PA0);
AT91C_BASE_PIOA->PIO_OER = 0x0000ffff;
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA)| (1 << AT91C_ID_SYS);
AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN|AT91C_PITC_PITIEN|0x000007;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (unsigned int)isrSYS;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_SYS] = 6;
AT91C_BASE_AIC->AIC_IECR = (1UL << AT91C_ID_SYS);
AT91C_BASE_AIC->AIC_IECR |= 2;
AT91C_BASE_AIC->AIC_IDCR &= ~2;
// Loop forever
for (;;)
{
j++;
}
}
Стартап - стандартный из keil 3.80
Нажмите для просмотра прикрепленного файла
Помогите разобраться, вроде бы и все понятно, а затык
