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

Эмуляция UARTа через SPORT на блекфине

Здравствуйте уважаемые!

Есть-ли у кого пример кода на СИ , как сделать UART - TX из SPORTа на BLACKFIN533?

Нужно для вывода отладочной информации, всё остальное на нём уже занято.

Спасибо!

 

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


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

Здравствуйте уважаемые!

Есть-ли у кого пример кода на СИ , как сделать UART - TX из SPORTа на BLACKFIN533?

Нужно для вывода отладочной информации, всё остальное на нём уже занято.

Спасибо!

 

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

 

странно, что не в форуме по dsp http://electronix.ru/forum/index.php?showforum=3.

это чтобы никто не заметил?

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


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

..спасибо за участие!

з.ы.

в приложении вывод по каналу SPORT1 через перывания на UART c 256000 б/с .

1.txt

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


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

..код выше не работает.

----------------------------------------

код ниже - работает по прерывания:

SPORT_TX - UART

для вывода отладки.

 

//----------------------------------------
// 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");

}

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


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

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

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

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

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

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

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

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

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

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