ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
117115 Топик полностью
Cepгeй Бopщ (31.03.2008 11:34, просмотров: 122) ответил Михаил Е. на Я вроде к нему и подключаюсь, тишина... Примерчика нет?
Пожалуйста. Одна тонкость - прерывание должно быть по уровню (особенно если используются другие системные прерывания). void DBGU_init() { AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN | AT91C_US_RSTSTA; AT91C_BASE_DBGU->DBGU_MR = AT91C_US_USMODE_NORMAL | AT91C_US_PAR_NONE; AT91C_BASE_DBGU->DBGU_BRGR = (MCK / 16 / UPLINK_BAUDRATE) + 0.5; AT91C_BASE_PIOA->PIO_PDR = (1UL<<9)|(1UL<<10); // pins are peripherial AT91C_BASE_DBGU->DBGU_IER = AT91C_US_RXRDY; // AIC AT91C_BASE_AIC->AIC_SMR[AT91C_ID_SYS] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | AT91C_AIC_PRIOR_LOWEST; AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (uint32_t)DBGU_Int_Handler; AT91C_BASE_AIC->AIC_IECR = (1<<AT91C_ID_SYS); // enable ints } __arm void DBGU_Int_Handler() { uint32_t Flags = AT91C_BASE_DBGU->DBGU_CSR; Flags &= AT91C_BASE_DBGU->DBGU_IMR; if(Flags & AT91C_US_RXRDY) DBGU_RxIntHandler(); if(Flags & AT91C_US_TXRDY) DBGU_TxIntHandler(); } #pragma vector = 0x18 __irq __arm void IRQ_Switch() { ((void(*)())AT91C_BASE_AIC->AIC_IVR)(); AT91C_BASE_AIC->AIC_EOICR = 0; // Reset AIC logic }