Jump to content

    

C6746 - не могу разобраться в настройках DMA

Прошу не пинать за глупые вопросы, в очередной раз разбираюсь с унаследованным кодом.

В устройстве производится обмен по шине I2S (McBSP0) с использованием EDMA в режиме пинг-понг.

В коде присутствуют следующие определения:

// каналы ЕДМА для нужд шины
#define EDMA_CH_RX1        3
#define EDMA_CH_RX2        13
#define EDMA_CH_TX1        2
#define EDMA_CH_TX2        12

И уже здесь возникают вопросы:

1. В DS (Table 6-12. EDMA Synchronization Events) указано, что
Event 2 - McBSP0 Receive, Event 3 - McBSP0 Transmit, т.е. ровно наоборот.

В принципе это не очень важно, поскольку обмен по I2S дуплексный и флаги прерывания по RX и TX устанавливаются и проверяются одновременно. Но хотелось бы понять.

2. В той же таблице указано, что каналы 12 и 13 вообще относятся к UART1.
С другой стороны, в документации сказано, что при завершении транзакции DMA будут установлены биты прерывания, соответствующие значению поля TCC регистра OPT PaRAM.

Т.е. вроде как никто не запрещает использовать "правильный" для MCBSP канал DMA, но "неправильное" прерывание. Насколько это умозаключение верно?

Помогите разобраться.

Share this post


Link to post
Share on other sites

Сдался вам этот пинг-понг....   Всё без него делается по референс-мануалу на EDMA3 и Mc*SP

Share this post


Link to post
Share on other sites
12 minutes ago, __inline__ said:

Сдался вам этот пинг-понг....   Всё без него делается по референс-мануалу на EDMA3 и Mc*SP

Ну, пинг-понг сделан ручной, т.е. в прерывании переключаются буфера и запускается обмен.

А что касается мануала, то в нем-то и вопрос.

В процессе изучения рабочего исходного кода я вижу, что он не совпадает с мануалом.

Поскольку у меня нет опыта работы с такими процессорами, возникает вопрос - правильно ли я понимаю мануал?

Тем более что, как я уже сказал, в DS указано: Event 2 - McBSP0 Receive, Event 3 - McBSP0 Transmit.

А в TRM написано: "DMA channel 3 services the incoming data stream of the McBSP. <...> DMA channel 2 services the outgoing data stream of the McBSP" (16.3.4.3.1 и 16.3.4.3.2)

Т.е. вроде как наоборот.

PS На 2-й вопрос я ответ нашел сам - да, так можно:

"If in an application, a channel does not make use of the associated synchronization event or does not
have an associated synchronization event (unused), that channel can be used for manually-triggered or
chained-triggered transfers."

Share this post


Link to post
Share on other sites

Может поможет.

 

Вот мой код для C6745 (не думаю, что I2S в 6746-м сильно отличается).

 

Играет звук через McASP + Audio FIFO + EDMA3 по трём измерениям + прерывание. 

 

Компилируется с CCS 6  TI C compiler 8.3.3, синтаксис -C99 :

 

McASP_EDMA3.rar

Edited by __inline__

Share this post


Link to post
Share on other sites
3 hours ago, __inline__ said:

Может поможет.

Вот мой код для C6745 (не думаю, что I2S в 6746-м сильно отличается).

 

Спасибо, посмотрю.

Share this post


Link to post
Share on other sites
4 часа назад, __inline__ сказал:

Вот мой код для C6745 (не думаю, что I2S в 6746-м сильно отличается).

Не отличаются??? У ТС-а - McBSP, а у Вас - McASP. Это как-бы несколько разные вещи. Не говоря уже о том, что МК другой.

Насколько помню - по периферии подобны 2 линейки внутри между собой:

1) C6745, C6747, L137;

2) C6746, C6748, L138.

А вот между этими линейками уже значительно больше отличий чем внутри.

Share this post


Link to post
Share on other sites

Кстати, от техподдержки TI пришел ответ на мой 1-й вопрос.

Правильная информация - в datasheet: Event 2 - McBSP0 Receive, Event 3 - McBSP0 Transmit

В TRM ошибка.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now