Может что то пропустил, прерывания от таймера есть, а прерываний от ацп нет,атрибуты __attribute__ ((interrupt)); не забыл указать
Каналы ацп 4567 которые не требуют настройки pio. мк at91sam7s256 gcc
CODE
#include <AT91SAM7S256.H>
#include "board.h"
#include "adc.h"
//------------------------------------------------------------
unsigned int ADCBUFER[4];
int y = 0;
//------------------------------------------------------------
AT91PS_TC p_TC0 = AT91C_BASE_TC0;
AT91PS_AIC p_AIC = AT91C_BASE_AIC;
AT91PS_PMC p_PMC = AT91C_BASE_PMC;
AT91PS_ADC p_ADC = AT91C_BASE_ADC;
//------------------------------------------------------------
void Init_T0(void){
p_PMC->PMC_PCER = BV(AT91C_ID_TC0);
/*Razreshenie taktirovanija T0 */
p_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_CPCTRG;
/* Pririvanie kogda TC0 = TC_RC*/
p_TC0->TC_RC = (unsigned int)(100*(12000000/1000.0/128.0)/(sizeof(ADCBUFER)/2 - 6 + 3) - 1);
/**/
/*Init Interrupt*/
p_TC0->TC_IER = AT91C_TC_CPCS;
/* razreshenie prer. pri sofpadenii*/
p_AIC->AIC_SVR[AT91C_ID_TC0] = (unsigned long) Func_Irq_Timer0;
/* vector programm prer. T0 */
p_AIC->AIC_SMR[AT91C_ID_TC0] = 0x07;
/* prioritet prer. ot T0 0 7 */
p_AIC->AIC_IECR = BV(AT91C_ID_TC0);
/* razreshenie prer. ot T0 */
p_TC0->TC_CCR = AT91C_TC_CLKEN;
/* razreshenie sinhronizacii T0 */
p_TC0->TC_CCR = AT91C_TC_SWTRG;
/* perezapusk T0 */
}//end
//------------------------------------------------------------
void InitADC(void){
p_PMC->PMC_PCER = BV(AT91C_ID_ADC);
/* razreshenie tactirovanija ADC */
p_ADC->ADC_CR = AT91C_ADC_SWRST;
/* sbros ADC */
p_ADC->ADC_CHER = AT91C_ADC_CH4 | AT91C_ADC_CH5 | AT91C_ADC_CH6 | AT91C_ADC_CH7;
/* razreshenie kanalov 1 2 3 4 */
p_ADC->ADC_MR = AT91C_ADC_LOWRES_10_BIT | ( (12/2/ADC_CLK - 1) << 8 ) | (5 << 24);
/* razreshenie 8 ili 10 bit; chastota sinh ADC; wrema viborki hranenija; */
p_AIC->AIC_SVR[AT91C_ID_ADC] = (unsigned long)Func_Irq_Adc;
/* vector programm prer. ADC */
p_AIC->AIC_SMR[AT91C_ID_ADC] = 0x05;
/* prioritet prer. ot T0 0 7 */
p_AIC->AIC_IECR = BV(AT91C_ID_ADC);
/* razreshenie prer. ot ADC */
p_ADC->ADC_RPR = (unsigned long)(ADCBUFER);
/* ukazatel na bufer priema */
p_ADC->ADC_RCR = sizeof(ADCBUFER);
/* razmer bufera priema */
p_ADC->ADC_RNPR = 0;
/* ukazatel na bufer 2 priema */
p_ADC->ADC_RNCR = 0;
/* razmer bufera 2 priema */
p_ADC->ADC_PTCR = AT91C_PDC_RXTEN;
/* razreshenie priema peredachi */
p_ADC->ADC_IER = AT91C_ADC_ENDRX; /*| AT91C_ADC_EOC3; */
/* Prerivanie po zapolneniu bufera */
// p_ADC->ADC_CR = AT91C_ADC_START;
}//end
//------------------------------------------------------------
void Func_Irq_Adc(void){
unsigned int status;
/* peremennaja statusa preobrazovanija */
status = p_ADC->ADC_SR;
AT91C_BASE_PIOA->PIO_CODR = REL1; // эта функция не выполняется, релюшка не включается
/* zapis v peremennuu statusa */
if(status & AT91C_ADC_ENDRX){
/* proverca zapolnenija bufera */
p_ADC->ADC_RPR = (unsigned long)(ADCBUFER);
p_ADC->ADC_RCR = sizeof(ADCBUFER);
}//end if(status & AT91C_ADC_ENDRX)
/* */
p_AIC->AIC_EOICR = status;
}//end void Func_Irq_Adc(void)
//------------------------------------------------------------
void Func_Irq_Timer0(void){
p_ADC->ADC_CR = AT91C_ADC_START;
/*
if(y == 1){y = 0; AT91C_BASE_PIOA->PIO_CODR = REL1;AT91C_BASE_PIOA->PIO_SODR = REL2;}else{y = 1;AT91C_BASE_PIOA->PIO_SODR = REL1;AT91C_BASE_PIOA->PIO_CODR = REL2;}
*/ /* Проверка эта функция выпоняется, если раскоментировать то релюхи жужат */
/* zapusk ad preobrazovanie */
p_AIC->AIC_EOICR = p_TC0->TC_SR;
}//end void Func_Irq_Timer0(void)
//------------------------------------------------------------
adc.h
CODE
#ifndef _ADC_H_
#define _ADC_H_
//------------------------------------------------------------
#define BV(x) (1UL<<(x))
#define ADC_CLK 6
//------------------------------------------------------------
extern unsigned int ADCBUFER[4];
//------------------------------------------------------------
extern void InitADC(void);
extern void Init_T0(void);
void Func_Irq_Timer0(void) __attribute__ ((interrupt));
void Func_Irq_Adc(void) __attribute__ ((interrupt));
//------------------------------------------------------------
#endif