реклама на сайте
подробности

 
 
> SAM7 + IAR, прерывания нужна помощь...
nameless
сообщение Jul 26 2006, 07:06
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 9-07-04
Пользователь №: 305



Почему в теле обработчика не видится статус АЦП-а TWI-я и др.???

__arm void timer0_c_irq_handler(void)
{
u32 dummy;
dummy = AT91C_BASE_TC0 -> TC_SR;//Acknowledge interrupt status
dummy = dummy;//Suppress warning <<variable "dummy" was set but never used>>
timer0_int_counter++;
AT91C_BASE_PIOA -> PIO_ODSR = (u32)(timer0_int_counter<<31);//ODSR write

AT91F_ADC_StartConversion(AT91C_BASE_ADC);
while(!((AT91F_ADC_GetStatus(AT91C_BASE_ADC))&(1<<last_ch)));// ВОТ ЗДЕСЬ ЗАТЫК мертвый!!!

STATUS[7] = (u8)(AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC));
STATUS[8] = (u8)((AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC)) >> 8);

AT91C_BASE_AIC -> AIC_EOICR = AT91C_ID_TC0;
}
//******************************************************************************
void timer0_init(void)
{
unsigned int dummy;
AT91C_BASE_PMC -> PMC_PCER = 1 << 12;//Enable the clock of the timer0 module ([PMC_PCER]: id = 12)
AT91C_BASE_TC0 -> TC_CCR = 1 << 1;//Disable clock [TC_CCR\CLKDIS {p366}] =1
AT91C_BASE_TC0 -> TC_IDR = 0x000000FF;//Disable all interrupts[TC_IDR {p379}]
dummy = AT91C_BASE_TC0 -> TC_SR;//Clear all status by read [TC_SR {p376}]
dummy = dummy;//Suppress warning variable "dummy" was set but never used
AT91C_BASE_TC0 -> TC_CMR = (1 << 14)|4;//CLKI[3]=0;BURST[5:4]=0;LDBSTOP[6]=0;
//LDBDIS[7]=0;ETRGEDG[9:8]=0;ABETRG[10]=0;CPCTRG[14]=1;WAVE[15]=0;
//LDRA[17:16]=0;LDRB[19:18]=0
AT91C_BASE_TC0 -> TC_CCR = 1 << 0;//Enable clock [TC_CCR\CLKEN {p366}] =1
AT91C_BASE_TC0 -> TC_RC = 46875;//Period/MCK/1024 = 46875 (48 MHz / 1024 / 46875 = 1 sec)
void (*handler)(void);
handler = timer0_c_irq_handler;
AT91C_BASE_AIC -> AIC_IDCR = (1 << 12);//Disable the interrupt on the interrupt controller
AT91C_BASE_AIC -> AIC_SVR[12] = (unsigned int)handler;//Interrupt handler routine pointer
AT91C_BASE_AIC -> AIC_SMR[12] = (1 << 0)|(1 << 5);//(priority =1);[AIC_SMR\SRCTYPE]=0 (Level sensitive)
AT91C_BASE_AIC -> AIC_ICCR = (1 << 12);//[AIC_ICCR\PID12 {p146}]Clear the interrupt
AT91C_BASE_TC0 -> TC_IER = (1 << 4 ); //[TC_IER\CPCS[4]]=1 (RC Compare IRQ enable)
AT91C_BASE_AIC -> AIC_IECR = (1 << 12);//Interrupt enable [AIC_IECR\PID12 {p145}]=1
AT91C_BASE_AIC -> AIC_ISCR = (1 << 12);//Generate interrupt by software [AIC_ISCR\PID12 {p147}]=1
AT91C_BASE_TC0 -> TC_CCR = (1 << 2 );//Start timer [TC_CCR\SWTRG {p366}] =1
}

А в main все эти биты выдны сразу....
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016