2010-08-02 03:35:45     Can't disable certain RX TDM channel in SPORT TDM mode.

Document created by Aaronwu Employee on Aug 22, 2013
Version 1Show Document
  • View in full screen mode

2010-08-02 03:35:45     Can't disable certain RX TDM channel in SPORT TDM mode.

Michail Kurochkin (BELARUS)

Message: 92039   

 

I need select second channel from TDM frame for read. For this aim, I set MRCS0 = 0x2 and MRCS1, MRCS2, MRCS3 are set to null.

 

    bfin_write_SPORT0_MRCS0(0x2);

    bfin_write_SPORT0_MRCS1(0);

    bfin_write_SPORT0_MRCS2(0);

    bfin_write_SPORT0_MRCS3(0);

 

 

I read from SPORT_RX all channels from TDM frame. Registers MRCS0, MRCS1, MRCS2, MRCS3 not influence.

 

However, this success work for transmit data in certain channel (if use registers MTCS0, MTCS1, MTCS2, MTCS3).

 

Why MRCSx registers not work in TDM mode?

 

All code for configure SPORT below:

 

#define TDM_FREQ 1024000 //PCLK frequency HZ

#define TDM_FRAME_SYNC 8000 //Frame synchronize HZ

 

 

    bfin_write_SPORT_RCR1(0);

    bfin_write_SPORT_RCR2(0);

    bfin_write_SPORT_TCR1(0);

    bfin_write_SPORT_TCR2(0);

 

    bfin_write_SPORT_TCLKDIV(get_sclk() / TDM_FREQ / 2 - 1);

    bfin_write_SPORT_RCLKDIV(get_sclk() / TDM_FREQ / 2 - 1);

    SSYNC();

 

    bfin_write_SPORT_TFSDIV(TDM_FREQ / TDM_FRAME_SYNC - 1);

    bfin_write_SPORT_RFSDIV(TDM_FREQ / TDM_FRAME_SYNC - 1);

    SSYNC();

 

    bfin_write_SPORT_TCR1(TFSR | DITFS | ITFS);

    bfin_write_SPORT_RCR1(RFSR | DITFS | IRFS);

 

    bfin_write_SPORT_TCR2(0x7); // Set 8bit per channel for transmit

    bfin_write_SPORT_RCR2(0x7);  // Set 8bit per channel for receive

 

    bfin_write_SPORT_MCMC1(0x0);

    bfin_write_SPORT_MCMC2(0x1010);

  

    bfin_write_SPORT_MRCS0(0x2); //Select second channel for receive

    bfin_write_SPORT_MTCS0(0x2); //Select second channel for transmit

 

// disable others channels...

    bfin_write_SPORT_MRCS1(0);

    bfin_write_SPORT_MTCS1(0);

    bfin_write_SPORT_MRCS2(0);

    bfin_write_SPORT_MTCS2(0);

    bfin_write_SPORT_MRCS3(0);

    bfin_write_SPORT_MTCS3(0);

 

    SSYNC();

    bfin_write_SPORT_TCR1(bfin_read_SPORT_TCR1() | TSPEN); //Enable SPORT

    bfin_write_SPORT_RCR1(bfin_read_SPORT_RCR1() | RSPEN); //Enable SPORT

 

   for(;;)

 

   {

        if(bfin_read_SPORT_STAT() & RXNE)

            printk("receive byte = %d\n", bfin_read16(SPORT1_RX));

        else

            printk("FIFO empty\n");

  }

QuoteReplyEditDelete

 

 

2010-08-02 05:07:35     Re: Can't disable certain RX TDM channel in SPORT TDM mode.

Mike Sinkovsky (RUSSIAN FEDERATION)

Message: 92043   

 

А чего добиться то хотел?

 

Насколько я понял, нужно 16 тайм-слотов по 8 бит в каждом? И с синхронизацией от процессора?

 

Странная какая-то конфигурация, обычно по 32 или 128 тайм-слотов бывает.

QuoteReplyEditDelete

 

 

2010-08-02 06:32:15     Re: Can't disable certain RX TDM channel in SPORT TDM mode.

Michail Kurochkin (BELARUS)

Message: 92044   

 

Михаил, спасибо за ответ.

 

Тут нестандартное устройство, требующее по даташиту частоту кадровой синхронизации 8килогерц. А вот частота тактовой синхронизации в этом устройстве может иметь несколько разных вариантов 1024Mhz, 1536Mhz, 2048Mhz, 4096Mhz, 8192Mhz. Пока что, я настроил устройство на 1024Mhz тактовой частоты. Причем частота кадровой синхронизации неменяется не при каком значении тактовой частоты. Всегда строго 8kHz.

 

Потому при 1024Mhz получается 16 8ми битных каналов. И вот уже который день неполучается настроить фильтр MRCSx чтобы принимать не все 16каналов а только второй. Что каcается передачи, то тут все четко - какой канал включил в тот данные из FIFO (SPORT_TX) и поступают. А вот с приемом непонятка.

QuoteReplyEditDelete

 

 

2010-08-02 06:44:26     Re: Can't disable certain RX TDM channel in SPORT TDM mode.

Michail Kurochkin (BELARUS)

Message: 92046   

 

Насчет, синхронизации: Тактовая частота подается с внешнего генератора, а кадровая достигается делением тактовой частоты на определенный множитель, такой чтобы кадровая была всегда 8kHz.

QuoteReplyEditDelete

 

 

2010-08-02 09:02:57     Re: Can't disable certain RX TDM channel in SPORT TDM mode.

Mike Sinkovsky (RUSSIAN FEDERATION)

Message: 92049   

 

Навскидку могу сказать разве что регистр MCMC1 неправильно запрограммирован, должно быть типа такого:

 

 

#define TDM_WINDOW (TDM_FREQ / TDM_FRAME_SYNC / 8) /* == 16 */

bfin_write_SPORT_MCMC1 = ((TDM_WINDOW  /  8) - 1) << 12; /* == 0x1000 */

 

А на приеме вообще ничего нет, или со всех каналов?

Если ничего нет, то может аппаратно нужно замкнуть выводы TSCLK и RSCLK.

 

Хотя я всегда через DMA работал, может в режиме опроса и еще какие тонкости есть.

 

В общем приложил мой драйвер, он точно работает при 32 и 128 тайм-слотах.

Может там для твоего случая и слишком сложно, но больше вряд ли чем помогу.

 

sport.c

QuoteReplyEditDelete

 

 

2010-08-05 08:44:05     Re: Can't disable certain RX TDM channel in SPORT TDM mode.

Michail Kurochkin (BELARUS)

Message: 92180   

 

Mike thanks. Your driver assist me for DMA configuration. I need a minimum window size - 8words, therefore WSIZE = 0.

 

#define TDM_WIN_SIZE 8

 

bfin_write_SPORT0_MCMC1((TDM_WIN_SIZE / 8 - 1) << 12);

 

However, registers MRCSx not work.

 

Therefore I read full window (8 words) in DMA buffer with size 8 words. Next I do parse DMA buffer and eject every channel in my according FIFO buffer.

QuoteReplyEditDelete

 

 

2010-09-16 01:58:15     Re: Can't disable certain RX TDM channel in SPORT TDM mode.

Mike Sinkovsky (RUSSIAN FEDERATION)

Message: 93484   

 

Sorry, I just noticed that I lied in prev message - RFS-TFS and RCLK-TCLK pins must  NOT be connected in multichannel mode!

 

From Blackfin Processor Hardware Reference:

 

 

"In Multichannel mode, RSCLK can either be provided externally or gener-

ated internally by the SPORT, and it is used for both transmit and receive

functions. Leave TSCLK disconnected if the SPORT is used only in multi-

channel mode. If RSCLK is externally or internally provided, it will be

internally distributed to both the receiver and transmitter circuitry.

 

....

 

RFS signals start of frame

TFS is used as “Transmit Data Valid” for external logic, true only during

transmit channels"

 

Actually in all our boards TFS and TCLK was disconnected, but I am ust programmer, not hardware designer, and didnt noticed.

 

If thiese pins is connected on your borad - maybe it is source of problem?

Attachments

Outcomes