реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Эмуляция UARTа через SPORT на блекфине
Lmx2315
сообщение Dec 5 2015, 13:27
Сообщение #1


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Здравствуйте уважаемые!
Есть-ли у кого пример кода на СИ , как сделать UART - TX из SPORTа на BLACKFIN533?
Нужно для вывода отладочной информации, всё остальное на нём уже занято.
Спасибо!


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
psL
сообщение Dec 9 2015, 17:02
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(Lmx2315 @ Dec 5 2015, 16:27) *
Здравствуйте уважаемые!
Есть-ли у кого пример кода на СИ , как сделать UART - TX из SPORTа на BLACKFIN533?
Нужно для вывода отладочной информации, всё остальное на нём уже занято.
Спасибо!


https://ez.analog.com/message/13824#13824

странно, что не в форуме по dsp http://electronix.ru/forum/index.php?showforum=3.
это чтобы никто не заметил?
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 14 2015, 16:26
Сообщение #3


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..спасибо за участие!
з.ы.
в приложении вывод по каналу SPORT1 через перывания на UART c 256000 б/с .
Прикрепленные файлы
Прикрепленный файл  1.txt ( 3.46 килобайт ) Кол-во скачиваний: 10
 


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 14 2015, 19:09
Сообщение #4


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..код выше не работает.
----------------------------------------
код ниже - работает по прерывания:
SPORT_TX - UART
для вывода отладки.

CODE
//----------------------------------------
// SPORT Transmitter buffer
#define TX_BUFFER_SIZE1 512
volatile u8 tx_buffer1[TX_BUFFER_SIZE1];
volatile unsigned int tx_wr_index1=0,
tx_rd_index1=0,tx_counter1=0;

//-------------------------------------------------


void Init_Interrupts(void)
{
// assign core IDs to interrupts
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xfff2ffff;//SPORT1 TX->IVG4
*pSIC_IAR2 = 0xffffffff;
ssync();
// assign ISRs to interrupt vectors
register_handler( ik_ivg9, SPORT1_TX_ISR); //
ssync();
*pSIC_IMASK = (DMA4_IRQ);// DMA4_IRQ - SPORT1_TX_ISR
}

//------------------------------------------------------------

void init_SPORT1 (unsigned int SPORT1_SCLK) //инициализация канала SPORT0

{

short divider;
unsigned int SCLK_VALUE=100000000;//клок системной шины

*pSPORT1_TCR1 = TFSR | ITFS | ITCLK |TLSBIT; /* TSPEN запишем позже! */
*pSPORT1_TCR2 = 10; /* длина передачи минус 1 */

/* Настраиваем регистр приёма, фаза 0 полярность 0
*/

*pSPORT1_RCR1 = RCKFE | RFSR; /* RSPEN запишем позже! */
*pSPORT1_RCR2 = 10; /* 32 - 1; Длина приемника 32 бита - у нас такой АЦП */


/* Расчитаем делитель и запишем его в регистры тактовой частоты приема и передачи */
divider = SCLK_VALUE / (SPORT1_SCLK * 2 - 1);

/* Делитель в оба регистра */
*pSPORT1_TCLKDIV = divider;
*pSPORT1_RCLKDIV = divider;
*pSPORT1_TFSDIV = 0;

}
//------------------------------------------------------------


EX_INTERRUPT_HANDLER(SPORT1_TX_ISR)
{
u16 a=0;
u16 data;

*pDMA4_IRQ_STATUS = DMA_DONE;

FLAG_SPORT1_TX=1;

if (tx_counter1)
{
--tx_counter1;

data = tx_buffer1[tx_rd_index1++];
a = data<<2;
data = (a|(0x01<<10))|0x1;
*pSPORT1_TX16 = data;

if (tx_rd_index1 == TX_BUFFER_SIZE1) tx_rd_index1=0;
}
else
{
*pSIC_IMASK &= ~0x01000;
}

}

//---------------------------------------------------


void SPORT1_enable(void)
{
*pSIC_IMASK |= 0x01000;
ssync();
*pSPORT1_TCR1 |= TSPEN; // Enable SPORT0 Transmitter
ssync();
*pSPORT1_RCR1 |= RSPEN; // Enable SPORT0 Transmitter
ssync();
}

void SPORT1_disable(void)
{
ssync();
*pSPORT1_TCR1 &= ~(TSPEN); // Enable SPORT0 Transmitter
ssync();
*pSPORT1_RCR1 &= ~(RSPEN); // Enable SPORT0 Transmitter
ssync();
}


u32 SPORT1_write (u16 data)
{
volatile u32 word;
u16 a=0;
int temp_IMASK; //Anomali err

a = data<<2;
data = (a|(0x01<<10))|0x1;
SPORT1_enable();

//while(!(*pSPORT1_STAT & TXHRE));

*pSPORT1_TX16 = data;

return word;
}



void put_char1(char c)
{
// while (tx_counter1 == TX_BUFFER_SIZE1);
*pSIC_IMASK &= ~0x01000;//запрещаем прерывание на передачу
ssync();

if (tx_counter1||((*pSPORT1_STAT & TXF))) //если буфер не пустой или FIFO забит
{
tx_buffer1[tx_wr_index1++]=c;
if (tx_wr_index1 == TX_BUFFER_SIZE1) tx_wr_index1=0;
++tx_counter1;
ssync();
*pSIC_IMASK |= 0x01000;//разрешаем прерывание на передачу
ssync();
}
else
{
SPORT1_write ©;
}


}

void put_str1(char *s)
{
while (*s != 0)
put_char1(*s++);
}



int main(void)
{

init_SPORT1 (256000)//инициализация канала SPORT1 256000 бит/с

Init_Interrupts();

put_str1("Hellow world!\r\n");

}


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 06:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016