Цитата(Сергей Борщ @ Sep 8 2006, 13:42)

Цитата(Paragon @ Sep 8 2006, 07:51)

Подскажите, пожалуйста, есть ли более подробное описание UART ADUC702x, чем приведённое в даташите?
Не попадалось. Но мне удалось его заставить работать. Если интересно, могу выложить пример.
Если возможно, перешлите пример на gsv@iec-ua.com, а то никак не могу завести. Прерывания по приему идут, а ответ не передается. Кстати вот код, может кто что-нибудь подскажет:
/*--------------------------------------------------------------------------*/
void UART_IRQ(void)
{
unsigned char comiid0 = COMIID0&0x06;
if( comiid0==0x02 ) { // Орбаботка прерывания по передаче
if ( buf[0]<=len ) COMTX = buf[len++];
else {
COMIEN0 |= (1<<ELSI); // разрешение обработки прерываний
len = 0x00;
}
}
else {
if( comiid0==0x04 ) { // Обработка прерывания по приему
buf[len] = COMRX;
if ( (buf[0]&0x0f)==len ) { // завершение приема команды
COMIEN0 &=~ (1<<ELSI); // запрет обработки прерываний
clocUart = 0x00; // запрет обработки тайм-аута обмена
// FullUART = 0x55; // установка флага приема посылки
ActiveTX();
}
else {
len++;
clocUart = 10;
}
}
else { // сброс необрабатываемых прерываний
comiid0 = COMSTA0;
comiid0 = COMSTA1;
}
}
}
/*--------------------------------------------------------------------------*/
void UART_Init(void)
{
unsigned short baund = 0x92;
//Инициализация COM-порта
COMCON0 = (1<<DLAB);
COMDIV1 = (baund>>8);
COMDIV0 = baund&0xff;
COMCON0 = (1<<STOP)|(3<<WLS); // 8-бит + 2 стоповых
COMIEN0 = (1<<ELSI)|(1<<ETBEI);//Радрешение прерываний по приему и передаче
baund = COMIID0; // контрольный сброс прерываний
len = 0x00;
}
//--------------------------------------------------------------------------
void ActiveTX(void)
{
COMTX = buf[len=0];
len++;
}
/*--------------------------------------------------------------------------*/
в UART_IRQ попадает при анализе флага
(IRQSIG&UART_BIT) в обработке прерывания.