Свежие обсуждения
Микроконтроллеры

Кто работал с DSK5402

1 6

помогите понять почему при подключение к каналу DMA регистр DRR11 все идеть по путем а при подключение регистра DRR10 с типом синхронизации REVT0 '0001' не чего не идеть кроме сплошного писка вообщем то не могу работать с портом McBSP0 DAA DSK5402 помогите понять пожалуйста .

 

Проект в студию.

 

Здравствуйте спасибо Вам за то, что ответили мне уже вторая неделя идет, как я переехал в ад не знаю что делать как сказал борт DSK5402 посмотрел примеры, работающие с DAA (тел. линия) они все работают но хотелось бы подключить регистры DRR10 и DXR10 к каналом DMA. Программа, которой отправляю должен принимать данные от DRR11 McBSP1 с участием DMA и должен передать DRR10 с участием DMA (DAA). Помогите, пожалуйста, разобраться. С большим уважением Пелинг.

205655.rar

 

Здравствуйте спасибо Вам за то, что ответили мне уже вторая неделя идет, как я переехал в ад не знаю что делать как сказал борт DSK5402 посмотрел примеры, работающие с DAA (тел. линия) они все работают но хотелось бы подключить регистры DRR10 и DXR10 к каналом DMA. Программа, которой отправляю должен принимать данные от DRR11 McBSP1 с участием DMA и должен передать DRR10 с участием DMA (DAA). Помогите, пожалуйста, разобраться. С большим уважением Пелинг.

205656.rar

 

Извиняюсь ошыбочка : Программа, которой отправляю должен принимать данные от DRR10 McBSP0 с участием DMA и должен передать DХR11 McBSP1 с участием DMA (DAA).

 

Ответьте не несколько вопросов.

1) С какой частью оборудования связан каждый из ваших буферов RX_BUF, TX_BUF, t_buffer, r_buffer?

2) Что вы хотите сделать в итоге, и что сделали на сегодняшний день?

3) Что вы хотите сделать в прерываниях _DMA2_int и _DMA3_int?

4) Что вы хотите сделать в основной программе?

 

r_buffer - это приемный буфер 2 го канала ДМА (при).
t_buffer - это передающий буфер 3 го канала ДМА (пере).
RX_BUF - это буфер где будеть копироватся данные с приемного канала ДМА2 для дальнейшей обработки (RX_buf = r_buffer)
TX_BUF - это буфер предназначен для хранениня обработанных данных и дальнейшего копирования в буфер передяющего канала ДМА 3 (TX_buf = t_buffer).
Хочу сделать модем по протоколу v.32bis/
По поводу прерываниях
_DMA2_int - это прерывания 2 го канала ДМА (приемного канала)
_DMA3_int - это прерывания 3 го канала ДМА (передаю. канала)
В основном программе я просто копироваю RX_BUF в TX_BUF тоесть даю сигнал с DAA входа DSK5402 и получаю с громко говорящего выхода.

 

На вопросы поточнее ответьте

1) Что сейчас делает программа и что вы хотите чтобы она делала? (Не надо в общем, глобально понятно - модем)

2) Опишите, что вы хотите сделать в прерываниях?

 

В данный момент программа делает :
1 считовает инфу с McBSP0 (DRR10, (DAA dsk5402)) и без не каких преобразований передает к McBSP1 (DXR11 (spec)).

***********************************************************************************************************************************************
Хочу что бы программа считовала инфу с McBSP0 (DRR10, (DAA dsk5402)) и передовала к McBSP1 (DXR11 (spec)) за одно с McBSP1 (DRR11, (mic) и передовала к McBSP0 DXR10 (DAA dsk5402) ну вообщемто обеспечивать думплексный связь.

Насчет прерываний при _DMA2_int : копир-ю из приемного буфера ДМА2 в какойта (RX_buf) для дальнейшей обработки за одно копир-ю обработанной данные с (TX_buf) к буферу канала передачи ДМА3.
Насчет прерываний при _DMA3_int : тоже сам.
как вы думаете правильно.

 

Для дуплекса добавьте ещё два канала дма и 4 буфера, и будет вам счастье.

Замечания по существующей программе такие.

1) Зачем вы в обоих прерываниях копируете оба буфера? В дма2инт вы приняли только один буфер, а копируете два. Также и в дма3инт.

2) Почему в дма3инт вы копируете 3 слова, а не 4?

3) Операции присваивания в основной программе обычно осуществляются через аккумы, прерывания их могут портить, так что надо принимать меры, я вам уже писал про это. То же самое касается флагов и т.п.

Не знаю полностью вашей задачи, но ваш подход к построению системы мне кажется сомнительным. Обычно берутся те же два буфера, скажем, rxdaa1 и rxdaa2 (на мой взгляд, ваши обозначения RX_BUF и r_buffer очень несуразные) и пока дма2 пишет в один буфер rxdaa1, второй буфер rxdaa2 обрабатывается в основной программе. После того, как приёмный буфер заполнен, возникает дма2-прерывание, в котором адреса приемных буферов меняются местами и весь процесс повторяется по-новой. Точно так же надо поступить и с передающими буферами, скажем, txaud1 и txaud2.

Если в каком-либо направлении обработка не предусмотрена, то можно обойтись двумя буферами, в один буфер, скажем, принимается информация, из другого - выдаётся. А гонять огромные массивы из одного места памяти в другое не стоит, так всё время проца потратите впустую.