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

Не запускается uart blackfin

Не выходит запустить uart blackfin.

 

Использую такой инит

 

void uart_init (unsigned int divisor)

{

 

/*

// UART0 Controller (0xFFC00400 - 0xFFC004FF)

#define pUART0_THR ((volatile uint16_t *)UART0_THR)

#define pUART0_RBR ((volatile uint16_t *)UART0_RBR)

#define pUART0_DLL ((volatile uint16_t *)UART0_DLL)

#define pUART0_IER ((volatile uint16_t *)UART0_IER)

#define pUART0_DLH ((volatile uint16_t *)UART0_DLH)

#define pUART0_IIR ((volatile uint16_t *)UART0_IIR)

#define pUART0_LCR ((volatile uint16_t *)UART0_LCR)

#define pUART0_MCR ((volatile uint16_t *)UART0_MCR)

#define pUART0_LSR ((volatile uint16_t *)UART0_LSR)

#define pUART0_SCR ((volatile uint16_t *)UART0_SCR)

#define pUART0_GCTL ((volatile uint16_t *)UART0_GCTL)

 

*/

 

// enable UART clock.

*pUART0_GCTL = UCEN;//enable uart clock

// Read period value and apply formula: divisor = period/16*8

// Write result to the two 8-bit DL registers (DLH:DLL).

*pUART0_LCR = DLAB;//#define DLAB 0x80 Divisor Latch Access-ðàçðåøåíèå äîñòóïà â ðåãèñòð DLL,DLH

*pUART0_DLL = divisor;

*pUART0_DLH = divisor>>8;

// Clear DLAB again and set UART frame to 8 bits, no parity, 1 stop bit.

*pUART0_LCR = WLS(8);//#define WLS(x) (((x)-5) & 0x03) /* Word Length Select

//*pUART0_MCR = *pUART0_MCR | (1<<4);//âêëþ÷èòü ïèíû rx tx (bit4=1)

 

*pPORTFIO_DIR =*pPORTFIO_DIR | (1<<11);// F11 - out - bit11=1),

*pPORTF_FER = *pPORTF_FER & ~(1<<11);//tx bit11=0 - uart tx, =1 - F11. pin13

//*pPORTF_FER = *pPORTF_FER |(1<<11);

*pPORTF_FER = *pPORTF_FER & ~(1<<12);//rx bit12=0 - uart rx, =1 - F12. pin15

//*pPORTFIO_INEN=*pPORTFIO_INEN | (1<<11) | (1<<12);//enable pin f11,f12

*pPORTF_MUX = *pPORTF_MUX & ~(1<<11) & ~(1<<12);

 

Что подправить в настройке порта F.11?

 

Пробовал разные комбинации - не помогает.

 

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


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

Я порт вообще вроде не трогал - работало на 561:

 

void Init_UART(void)
{
    volatile int temp;
*pUART_GCTL = UCEN;
*pUART_LCR = DLAB;
*pUART_DLL = BAUD_RATE_115200;
*pUART_DLH = (BAUD_RATE_115200 >> 8);
*pUART_LCR = 0x03;

temp = *pUART_RBR;
temp = *pUART_LSR;
temp = *pUART_IIR;

*pUART_IER = ETBEI;

PutChar('\r');PutChar('\n');
}
int PutChar(const char cVal)
{
int nStatus = 0;
u32 T;

T=GetTimeMS()+100;
    
do    { 
    if( 0x20==(*pUART_LSR & 0x20) )
        {
        *pUART_THR = cVal;
        nStatus = 1;
        break;
        }
     ssync();
    }while( T>GetTimeMS() );

return nStatus;
}

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


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

Я порт вообще вроде не трогал - работало на 561:

 

void Init_UART(void)
{
    volatile int temp;
*pUART_GCTL = UCEN;
*pUART_LCR = DLAB;
*pUART_DLL = BAUD_RATE_115200;
*pUART_DLH = (BAUD_RATE_115200 >> 8);
*pUART_LCR = 0x03;

temp = *pUART_RBR;
temp = *pUART_LSR;
temp = *pUART_IIR;

*pUART_IER = ETBEI;

PutChar('\r');PutChar('\n');
}
int PutChar(const char cVal)
{
int nStatus = 0;
u32 T;

T=GetTimeMS()+100;
    
do    { 
    if( 0x20==(*pUART_LSR & 0x20) )
        {
        *pUART_THR = cVal;
        nStatus = 1;
        break;
        }
     ssync();
    }while( T>GetTimeMS() );

return nStatus;
}

 

Спасибо за пример, это то же, что я пробовал,но,

не наблюдаю настройки разрядов порта, в которые выведены пины rx, tx uart.

 

Неужели не нужно настраивать MUX, FER, направление пина PORTFIO_DIR,

PORTFIO_INEN - разрешение пина на вход?

 

Может для 561-го где-то раньше в программе были прописаны настройки пинов?

 

У меня ADSP-bf592.

Смотрел пример для 561 из доки на adsp-5-examples - там тоже ничего нет по пинам порта.

 

Какое значение должно быть в регистре UART_MCR (разряд4), который отключает

tx от выходного пина и подключает rx tx внутри для лупбек?

 

Из пдф-а не понятно - не прописано - пропуск в хардваре реф для - 592-го.

 

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


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

Неужели не нужно настраивать MUX, FER, направление пина PORTFIO_DIR, PORTFIO_INEN - разрешение пина на вход?

 

Нет, поскольку в таблице 14-1 на 561 сказано, что PF26|PF27 работают только при неактивном UART.

 

Обычно, в сложных случаях - я баловался с регистрами напрямую через VDSP - это быстрее, чем компилить новый вариант.

Или можно остановить рабочий пример - и посмотреть настройки регистров..

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


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

Нет, поскольку в таблице 14-1 на 561 сказано, что PF26|PF27 работают только при неактивном UART.

 

Обычно, в сложных случаях - я баловался с регистрами напрямую через VDSP - это быстрее, чем компилить новый вариант.

Или можно остановить рабочий пример - и посмотреть настройки регистров..

 

 

Регистры uart смотрел на vdsp - показывает, все как нужно.

 

Регистры порта F для 592-го не отображает - показывает серым.

 

Поэтому и спрашиваю за порт.

 

В таблице mux написано, что значение бита для порта IO и FUNCtion отличается.

 

 

 

 

 

 

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


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

мне кажется последовательность:

*pPORTF_MUX &= ~0x1800;

*pPORTF_MUX |= 0x0000;

*pPORTF_FER |= (PF12|PF11);

отключает, а не включает порты.

 

Вы пробовали курить EE347v03 ?

 

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


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

мне кажется последовательность:

*pPORTF_MUX &= ~0x1800;

*pPORTF_MUX |= 0x0000;

*pPORTF_FER |= (PF12|PF11);

отключает, а не включает порты.

 

Вы пробовали курить EE347v03 ?

 

Заработало.

 

Нужно было поставить

 

*pPORTF_FER = *pPORTF_FER | (1<<11) | (1<<12); - 1-цы вместо 0 для функции rx tx pin.

0 - для пина.

 

Было наоборот.

 

Не понятно зачем вторая строка в

*pPORTF_MUX &= ~0x1800;

*pPORTF_MUX |= 0x0000;

 

EE347v03 - слишком громоздко (фундаментально) для 2 байта передать.

 

Спасибо за консультации.

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

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


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

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

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

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

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

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

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

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

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

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