Перейти к содержанию
    

Модуль UART в ADUC7026

Подскажите, пожалуйста, есть ли более подробное описание UART ADUC702x, чем приведённое в даташите?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, есть ли более подробное описание UART ADUC702x, чем приведённое в даташите?
Не попадалось. Но мне удалось его заставить работать. Если интересно, могу выложить пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, есть ли более подробное описание UART ADUC702x, чем приведённое в даташите?

Не попадалось. Но мне удалось его заставить работать. Если интересно, могу выложить пример.

Интересно ли мне? Интересно - не то слово. Вопрос жизни и смерти!:)

Можно послать примеры на [email protected] или сообщить, где они лежат. Заранее признателен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Более подробное - не попадалось. Но тоже заставил его работать :) Замеченные особенности работы:

для загрузки программы использовать - только пины 1.0 и 1.1, а не 0.7 и 2.0 - я на это попался, т.к. в документации разница между ними не оговаривалась, а техсаппорт ADI мне ответил, что,мол, сорри, забыли описать, в след. версии даташита... А у меня на тестовом образце девайса пришлось проводки сверху к пинам припаивать :) Это для загрузки только, потом 0.7 и 2.0 можно использовать как RXD и TXD

Изменено пользователем Snusmumrik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, есть ли более подробное описание UART ADUC702x, чем приведённое в даташите?

Не попадалось. Но мне удалось его заставить работать. Если интересно, могу выложить пример.

 

Если возможно, перешлите пример на [email protected], а то никак не могу завести. Прерывания по приему идут, а ответ не передается. Кстати вот код, может кто что-нибудь подскажет:

 

/*--------------------------------------------------------------------------*/

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) в обработке прерывания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, есть ли более подробное описание UART ADUC702x, чем приведённое в даташите?

Не попадалось. Но мне удалось его заставить работать. Если интересно, могу выложить пример.

 

Если возможно, перешлите пример на [email protected], а то никак не могу завести. Прерывания по приему идут, а ответ не передается.

Где может быть проблема: первые образцы кристаллов имели коэфф. умножения PLL 1376 и частоту около 45МГц, в последних даташитах указано 1275 и 41.7МГц. Я на этом довольно много времени потерял. Свой код прилагаю. Код выдернут из проекта и в "обкоцаном" виде не проверялся.

 

P.S. Поборол природную лень и проверил/подправил приложенный код. Теперь компилится и работает.

ADuC_UART.zip

Изменено пользователем Сергей Борщ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С частотой я уже разобрался: действительно частота ядра ниже! Синхронизировал длительность одного бита с помощью осциллографа (пришлось применить дробный делитель).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...