Код
int test_flag=0,test_flag2==0;
#define PIT_INTERRUPT_LEVEL 7
#define PIV_MS 60000 ////////////////////////////////////////////////
void Timer_handler(void)
{
unsigned int status;
//проверяем, прерывание от RTT или нет
if (AT91C_BASE_RTTC->RTTC_RTSR & AT91C_RTTC_RTTINC) {
if (test_flag==1) {
AT91C_BASE_PIOB->PIO_SODR = (1<<22);
test_flag=0;
}
else {
AT91C_BASE_PIOB->PIO_CODR = (1<<22);
test_flag=1;
}
}
//проверчем преривание от PIT ли
if (AT91C_BASE_PITC->PITC_PISR & AT91C_PITC_PITS) {
status = AT91C_BASE_PITC->PITC_PIVR;//сброс прерывания
status =status;
if (test_flag2==0) {
AT91C_BASE_PIOB->PIO_SODR = (1<<19);
test_flag2==1
}
else {
AT91C_BASE_PIOB->PIO_CODR = (1<<19);
test_flag2==0;
}
}
AT91C_BASE_AIC->AIC_EOICR=0x00;
} /////////////////////////////////////////////
////////Конфигурирование Timer TC1///////////
/////////////////////////////////////////////
void CnfTime1 (void)
{
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA );//конфигурируем PIT
AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN | AT91C_PITC_PITIEN | PIV_MS;
//Конфигурируем RTT
AT91C_BASE_RTTC->RTTC_RTMR=((unsigned int) 0x8000 << 0) |
((unsigned int) 0x0 << 16) |
((unsigned int) 0x1 << 17) |
((unsigned int) 0x1 << 18) ;
AT91F_AIC_ConfigureIt (AT91C_BASE_AIC,
AT91C_ID_SYS,
PIT_INTERRUPT_LEVEL,
AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
Timer_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SYS);
} ////////////////////////////////////////
// Основная функция/////////////////////
////////////////////////////////////////
main (void)
{
//Запускаем колки на PIOA and PIOB
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91B_LED_MASK);
AT91F_PIO_SetOutput(AT91C_BASE_PIOB, AT91B_LED_MASK);
CnfTime1();
//бесконечный цикл
while(1)
{
}
}
Вобщем когда выполняю из рам пошагово - нормально, мигают лампочки, когда жму кнопку Go то вылетает полностью. Тогда решил без дебага ... просто залил через самбу бинарик во флэш - реакция ноль. Нутром знаю что не так сконфигурировал перывание, но что не так?
#define PIT_INTERRUPT_LEVEL 7
#define PIV_MS 60000 ////////////////////////////////////////////////
void Timer_handler(void)
{
unsigned int status;
//проверяем, прерывание от RTT или нет
if (AT91C_BASE_RTTC->RTTC_RTSR & AT91C_RTTC_RTTINC) {
if (test_flag==1) {
AT91C_BASE_PIOB->PIO_SODR = (1<<22);
test_flag=0;
}
else {
AT91C_BASE_PIOB->PIO_CODR = (1<<22);
test_flag=1;
}
}
//проверчем преривание от PIT ли
if (AT91C_BASE_PITC->PITC_PISR & AT91C_PITC_PITS) {
status = AT91C_BASE_PITC->PITC_PIVR;//сброс прерывания
status =status;
if (test_flag2==0) {
AT91C_BASE_PIOB->PIO_SODR = (1<<19);
test_flag2==1
}
else {
AT91C_BASE_PIOB->PIO_CODR = (1<<19);
test_flag2==0;
}
}
AT91C_BASE_AIC->AIC_EOICR=0x00;
} /////////////////////////////////////////////
////////Конфигурирование Timer TC1///////////
/////////////////////////////////////////////
void CnfTime1 (void)
{
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA );//конфигурируем PIT
AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN | AT91C_PITC_PITIEN | PIV_MS;
//Конфигурируем RTT
AT91C_BASE_RTTC->RTTC_RTMR=((unsigned int) 0x8000 << 0) |
((unsigned int) 0x0 << 16) |
((unsigned int) 0x1 << 17) |
((unsigned int) 0x1 << 18) ;
AT91F_AIC_ConfigureIt (AT91C_BASE_AIC,
AT91C_ID_SYS,
PIT_INTERRUPT_LEVEL,
AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
Timer_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SYS);
} ////////////////////////////////////////
// Основная функция/////////////////////
////////////////////////////////////////
main (void)
{
//Запускаем колки на PIOA and PIOB
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91B_LED_MASK);
AT91F_PIO_SetOutput(AT91C_BASE_PIOB, AT91B_LED_MASK);
CnfTime1();
//бесконечный цикл
while(1)
{
}
}