Изучаю AT91SAM7.
Использую Keil + Ulink2 + AT91SAM7X-EK.
как векторизировать прерывания в программе от USART, допустим, при получение байта информации ?
те как указать программе к какой функции необходимо перейти при установке флага.
с использованием API инициализировать:
Код
void init_serial(void) /* Initialize Serial Interface */
{
AT91S_AIC *pAIC = AT91C_BASE_AIC;
*AT91C_PIOA_PDR = AT91C_PA0_RXD0 | /* Disable RxD0 Pin */
AT91C_PA1_TXD0; /* Disable TxD0 Pin */
pUSART->US_CR = AT91C_US_RSTRX | /* Reset Receiver */
AT91C_US_RSTTX | /* Reset Transmitter */
AT91C_US_RXDIS | /* Receiver Disable */
AT91C_US_TXDIS; /* Transmitter Disable */
pUSART->US_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */
AT91C_US_CLKS_CLOCK | /* Clock = MCK */
AT91C_US_CHRL_8_BITS | /* 8-bit Data */
AT91C_US_PAR_NONE | /* No Parity */
AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */
pUSART->US_BRGR = BRD; /* Baud Rate Divisor */
pUSART->US_IER = AT91C_US_TXRDY; /*enable rx comp int */
pUSART->US_CR = AT91C_US_RXEN | /* Receiver Enable */
AT91C_US_TXEN; /* Transmitter Enable */
pAIC->AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 5;
pAIC->AIC_SVR[AT91C_ID_US0] = (unsigned long) usart_int;
pAIC->AIC_IECR = (1 << AT91C_ID_US0);
}
а потом в векторе считывать флаги и определять, чем вызвано и как реагировать ?
Код
__irq void usart_int(void)
{
}
что не так ?
Сообщение отредактировал Hellper - May 5 2009, 09:37