Jump to content

    
Sign in to follow this  
dipdip

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

Recommended Posts

Не выходит запустить 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?

 

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

 

Share this post


Link to post
Share on other sites

Я порт вообще вроде не трогал - работало на 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;
}

Share this post


Link to post
Share on other sites
Я порт вообще вроде не трогал - работало на 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-го.

 

Share this post


Link to post
Share on other sites
Неужели не нужно настраивать MUX, FER, направление пина PORTFIO_DIR, PORTFIO_INEN - разрешение пина на вход?

 

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

 

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

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

Share this post


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

 

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

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

 

 

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

 

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

 

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

 

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

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

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

*pPORTF_MUX &= ~0x1800;

*pPORTF_MUX |= 0x0000;

*pPORTF_FER |= (PF12|PF11);

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

 

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

 

Share this post


Link to post
Share on other sites
мне кажется последовательность:

*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 байта передать.

 

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

Edited by dipdip

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this